@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.
Files changed (783) hide show
  1. package/README.md +8 -8
  2. package/blog/ar/history_of_i18n.md +54 -54
  3. package/blog/ar/how_to_pick_react_i18n_library.md +548 -0
  4. package/blog/ar/how_to_pick_solid_i18n_library.md +438 -0
  5. package/blog/ar/how_to_pick_svelte_i18n_library.md +454 -0
  6. package/blog/ar/how_to_pick_vue_i18n_library.md +442 -0
  7. package/blog/ar/is_i18next_outdated.md +5 -1
  8. package/blog/ar/is_next-intl_outdated.md +5 -1
  9. package/blog/ar/is_vue-i18n_outdated.md +7 -1
  10. package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +8 -4
  11. package/blog/ar/per-component_vs_centralized_i18n.md +9 -4
  12. package/blog/ar/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  13. package/blog/de/history_of_i18n.md +54 -54
  14. package/blog/de/how_to_pick_react_i18n_library.md +548 -0
  15. package/blog/de/how_to_pick_solid_i18n_library.md +451 -0
  16. package/blog/de/how_to_pick_svelte_i18n_library.md +454 -0
  17. package/blog/de/how_to_pick_vue_i18n_library.md +448 -0
  18. package/blog/de/is_i18next_outdated.md +5 -1
  19. package/blog/de/is_next-intl_outdated.md +5 -1
  20. package/blog/de/is_vue-i18n_outdated.md +7 -1
  21. package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
  22. package/blog/de/per-component_vs_centralized_i18n.md +9 -4
  23. package/blog/de/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  24. package/blog/en/history_of_i18n.md +54 -54
  25. package/blog/en/how_to_pick_react_i18n_library.md +542 -0
  26. package/blog/en/how_to_pick_solid_i18n_library.md +438 -0
  27. package/blog/en/how_to_pick_svelte_i18n_library.md +448 -0
  28. package/blog/en/how_to_pick_vue_i18n_library.md +442 -0
  29. package/blog/en/is_i18next_outdated.md +5 -1
  30. package/blog/en/is_next-intl_outdated.md +5 -1
  31. package/blog/en/is_vue-i18n_outdated.md +7 -1
  32. package/blog/en/list_i18n_technologies/frameworks/react-router.md +2 -3
  33. package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
  34. package/blog/en/per-component_vs_centralized_i18n.md +9 -4
  35. package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  36. package/blog/en-GB/history_of_i18n.md +54 -54
  37. package/blog/en-GB/how_to_pick_react_i18n_library.md +542 -0
  38. package/blog/en-GB/how_to_pick_solid_i18n_library.md +438 -0
  39. package/blog/en-GB/how_to_pick_svelte_i18n_library.md +448 -0
  40. package/blog/en-GB/how_to_pick_vue_i18n_library.md +448 -0
  41. package/blog/en-GB/is_i18next_outdated.md +5 -1
  42. package/blog/en-GB/is_next-intl_outdated.md +5 -1
  43. package/blog/en-GB/is_vue-i18n_outdated.md +7 -1
  44. package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
  45. package/blog/en-GB/per-component_vs_centralized_i18n.md +9 -4
  46. package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  47. package/blog/es/history_of_i18n.md +54 -54
  48. package/blog/es/how_to_pick_react_i18n_library.md +542 -0
  49. package/blog/es/how_to_pick_solid_i18n_library.md +446 -0
  50. package/blog/es/how_to_pick_svelte_i18n_library.md +448 -0
  51. package/blog/es/how_to_pick_vue_i18n_library.md +442 -0
  52. package/blog/es/is_i18next_outdated.md +5 -1
  53. package/blog/es/is_next-intl_outdated.md +5 -1
  54. package/blog/es/is_vue-i18n_outdated.md +7 -1
  55. package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
  56. package/blog/es/per-component_vs_centralized_i18n.md +9 -4
  57. package/blog/es/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  58. package/blog/fr/history_of_i18n.md +54 -54
  59. package/blog/fr/how_to_pick_react_i18n_library.md +542 -0
  60. package/blog/fr/how_to_pick_solid_i18n_library.md +438 -0
  61. package/blog/fr/how_to_pick_svelte_i18n_library.md +448 -0
  62. package/blog/fr/how_to_pick_vue_i18n_library.md +442 -0
  63. package/blog/fr/is_i18next_outdated.md +5 -1
  64. package/blog/fr/is_next-intl_outdated.md +5 -1
  65. package/blog/fr/is_vue-i18n_outdated.md +7 -1
  66. package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
  67. package/blog/fr/per-component_vs_centralized_i18n.md +9 -4
  68. package/blog/fr/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  69. package/blog/hi/history_of_i18n.md +54 -54
  70. package/blog/hi/how_to_pick_react_i18n_library.md +548 -0
  71. package/blog/hi/how_to_pick_solid_i18n_library.md +451 -0
  72. package/blog/hi/how_to_pick_svelte_i18n_library.md +448 -0
  73. package/blog/hi/how_to_pick_vue_i18n_library.md +442 -0
  74. package/blog/hi/is_i18next_outdated.md +5 -1
  75. package/blog/hi/is_next-intl_outdated.md +5 -1
  76. package/blog/hi/is_vue-i18n_outdated.md +7 -1
  77. package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +8 -4
  78. package/blog/hi/per-component_vs_centralized_i18n.md +9 -4
  79. package/blog/hi/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  80. package/blog/id/history_of_i18n.md +54 -54
  81. package/blog/id/how_to_pick_react_i18n_library.md +548 -0
  82. package/blog/id/how_to_pick_solid_i18n_library.md +451 -0
  83. package/blog/id/how_to_pick_svelte_i18n_library.md +454 -0
  84. package/blog/id/how_to_pick_vue_i18n_library.md +442 -0
  85. package/blog/id/is_i18next_outdated.md +5 -1
  86. package/blog/id/is_next-intl_outdated.md +5 -1
  87. package/blog/id/is_vue-i18n_outdated.md +7 -1
  88. package/blog/id/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
  89. package/blog/id/per-component_vs_centralized_i18n.md +9 -4
  90. package/blog/id/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  91. package/blog/it/history_of_i18n.md +54 -54
  92. package/blog/it/how_to_pick_react_i18n_library.md +549 -0
  93. package/blog/it/how_to_pick_solid_i18n_library.md +451 -0
  94. package/blog/it/how_to_pick_svelte_i18n_library.md +455 -0
  95. package/blog/it/how_to_pick_vue_i18n_library.md +449 -0
  96. package/blog/it/is_i18next_outdated.md +5 -1
  97. package/blog/it/is_next-intl_outdated.md +5 -1
  98. package/blog/it/is_vue-i18n_outdated.md +7 -1
  99. package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
  100. package/blog/it/per-component_vs_centralized_i18n.md +9 -4
  101. package/blog/it/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  102. package/blog/ja/history_of_i18n.md +54 -54
  103. package/blog/ja/how_to_pick_react_i18n_library.md +542 -0
  104. package/blog/ja/how_to_pick_solid_i18n_library.md +451 -0
  105. package/blog/ja/how_to_pick_svelte_i18n_library.md +457 -0
  106. package/blog/ja/how_to_pick_vue_i18n_library.md +442 -0
  107. package/blog/ja/is_i18next_outdated.md +5 -1
  108. package/blog/ja/is_next-intl_outdated.md +5 -1
  109. package/blog/ja/is_vue-i18n_outdated.md +7 -1
  110. package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
  111. package/blog/ja/per-component_vs_centralized_i18n.md +9 -4
  112. package/blog/ja/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  113. package/blog/ko/history_of_i18n.md +54 -54
  114. package/blog/ko/how_to_pick_react_i18n_library.md +548 -0
  115. package/blog/ko/how_to_pick_solid_i18n_library.md +451 -0
  116. package/blog/ko/how_to_pick_svelte_i18n_library.md +454 -0
  117. package/blog/ko/how_to_pick_vue_i18n_library.md +448 -0
  118. package/blog/ko/is_i18next_outdated.md +5 -1
  119. package/blog/ko/is_next-intl_outdated.md +5 -1
  120. package/blog/ko/is_vue-i18n_outdated.md +7 -1
  121. package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
  122. package/blog/ko/per-component_vs_centralized_i18n.md +9 -4
  123. package/blog/ko/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  124. package/blog/pl/history_of_i18n.md +54 -54
  125. package/blog/pl/how_to_pick_react_i18n_library.md +549 -0
  126. package/blog/pl/how_to_pick_solid_i18n_library.md +438 -0
  127. package/blog/pl/how_to_pick_svelte_i18n_library.md +460 -0
  128. package/blog/pl/how_to_pick_vue_i18n_library.md +442 -0
  129. package/blog/pl/is_i18next_outdated.md +5 -1
  130. package/blog/pl/is_next-intl_outdated.md +5 -1
  131. package/blog/pl/is_vue-i18n_outdated.md +7 -1
  132. package/blog/pl/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
  133. package/blog/pl/per-component_vs_centralized_i18n.md +9 -4
  134. package/blog/pl/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  135. package/blog/pt/history_of_i18n.md +54 -54
  136. package/blog/pt/how_to_pick_react_i18n_library.md +549 -0
  137. package/blog/pt/how_to_pick_solid_i18n_library.md +451 -0
  138. package/blog/pt/how_to_pick_svelte_i18n_library.md +454 -0
  139. package/blog/pt/how_to_pick_vue_i18n_library.md +448 -0
  140. package/blog/pt/is_i18next_outdated.md +5 -1
  141. package/blog/pt/is_next-intl_outdated.md +5 -1
  142. package/blog/pt/is_vue-i18n_outdated.md +7 -1
  143. package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
  144. package/blog/pt/per-component_vs_centralized_i18n.md +9 -4
  145. package/blog/pt/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  146. package/blog/ru/history_of_i18n.md +54 -54
  147. package/blog/ru/how_to_pick_react_i18n_library.md +553 -0
  148. package/blog/ru/how_to_pick_solid_i18n_library.md +451 -0
  149. package/blog/ru/how_to_pick_svelte_i18n_library.md +459 -0
  150. package/blog/ru/how_to_pick_vue_i18n_library.md +453 -0
  151. package/blog/ru/is_i18next_outdated.md +5 -1
  152. package/blog/ru/is_next-intl_outdated.md +5 -1
  153. package/blog/ru/is_vue-i18n_outdated.md +7 -1
  154. package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +8 -4
  155. package/blog/ru/per-component_vs_centralized_i18n.md +9 -4
  156. package/blog/ru/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  157. package/blog/tr/history_of_i18n.md +54 -54
  158. package/blog/tr/how_to_pick_react_i18n_library.md +548 -0
  159. package/blog/tr/how_to_pick_solid_i18n_library.md +451 -0
  160. package/blog/tr/how_to_pick_svelte_i18n_library.md +454 -0
  161. package/blog/tr/how_to_pick_vue_i18n_library.md +448 -0
  162. package/blog/tr/is_i18next_outdated.md +5 -1
  163. package/blog/tr/is_next-intl_outdated.md +5 -1
  164. package/blog/tr/is_vue-i18n_outdated.md +7 -1
  165. package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
  166. package/blog/tr/per-component_vs_centralized_i18n.md +9 -4
  167. package/blog/tr/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  168. package/blog/uk/history_of_i18n.md +54 -54
  169. package/blog/uk/how_to_pick_react_i18n_library.md +542 -0
  170. package/blog/uk/how_to_pick_solid_i18n_library.md +451 -0
  171. package/blog/uk/how_to_pick_svelte_i18n_library.md +448 -0
  172. package/blog/uk/how_to_pick_vue_i18n_library.md +443 -0
  173. package/blog/uk/is_i18next_outdated.md +5 -1
  174. package/blog/uk/is_next-intl_outdated.md +5 -1
  175. package/blog/uk/is_vue-i18n_outdated.md +7 -1
  176. package/blog/uk/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
  177. package/blog/uk/per-component_vs_centralized_i18n.md +9 -4
  178. package/blog/uk/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  179. package/blog/vi/history_of_i18n.md +54 -54
  180. package/blog/vi/how_to_pick_react_i18n_library.md +548 -0
  181. package/blog/vi/how_to_pick_solid_i18n_library.md +438 -0
  182. package/blog/vi/how_to_pick_svelte_i18n_library.md +448 -0
  183. package/blog/vi/how_to_pick_vue_i18n_library.md +442 -0
  184. package/blog/vi/is_i18next_outdated.md +5 -1
  185. package/blog/vi/is_next-intl_outdated.md +5 -1
  186. package/blog/vi/is_vue-i18n_outdated.md +7 -1
  187. package/blog/vi/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
  188. package/blog/vi/per-component_vs_centralized_i18n.md +9 -4
  189. package/blog/vi/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  190. package/blog/zh/history_of_i18n.md +54 -54
  191. package/blog/zh/how_to_pick_react_i18n_library.md +548 -0
  192. package/blog/zh/how_to_pick_solid_i18n_library.md +451 -0
  193. package/blog/zh/how_to_pick_svelte_i18n_library.md +454 -0
  194. package/blog/zh/how_to_pick_vue_i18n_library.md +448 -0
  195. package/blog/zh/is_i18next_outdated.md +5 -1
  196. package/blog/zh/is_next-intl_outdated.md +5 -1
  197. package/blog/zh/is_vue-i18n_outdated.md +7 -1
  198. package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +9 -5
  199. package/blog/zh/per-component_vs_centralized_i18n.md +9 -4
  200. package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +5 -1
  201. package/dist/cjs/generated/blog.entry.cjs +80 -0
  202. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  203. package/dist/cjs/index.cjs +1 -1
  204. package/dist/esm/generated/blog.entry.mjs +80 -0
  205. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  206. package/dist/esm/index.mjs +1 -1
  207. package/dist/types/generated/blog.entry.d.ts +4 -0
  208. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  209. package/docs/ar/bundle_optimization.md +5 -1
  210. package/docs/ar/how_works_intlayer.md +2 -2
  211. package/docs/ar/interest_of_intlayer.md +6 -6
  212. package/docs/ar/intlayer_CMS.md +1 -1
  213. package/docs/ar/intlayer_with_adonisjs.md +1 -1
  214. package/docs/ar/intlayer_with_analog.md +1 -1
  215. package/docs/ar/intlayer_with_angular_19.md +1 -1
  216. package/docs/ar/intlayer_with_angular_21.md +1 -1
  217. package/docs/ar/intlayer_with_astro.md +1 -1
  218. package/docs/ar/intlayer_with_astro_lit.md +1 -1
  219. package/docs/ar/intlayer_with_astro_preact.md +1 -1
  220. package/docs/ar/intlayer_with_astro_react.md +1 -1
  221. package/docs/ar/intlayer_with_astro_solid.md +1 -1
  222. package/docs/ar/intlayer_with_astro_svelte.md +1 -1
  223. package/docs/ar/intlayer_with_astro_vanilla.md +1 -1
  224. package/docs/ar/intlayer_with_astro_vue.md +1 -1
  225. package/docs/ar/intlayer_with_create_react_app.md +1 -1
  226. package/docs/ar/intlayer_with_express.md +1 -1
  227. package/docs/ar/intlayer_with_hono.md +1 -1
  228. package/docs/ar/intlayer_with_nestjs.md +1 -1
  229. package/docs/ar/intlayer_with_nextjs_14.md +1 -1
  230. package/docs/ar/intlayer_with_nextjs_15.md +1 -1
  231. package/docs/ar/intlayer_with_nextjs_16.md +1 -1
  232. package/docs/ar/intlayer_with_nextjs_page_router.md +1 -1
  233. package/docs/ar/intlayer_with_react_router_v7.md +1 -1
  234. package/docs/ar/intlayer_with_vite+preact.md +1 -1
  235. package/docs/ar/intlayer_with_vite+react.md +1 -1
  236. package/docs/ar/intlayer_with_vite+vue.md +1 -1
  237. package/docs/ar/introduction.md +0 -1
  238. package/docs/ar/readme.md +8 -8
  239. package/docs/bn/bundle_optimization.md +5 -1
  240. package/docs/bn/interest_of_intlayer.md +21 -21
  241. package/docs/bn/intlayer_CMS.md +1 -1
  242. package/docs/bn/intlayer_with_angular_21.md +1 -1
  243. package/docs/bn/intlayer_with_hono.md +1 -1
  244. package/docs/bn/introduction.md +0 -1
  245. package/docs/cs/bundle_optimization.md +5 -1
  246. package/docs/cs/interest_of_intlayer.md +6 -6
  247. package/docs/cs/intlayer_with_angular_21.md +1 -1
  248. package/docs/cs/intlayer_with_hono.md +1 -1
  249. package/docs/cs/introduction.md +0 -1
  250. package/docs/de/bundle_optimization.md +5 -1
  251. package/docs/de/how_works_intlayer.md +2 -2
  252. package/docs/de/interest_of_intlayer.md +6 -6
  253. package/docs/de/intlayer_CMS.md +1 -1
  254. package/docs/de/intlayer_with_adonisjs.md +1 -1
  255. package/docs/de/intlayer_with_analog.md +1 -1
  256. package/docs/de/intlayer_with_angular_19.md +1 -1
  257. package/docs/de/intlayer_with_angular_21.md +1 -1
  258. package/docs/de/intlayer_with_astro.md +1 -1
  259. package/docs/de/intlayer_with_astro_lit.md +1 -1
  260. package/docs/de/intlayer_with_astro_preact.md +1 -1
  261. package/docs/de/intlayer_with_astro_react.md +1 -1
  262. package/docs/de/intlayer_with_astro_solid.md +1 -1
  263. package/docs/de/intlayer_with_astro_svelte.md +1 -1
  264. package/docs/de/intlayer_with_astro_vanilla.md +1 -1
  265. package/docs/de/intlayer_with_astro_vue.md +1 -1
  266. package/docs/de/intlayer_with_create_react_app.md +1 -1
  267. package/docs/de/intlayer_with_express.md +1 -1
  268. package/docs/de/intlayer_with_hono.md +1 -1
  269. package/docs/de/intlayer_with_nestjs.md +1 -1
  270. package/docs/de/intlayer_with_nextjs_14.md +1 -1
  271. package/docs/de/intlayer_with_nextjs_15.md +1 -1
  272. package/docs/de/intlayer_with_nextjs_16.md +1 -1
  273. package/docs/de/intlayer_with_nextjs_page_router.md +1 -1
  274. package/docs/de/intlayer_with_vite+preact.md +1 -1
  275. package/docs/de/intlayer_with_vite+react.md +1 -1
  276. package/docs/de/intlayer_with_vite+vue.md +1 -1
  277. package/docs/de/introduction.md +0 -1
  278. package/docs/de/readme.md +8 -8
  279. package/docs/en/bundle_optimization.md +5 -1
  280. package/docs/en/how_works_intlayer.md +2 -2
  281. package/docs/en/interest_of_intlayer.md +6 -6
  282. package/docs/en/intlayer_CMS.md +1 -1
  283. package/docs/en/intlayer_with_adonisjs.md +1 -1
  284. package/docs/en/intlayer_with_analog.md +1 -1
  285. package/docs/en/intlayer_with_angular_19.md +1 -1
  286. package/docs/en/intlayer_with_angular_21.md +1 -1
  287. package/docs/en/intlayer_with_astro.md +1 -1
  288. package/docs/en/intlayer_with_astro_lit.md +1 -1
  289. package/docs/en/intlayer_with_astro_preact.md +1 -1
  290. package/docs/en/intlayer_with_astro_react.md +1 -1
  291. package/docs/en/intlayer_with_astro_solid.md +1 -1
  292. package/docs/en/intlayer_with_astro_svelte.md +1 -1
  293. package/docs/en/intlayer_with_astro_vanilla.md +1 -1
  294. package/docs/en/intlayer_with_astro_vue.md +1 -1
  295. package/docs/en/intlayer_with_create_react_app.md +1 -1
  296. package/docs/en/intlayer_with_express.md +1 -1
  297. package/docs/en/intlayer_with_hono.md +1 -1
  298. package/docs/en/intlayer_with_nestjs.md +1 -1
  299. package/docs/en/intlayer_with_nextjs_14.md +1 -1
  300. package/docs/en/intlayer_with_nextjs_15.md +1 -1
  301. package/docs/en/intlayer_with_nextjs_16.md +1 -1
  302. package/docs/en/intlayer_with_nextjs_page_router.md +1 -1
  303. package/docs/en/intlayer_with_vite+preact.md +1 -1
  304. package/docs/en/intlayer_with_vite+react.md +1 -1
  305. package/docs/en/intlayer_with_vite+vue.md +1 -1
  306. package/docs/en/introduction.md +0 -1
  307. package/docs/en/readme.md +8 -8
  308. package/docs/en-GB/bundle_optimization.md +5 -1
  309. package/docs/en-GB/how_works_intlayer.md +2 -2
  310. package/docs/en-GB/interest_of_intlayer.md +6 -6
  311. package/docs/en-GB/intlayer_CMS.md +1 -1
  312. package/docs/en-GB/intlayer_with_adonisjs.md +1 -1
  313. package/docs/en-GB/intlayer_with_analog.md +1 -1
  314. package/docs/en-GB/intlayer_with_angular_19.md +1 -1
  315. package/docs/en-GB/intlayer_with_angular_21.md +1 -1
  316. package/docs/en-GB/intlayer_with_astro.md +1 -1
  317. package/docs/en-GB/intlayer_with_astro_lit.md +1 -1
  318. package/docs/en-GB/intlayer_with_astro_preact.md +1 -1
  319. package/docs/en-GB/intlayer_with_astro_react.md +1 -1
  320. package/docs/en-GB/intlayer_with_astro_solid.md +1 -1
  321. package/docs/en-GB/intlayer_with_astro_svelte.md +1 -1
  322. package/docs/en-GB/intlayer_with_astro_vanilla.md +1 -1
  323. package/docs/en-GB/intlayer_with_astro_vue.md +1 -1
  324. package/docs/en-GB/intlayer_with_create_react_app.md +1 -1
  325. package/docs/en-GB/intlayer_with_express.md +1 -1
  326. package/docs/en-GB/intlayer_with_hono.md +1 -1
  327. package/docs/en-GB/intlayer_with_nestjs.md +1 -1
  328. package/docs/en-GB/intlayer_with_nextjs_14.md +1 -1
  329. package/docs/en-GB/intlayer_with_nextjs_15.md +1 -1
  330. package/docs/en-GB/intlayer_with_nextjs_16.md +1 -1
  331. package/docs/en-GB/intlayer_with_nextjs_page_router.md +1 -1
  332. package/docs/en-GB/intlayer_with_vite+preact.md +1 -1
  333. package/docs/en-GB/intlayer_with_vite+react.md +1 -1
  334. package/docs/en-GB/intlayer_with_vite+vue.md +1 -1
  335. package/docs/en-GB/introduction.md +0 -1
  336. package/docs/en-GB/readme.md +8 -8
  337. package/docs/es/bundle_optimization.md +5 -1
  338. package/docs/es/how_works_intlayer.md +2 -2
  339. package/docs/es/interest_of_intlayer.md +6 -6
  340. package/docs/es/intlayer_CMS.md +1 -1
  341. package/docs/es/intlayer_with_adonisjs.md +1 -1
  342. package/docs/es/intlayer_with_analog.md +1 -1
  343. package/docs/es/intlayer_with_angular_19.md +1 -1
  344. package/docs/es/intlayer_with_angular_21.md +1 -1
  345. package/docs/es/intlayer_with_astro.md +1 -1
  346. package/docs/es/intlayer_with_astro_lit.md +1 -1
  347. package/docs/es/intlayer_with_astro_preact.md +1 -1
  348. package/docs/es/intlayer_with_astro_react.md +1 -1
  349. package/docs/es/intlayer_with_astro_solid.md +1 -1
  350. package/docs/es/intlayer_with_astro_svelte.md +1 -1
  351. package/docs/es/intlayer_with_astro_vanilla.md +1 -1
  352. package/docs/es/intlayer_with_astro_vue.md +1 -1
  353. package/docs/es/intlayer_with_create_react_app.md +1 -1
  354. package/docs/es/intlayer_with_express.md +1 -1
  355. package/docs/es/intlayer_with_hono.md +1 -1
  356. package/docs/es/intlayer_with_nestjs.md +1 -1
  357. package/docs/es/intlayer_with_nextjs_14.md +1 -1
  358. package/docs/es/intlayer_with_nextjs_15.md +1 -1
  359. package/docs/es/intlayer_with_nextjs_16.md +1 -1
  360. package/docs/es/intlayer_with_nextjs_page_router.md +1 -1
  361. package/docs/es/intlayer_with_vite+preact.md +1 -1
  362. package/docs/es/intlayer_with_vite+react.md +1 -1
  363. package/docs/es/intlayer_with_vite+vue.md +1 -1
  364. package/docs/es/introduction.md +0 -1
  365. package/docs/es/readme.md +8 -8
  366. package/docs/fr/bundle_optimization.md +5 -1
  367. package/docs/fr/how_works_intlayer.md +2 -2
  368. package/docs/fr/interest_of_intlayer.md +6 -6
  369. package/docs/fr/intlayer_CMS.md +1 -1
  370. package/docs/fr/intlayer_with_adonisjs.md +1 -1
  371. package/docs/fr/intlayer_with_analog.md +1 -1
  372. package/docs/fr/intlayer_with_angular_19.md +1 -1
  373. package/docs/fr/intlayer_with_angular_21.md +1 -1
  374. package/docs/fr/intlayer_with_astro.md +1 -1
  375. package/docs/fr/intlayer_with_astro_lit.md +1 -1
  376. package/docs/fr/intlayer_with_astro_preact.md +1 -1
  377. package/docs/fr/intlayer_with_astro_react.md +1 -1
  378. package/docs/fr/intlayer_with_astro_solid.md +1 -1
  379. package/docs/fr/intlayer_with_astro_svelte.md +1 -1
  380. package/docs/fr/intlayer_with_astro_vanilla.md +1 -1
  381. package/docs/fr/intlayer_with_astro_vue.md +1 -1
  382. package/docs/fr/intlayer_with_create_react_app.md +1 -1
  383. package/docs/fr/intlayer_with_express.md +1 -1
  384. package/docs/fr/intlayer_with_hono.md +1 -1
  385. package/docs/fr/intlayer_with_nestjs.md +1 -1
  386. package/docs/fr/intlayer_with_nextjs_14.md +1 -1
  387. package/docs/fr/intlayer_with_nextjs_15.md +1 -1
  388. package/docs/fr/intlayer_with_nextjs_16.md +1 -1
  389. package/docs/fr/intlayer_with_nextjs_page_router.md +1 -1
  390. package/docs/fr/intlayer_with_react_router_v7.md +2 -2
  391. package/docs/fr/intlayer_with_vite+preact.md +1 -1
  392. package/docs/fr/intlayer_with_vite+react.md +1 -1
  393. package/docs/fr/intlayer_with_vite+vue.md +1 -1
  394. package/docs/fr/introduction.md +0 -1
  395. package/docs/fr/readme.md +8 -8
  396. package/docs/hi/bundle_optimization.md +5 -1
  397. package/docs/hi/how_works_intlayer.md +2 -2
  398. package/docs/hi/interest_of_intlayer.md +6 -6
  399. package/docs/hi/intlayer_CMS.md +1 -1
  400. package/docs/hi/intlayer_with_adonisjs.md +1 -1
  401. package/docs/hi/intlayer_with_analog.md +1 -1
  402. package/docs/hi/intlayer_with_angular_19.md +1 -1
  403. package/docs/hi/intlayer_with_angular_21.md +1 -1
  404. package/docs/hi/intlayer_with_astro.md +1 -1
  405. package/docs/hi/intlayer_with_astro_lit.md +1 -1
  406. package/docs/hi/intlayer_with_astro_preact.md +1 -1
  407. package/docs/hi/intlayer_with_astro_react.md +1 -1
  408. package/docs/hi/intlayer_with_astro_solid.md +1 -1
  409. package/docs/hi/intlayer_with_astro_svelte.md +1 -1
  410. package/docs/hi/intlayer_with_astro_vanilla.md +1 -1
  411. package/docs/hi/intlayer_with_astro_vue.md +1 -1
  412. package/docs/hi/intlayer_with_create_react_app.md +1 -1
  413. package/docs/hi/intlayer_with_express.md +1 -1
  414. package/docs/hi/intlayer_with_hono.md +1 -1
  415. package/docs/hi/intlayer_with_nestjs.md +1 -1
  416. package/docs/hi/intlayer_with_nextjs_14.md +1 -1
  417. package/docs/hi/intlayer_with_nextjs_15.md +1 -1
  418. package/docs/hi/intlayer_with_nextjs_16.md +1 -1
  419. package/docs/hi/intlayer_with_nextjs_page_router.md +1 -1
  420. package/docs/hi/intlayer_with_react_router_v7.md +1 -1
  421. package/docs/hi/intlayer_with_vite+preact.md +1 -1
  422. package/docs/hi/intlayer_with_vite+react.md +1 -1
  423. package/docs/hi/intlayer_with_vite+vue.md +1 -1
  424. package/docs/hi/introduction.md +0 -1
  425. package/docs/hi/readme.md +8 -8
  426. package/docs/id/bundle_optimization.md +5 -1
  427. package/docs/id/how_works_intlayer.md +2 -2
  428. package/docs/id/interest_of_intlayer.md +6 -6
  429. package/docs/id/intlayer_CMS.md +1 -1
  430. package/docs/id/intlayer_with_adonisjs.md +1 -1
  431. package/docs/id/intlayer_with_analog.md +1 -1
  432. package/docs/id/intlayer_with_angular_19.md +1 -1
  433. package/docs/id/intlayer_with_angular_21.md +1 -1
  434. package/docs/id/intlayer_with_astro.md +1 -1
  435. package/docs/id/intlayer_with_astro_lit.md +1 -1
  436. package/docs/id/intlayer_with_astro_preact.md +1 -1
  437. package/docs/id/intlayer_with_astro_react.md +1 -1
  438. package/docs/id/intlayer_with_astro_solid.md +1 -1
  439. package/docs/id/intlayer_with_astro_svelte.md +1 -1
  440. package/docs/id/intlayer_with_astro_vanilla.md +1 -1
  441. package/docs/id/intlayer_with_astro_vue.md +1 -1
  442. package/docs/id/intlayer_with_create_react_app.md +1 -1
  443. package/docs/id/intlayer_with_express.md +1 -1
  444. package/docs/id/intlayer_with_hono.md +1 -1
  445. package/docs/id/intlayer_with_nestjs.md +1 -1
  446. package/docs/id/intlayer_with_nextjs_14.md +1 -1
  447. package/docs/id/intlayer_with_nextjs_15.md +1 -1
  448. package/docs/id/intlayer_with_nextjs_16.md +1 -1
  449. package/docs/id/intlayer_with_nextjs_page_router.md +1 -1
  450. package/docs/id/intlayer_with_react_router_v7.md +1 -1
  451. package/docs/id/intlayer_with_vite+preact.md +1 -1
  452. package/docs/id/intlayer_with_vite+react.md +1 -1
  453. package/docs/id/intlayer_with_vite+vue.md +1 -1
  454. package/docs/id/introduction.md +0 -1
  455. package/docs/id/readme.md +8 -8
  456. package/docs/it/bundle_optimization.md +5 -1
  457. package/docs/it/how_works_intlayer.md +2 -2
  458. package/docs/it/interest_of_intlayer.md +6 -6
  459. package/docs/it/intlayer_CMS.md +1 -1
  460. package/docs/it/intlayer_with_adonisjs.md +1 -1
  461. package/docs/it/intlayer_with_analog.md +1 -1
  462. package/docs/it/intlayer_with_angular_19.md +1 -1
  463. package/docs/it/intlayer_with_angular_21.md +1 -1
  464. package/docs/it/intlayer_with_astro.md +1 -1
  465. package/docs/it/intlayer_with_astro_lit.md +1 -1
  466. package/docs/it/intlayer_with_astro_preact.md +1 -1
  467. package/docs/it/intlayer_with_astro_react.md +1 -1
  468. package/docs/it/intlayer_with_astro_solid.md +1 -1
  469. package/docs/it/intlayer_with_astro_svelte.md +1 -1
  470. package/docs/it/intlayer_with_astro_vanilla.md +1 -1
  471. package/docs/it/intlayer_with_astro_vue.md +1 -1
  472. package/docs/it/intlayer_with_create_react_app.md +1 -1
  473. package/docs/it/intlayer_with_express.md +1 -1
  474. package/docs/it/intlayer_with_hono.md +1 -1
  475. package/docs/it/intlayer_with_nestjs.md +1 -1
  476. package/docs/it/intlayer_with_nextjs_14.md +1 -1
  477. package/docs/it/intlayer_with_nextjs_15.md +1 -1
  478. package/docs/it/intlayer_with_nextjs_16.md +1 -1
  479. package/docs/it/intlayer_with_nextjs_page_router.md +1 -1
  480. package/docs/it/intlayer_with_react_router_v7.md +2 -2
  481. package/docs/it/intlayer_with_vite+preact.md +1 -1
  482. package/docs/it/intlayer_with_vite+react.md +1 -1
  483. package/docs/it/intlayer_with_vite+vue.md +1 -1
  484. package/docs/it/introduction.md +0 -1
  485. package/docs/it/readme.md +8 -8
  486. package/docs/ja/bundle_optimization.md +5 -1
  487. package/docs/ja/how_works_intlayer.md +2 -2
  488. package/docs/ja/interest_of_intlayer.md +6 -6
  489. package/docs/ja/intlayer_CMS.md +1 -1
  490. package/docs/ja/intlayer_with_adonisjs.md +1 -1
  491. package/docs/ja/intlayer_with_analog.md +1 -1
  492. package/docs/ja/intlayer_with_angular_19.md +1 -1
  493. package/docs/ja/intlayer_with_angular_21.md +1 -1
  494. package/docs/ja/intlayer_with_astro.md +1 -1
  495. package/docs/ja/intlayer_with_astro_lit.md +1 -1
  496. package/docs/ja/intlayer_with_astro_preact.md +1 -1
  497. package/docs/ja/intlayer_with_astro_react.md +1 -1
  498. package/docs/ja/intlayer_with_astro_solid.md +1 -1
  499. package/docs/ja/intlayer_with_astro_svelte.md +1 -1
  500. package/docs/ja/intlayer_with_astro_vanilla.md +1 -1
  501. package/docs/ja/intlayer_with_astro_vue.md +1 -1
  502. package/docs/ja/intlayer_with_create_react_app.md +1 -1
  503. package/docs/ja/intlayer_with_express.md +1 -1
  504. package/docs/ja/intlayer_with_hono.md +1 -1
  505. package/docs/ja/intlayer_with_nestjs.md +1 -1
  506. package/docs/ja/intlayer_with_nextjs_14.md +1 -1
  507. package/docs/ja/intlayer_with_nextjs_15.md +1 -1
  508. package/docs/ja/intlayer_with_nextjs_16.md +1 -1
  509. package/docs/ja/intlayer_with_nextjs_page_router.md +1 -1
  510. package/docs/ja/intlayer_with_vite+preact.md +1 -1
  511. package/docs/ja/intlayer_with_vite+react.md +1 -1
  512. package/docs/ja/intlayer_with_vite+vue.md +1 -1
  513. package/docs/ja/introduction.md +0 -1
  514. package/docs/ja/readme.md +8 -8
  515. package/docs/ko/bundle_optimization.md +5 -1
  516. package/docs/ko/how_works_intlayer.md +2 -2
  517. package/docs/ko/interest_of_intlayer.md +6 -6
  518. package/docs/ko/intlayer_CMS.md +1 -1
  519. package/docs/ko/intlayer_with_adonisjs.md +1 -1
  520. package/docs/ko/intlayer_with_analog.md +1 -1
  521. package/docs/ko/intlayer_with_angular_19.md +1 -1
  522. package/docs/ko/intlayer_with_angular_21.md +1 -1
  523. package/docs/ko/intlayer_with_astro.md +1 -1
  524. package/docs/ko/intlayer_with_astro_lit.md +1 -1
  525. package/docs/ko/intlayer_with_astro_preact.md +1 -1
  526. package/docs/ko/intlayer_with_astro_react.md +1 -1
  527. package/docs/ko/intlayer_with_astro_solid.md +1 -1
  528. package/docs/ko/intlayer_with_astro_svelte.md +1 -1
  529. package/docs/ko/intlayer_with_astro_vanilla.md +1 -1
  530. package/docs/ko/intlayer_with_astro_vue.md +1 -1
  531. package/docs/ko/intlayer_with_create_react_app.md +1 -1
  532. package/docs/ko/intlayer_with_express.md +1 -1
  533. package/docs/ko/intlayer_with_hono.md +1 -1
  534. package/docs/ko/intlayer_with_nestjs.md +1 -1
  535. package/docs/ko/intlayer_with_nextjs_14.md +1 -1
  536. package/docs/ko/intlayer_with_nextjs_15.md +1 -1
  537. package/docs/ko/intlayer_with_nextjs_16.md +1 -1
  538. package/docs/ko/intlayer_with_nextjs_page_router.md +1 -1
  539. package/docs/ko/intlayer_with_react_router_v7.md +2 -2
  540. package/docs/ko/intlayer_with_vite+preact.md +1 -1
  541. package/docs/ko/intlayer_with_vite+react.md +1 -1
  542. package/docs/ko/intlayer_with_vite+vue.md +1 -1
  543. package/docs/ko/introduction.md +0 -1
  544. package/docs/ko/readme.md +8 -8
  545. package/docs/nl/bundle_optimization.md +5 -1
  546. package/docs/nl/interest_of_intlayer.md +6 -6
  547. package/docs/nl/intlayer_with_angular_21.md +1 -1
  548. package/docs/nl/intlayer_with_hono.md +1 -1
  549. package/docs/nl/introduction.md +0 -1
  550. package/docs/pl/bundle_optimization.md +5 -1
  551. package/docs/pl/how_works_intlayer.md +2 -2
  552. package/docs/pl/interest_of_intlayer.md +6 -6
  553. package/docs/pl/intlayer_CMS.md +1 -1
  554. package/docs/pl/intlayer_with_adonisjs.md +1 -1
  555. package/docs/pl/intlayer_with_analog.md +1 -1
  556. package/docs/pl/intlayer_with_angular_19.md +1 -1
  557. package/docs/pl/intlayer_with_angular_21.md +1 -1
  558. package/docs/pl/intlayer_with_astro.md +1 -1
  559. package/docs/pl/intlayer_with_astro_lit.md +1 -1
  560. package/docs/pl/intlayer_with_astro_preact.md +1 -1
  561. package/docs/pl/intlayer_with_astro_react.md +1 -1
  562. package/docs/pl/intlayer_with_astro_solid.md +1 -1
  563. package/docs/pl/intlayer_with_astro_svelte.md +1 -1
  564. package/docs/pl/intlayer_with_astro_vanilla.md +1 -1
  565. package/docs/pl/intlayer_with_astro_vue.md +1 -1
  566. package/docs/pl/intlayer_with_create_react_app.md +1 -1
  567. package/docs/pl/intlayer_with_express.md +1 -1
  568. package/docs/pl/intlayer_with_hono.md +1 -1
  569. package/docs/pl/intlayer_with_nestjs.md +1 -1
  570. package/docs/pl/intlayer_with_nextjs_14.md +1 -1
  571. package/docs/pl/intlayer_with_nextjs_15.md +1 -1
  572. package/docs/pl/intlayer_with_nextjs_16.md +1 -1
  573. package/docs/pl/intlayer_with_nextjs_page_router.md +1 -1
  574. package/docs/pl/intlayer_with_react_router_v7.md +2 -2
  575. package/docs/pl/intlayer_with_vite+preact.md +1 -1
  576. package/docs/pl/intlayer_with_vite+react.md +1 -1
  577. package/docs/pl/intlayer_with_vite+vue.md +1 -1
  578. package/docs/pl/introduction.md +0 -1
  579. package/docs/pl/readme.md +8 -8
  580. package/docs/pt/bundle_optimization.md +5 -1
  581. package/docs/pt/how_works_intlayer.md +2 -2
  582. package/docs/pt/interest_of_intlayer.md +6 -6
  583. package/docs/pt/intlayer_CMS.md +1 -1
  584. package/docs/pt/intlayer_with_adonisjs.md +1 -1
  585. package/docs/pt/intlayer_with_analog.md +1 -1
  586. package/docs/pt/intlayer_with_angular_19.md +1 -1
  587. package/docs/pt/intlayer_with_angular_21.md +1 -1
  588. package/docs/pt/intlayer_with_astro.md +1 -1
  589. package/docs/pt/intlayer_with_astro_lit.md +1 -1
  590. package/docs/pt/intlayer_with_astro_preact.md +1 -1
  591. package/docs/pt/intlayer_with_astro_react.md +1 -1
  592. package/docs/pt/intlayer_with_astro_solid.md +1 -1
  593. package/docs/pt/intlayer_with_astro_svelte.md +1 -1
  594. package/docs/pt/intlayer_with_astro_vanilla.md +1 -1
  595. package/docs/pt/intlayer_with_astro_vue.md +1 -1
  596. package/docs/pt/intlayer_with_create_react_app.md +1 -1
  597. package/docs/pt/intlayer_with_express.md +1 -1
  598. package/docs/pt/intlayer_with_hono.md +1 -1
  599. package/docs/pt/intlayer_with_nestjs.md +1 -1
  600. package/docs/pt/intlayer_with_nextjs_14.md +1 -1
  601. package/docs/pt/intlayer_with_nextjs_15.md +1 -1
  602. package/docs/pt/intlayer_with_nextjs_16.md +1 -1
  603. package/docs/pt/intlayer_with_nextjs_page_router.md +1 -1
  604. package/docs/pt/intlayer_with_react_router_v7.md +2 -2
  605. package/docs/pt/intlayer_with_vite+preact.md +1 -1
  606. package/docs/pt/intlayer_with_vite+react.md +1 -1
  607. package/docs/pt/intlayer_with_vite+vue.md +1 -1
  608. package/docs/pt/introduction.md +0 -1
  609. package/docs/pt/readme.md +8 -8
  610. package/docs/ru/bundle_optimization.md +5 -1
  611. package/docs/ru/how_works_intlayer.md +2 -2
  612. package/docs/ru/interest_of_intlayer.md +6 -6
  613. package/docs/ru/intlayer_CMS.md +1 -1
  614. package/docs/ru/intlayer_with_adonisjs.md +1 -1
  615. package/docs/ru/intlayer_with_analog.md +1 -1
  616. package/docs/ru/intlayer_with_angular_19.md +1 -1
  617. package/docs/ru/intlayer_with_angular_21.md +1 -1
  618. package/docs/ru/intlayer_with_astro.md +1 -1
  619. package/docs/ru/intlayer_with_astro_lit.md +1 -1
  620. package/docs/ru/intlayer_with_astro_preact.md +1 -1
  621. package/docs/ru/intlayer_with_astro_react.md +1 -1
  622. package/docs/ru/intlayer_with_astro_solid.md +1 -1
  623. package/docs/ru/intlayer_with_astro_svelte.md +1 -1
  624. package/docs/ru/intlayer_with_astro_vanilla.md +1 -1
  625. package/docs/ru/intlayer_with_astro_vue.md +1 -1
  626. package/docs/ru/intlayer_with_create_react_app.md +1 -1
  627. package/docs/ru/intlayer_with_express.md +1 -1
  628. package/docs/ru/intlayer_with_hono.md +1 -1
  629. package/docs/ru/intlayer_with_nestjs.md +1 -1
  630. package/docs/ru/intlayer_with_nextjs_14.md +1 -1
  631. package/docs/ru/intlayer_with_nextjs_15.md +1 -1
  632. package/docs/ru/intlayer_with_nextjs_16.md +1 -1
  633. package/docs/ru/intlayer_with_nextjs_page_router.md +1 -1
  634. package/docs/ru/intlayer_with_react_router_v7.md +2 -2
  635. package/docs/ru/intlayer_with_vite+preact.md +1 -1
  636. package/docs/ru/intlayer_with_vite+react.md +1 -1
  637. package/docs/ru/intlayer_with_vite+vue.md +1 -1
  638. package/docs/ru/introduction.md +0 -1
  639. package/docs/ru/readme.md +8 -8
  640. package/docs/tr/bundle_optimization.md +5 -1
  641. package/docs/tr/how_works_intlayer.md +2 -2
  642. package/docs/tr/interest_of_intlayer.md +6 -6
  643. package/docs/tr/intlayer_CMS.md +1 -1
  644. package/docs/tr/intlayer_with_adonisjs.md +1 -1
  645. package/docs/tr/intlayer_with_analog.md +1 -1
  646. package/docs/tr/intlayer_with_angular_19.md +1 -1
  647. package/docs/tr/intlayer_with_angular_21.md +1 -1
  648. package/docs/tr/intlayer_with_astro.md +1 -1
  649. package/docs/tr/intlayer_with_astro_lit.md +1 -1
  650. package/docs/tr/intlayer_with_astro_preact.md +1 -1
  651. package/docs/tr/intlayer_with_astro_react.md +1 -1
  652. package/docs/tr/intlayer_with_astro_solid.md +1 -1
  653. package/docs/tr/intlayer_with_astro_svelte.md +1 -1
  654. package/docs/tr/intlayer_with_astro_vanilla.md +1 -1
  655. package/docs/tr/intlayer_with_astro_vue.md +1 -1
  656. package/docs/tr/intlayer_with_create_react_app.md +1 -1
  657. package/docs/tr/intlayer_with_express.md +1 -1
  658. package/docs/tr/intlayer_with_hono.md +1 -1
  659. package/docs/tr/intlayer_with_nestjs.md +1 -1
  660. package/docs/tr/intlayer_with_nextjs_14.md +1 -1
  661. package/docs/tr/intlayer_with_nextjs_15.md +1 -1
  662. package/docs/tr/intlayer_with_nextjs_16.md +1 -1
  663. package/docs/tr/intlayer_with_nextjs_page_router.md +1 -1
  664. package/docs/tr/intlayer_with_react_router_v7.md +1 -1
  665. package/docs/tr/intlayer_with_vite+preact.md +1 -1
  666. package/docs/tr/intlayer_with_vite+react.md +1 -1
  667. package/docs/tr/intlayer_with_vite+vue.md +1 -1
  668. package/docs/tr/introduction.md +0 -1
  669. package/docs/tr/readme.md +8 -8
  670. package/docs/uk/bundle_optimization.md +5 -1
  671. package/docs/uk/how_works_intlayer.md +2 -2
  672. package/docs/uk/interest_of_intlayer.md +6 -6
  673. package/docs/uk/intlayer_CMS.md +1 -1
  674. package/docs/uk/intlayer_with_adonisjs.md +1 -1
  675. package/docs/uk/intlayer_with_analog.md +1 -1
  676. package/docs/uk/intlayer_with_angular_19.md +1 -1
  677. package/docs/uk/intlayer_with_angular_21.md +1 -1
  678. package/docs/uk/intlayer_with_astro.md +1 -1
  679. package/docs/uk/intlayer_with_astro_lit.md +1 -1
  680. package/docs/uk/intlayer_with_astro_preact.md +1 -1
  681. package/docs/uk/intlayer_with_astro_react.md +1 -1
  682. package/docs/uk/intlayer_with_astro_solid.md +1 -1
  683. package/docs/uk/intlayer_with_astro_svelte.md +1 -1
  684. package/docs/uk/intlayer_with_astro_vanilla.md +1 -1
  685. package/docs/uk/intlayer_with_astro_vue.md +1 -1
  686. package/docs/uk/intlayer_with_create_react_app.md +1 -1
  687. package/docs/uk/intlayer_with_express.md +1 -1
  688. package/docs/uk/intlayer_with_hono.md +1 -1
  689. package/docs/uk/intlayer_with_nestjs.md +1 -1
  690. package/docs/uk/intlayer_with_nextjs_14.md +1 -1
  691. package/docs/uk/intlayer_with_nextjs_15.md +1 -1
  692. package/docs/uk/intlayer_with_nextjs_16.md +1 -1
  693. package/docs/uk/intlayer_with_nextjs_page_router.md +1 -1
  694. package/docs/uk/intlayer_with_react_router_v7.md +1 -1
  695. package/docs/uk/intlayer_with_vite+preact.md +1 -1
  696. package/docs/uk/intlayer_with_vite+react.md +1 -1
  697. package/docs/uk/intlayer_with_vite+vue.md +1 -1
  698. package/docs/uk/introduction.md +0 -1
  699. package/docs/uk/readme.md +8 -8
  700. package/docs/ur/bundle_optimization.md +5 -1
  701. package/docs/ur/interest_of_intlayer.md +6 -6
  702. package/docs/ur/intlayer_with_angular_21.md +1 -1
  703. package/docs/ur/intlayer_with_hono.md +1 -1
  704. package/docs/ur/introduction.md +0 -1
  705. package/docs/vi/bundle_optimization.md +5 -1
  706. package/docs/vi/how_works_intlayer.md +2 -2
  707. package/docs/vi/interest_of_intlayer.md +6 -6
  708. package/docs/vi/intlayer_CMS.md +1 -1
  709. package/docs/vi/intlayer_with_adonisjs.md +1 -1
  710. package/docs/vi/intlayer_with_analog.md +1 -1
  711. package/docs/vi/intlayer_with_angular_19.md +1 -1
  712. package/docs/vi/intlayer_with_angular_21.md +1 -1
  713. package/docs/vi/intlayer_with_astro.md +1 -1
  714. package/docs/vi/intlayer_with_astro_lit.md +1 -1
  715. package/docs/vi/intlayer_with_astro_preact.md +1 -1
  716. package/docs/vi/intlayer_with_astro_react.md +1 -1
  717. package/docs/vi/intlayer_with_astro_solid.md +1 -1
  718. package/docs/vi/intlayer_with_astro_svelte.md +1 -1
  719. package/docs/vi/intlayer_with_astro_vanilla.md +1 -1
  720. package/docs/vi/intlayer_with_astro_vue.md +1 -1
  721. package/docs/vi/intlayer_with_create_react_app.md +1 -1
  722. package/docs/vi/intlayer_with_express.md +1 -1
  723. package/docs/vi/intlayer_with_hono.md +1 -1
  724. package/docs/vi/intlayer_with_nestjs.md +1 -1
  725. package/docs/vi/intlayer_with_nextjs_14.md +1 -1
  726. package/docs/vi/intlayer_with_nextjs_15.md +1 -1
  727. package/docs/vi/intlayer_with_nextjs_16.md +1 -1
  728. package/docs/vi/intlayer_with_nextjs_page_router.md +1 -1
  729. package/docs/vi/intlayer_with_vite+preact.md +1 -1
  730. package/docs/vi/intlayer_with_vite+react.md +1 -1
  731. package/docs/vi/intlayer_with_vite+vue.md +1 -1
  732. package/docs/vi/introduction.md +0 -1
  733. package/docs/vi/readme.md +8 -8
  734. package/docs/zh/bundle_optimization.md +5 -1
  735. package/docs/zh/how_works_intlayer.md +2 -2
  736. package/docs/zh/interest_of_intlayer.md +6 -6
  737. package/docs/zh/intlayer_CMS.md +1 -1
  738. package/docs/zh/intlayer_with_adonisjs.md +1 -1
  739. package/docs/zh/intlayer_with_analog.md +1 -1
  740. package/docs/zh/intlayer_with_angular_19.md +1 -1
  741. package/docs/zh/intlayer_with_angular_21.md +1 -1
  742. package/docs/zh/intlayer_with_astro.md +1 -1
  743. package/docs/zh/intlayer_with_astro_lit.md +1 -1
  744. package/docs/zh/intlayer_with_astro_preact.md +1 -1
  745. package/docs/zh/intlayer_with_astro_react.md +1 -1
  746. package/docs/zh/intlayer_with_astro_solid.md +1 -1
  747. package/docs/zh/intlayer_with_astro_svelte.md +1 -1
  748. package/docs/zh/intlayer_with_astro_vanilla.md +1 -1
  749. package/docs/zh/intlayer_with_astro_vue.md +1 -1
  750. package/docs/zh/intlayer_with_create_react_app.md +1 -1
  751. package/docs/zh/intlayer_with_express.md +1 -1
  752. package/docs/zh/intlayer_with_hono.md +1 -1
  753. package/docs/zh/intlayer_with_nestjs.md +1 -1
  754. package/docs/zh/intlayer_with_nextjs_14.md +1 -1
  755. package/docs/zh/intlayer_with_nextjs_15.md +1 -1
  756. package/docs/zh/intlayer_with_nextjs_16.md +1 -1
  757. package/docs/zh/intlayer_with_nextjs_page_router.md +1 -1
  758. package/docs/zh/intlayer_with_react_router_v7.md +2 -2
  759. package/docs/zh/intlayer_with_vite+preact.md +1 -1
  760. package/docs/zh/intlayer_with_vite+react.md +1 -1
  761. package/docs/zh/intlayer_with_vite+vue.md +1 -1
  762. package/docs/zh/introduction.md +0 -1
  763. package/docs/zh/readme.md +8 -8
  764. package/docs/zh-TW/bundle_optimization.md +5 -1
  765. package/docs/zh-TW/interest_of_intlayer.md +6 -6
  766. package/docs/zh-TW/intlayer_with_angular_21.md +1 -1
  767. package/docs/zh-TW/introduction.md +0 -1
  768. package/package.json +8 -7
  769. package/src/generated/blog.entry.ts +80 -0
  770. package/blog/en/___per-component_vs_centralized_i18n.md +0 -255
  771. package/blog/pl/___per-component_vs_centralized_i18n.md +0 -100
  772. package/docs/en/benchmark/___NOTE.md +0 -101
  773. package/docs/en/benchmark/___nextjs.md +0 -197
  774. package/docs/en/benchmark/___solid.md +0 -12
  775. package/docs/en/benchmark/___svelte.md +0 -16
  776. package/docs/en/benchmark/___tanstack.md +0 -190
  777. package/docs/en/benchmark/___vue.md +0 -7
  778. package/docs/pl/benchmark/___NOTE.md +0 -101
  779. package/docs/pl/benchmark/___nextjs.md +0 -198
  780. package/docs/pl/benchmark/___solid.md +0 -36
  781. package/docs/pl/benchmark/___svelte.md +0 -36
  782. package/docs/pl/benchmark/___tanstack.md +0 -36
  783. package/docs/pl/benchmark/___vue.md +0 -36
@@ -0,0 +1,443 @@
1
+ ---
2
+ createdAt: 2026-09-16
3
+ updatedAt: 2026-09-16
4
+ title: "Як правильно обрати бібліотеку Vue i18n у 2026 році"
5
+ description: Посібник із прийняття рішень для інтернаціоналізації Vue та Nuxt. На які запитання відповісти перед порівнянням vue-i18n, @nuxtjs/i18n, fluent-vue, Paraglide та Intlayer, і скільки кожен вибір коштує з точки зору розміру bundle, типізації та SSR payload.
6
+ keywords:
7
+ - vue i18n
8
+ - інтернаціоналізація vue
9
+ - vue internationalization
10
+ - vue-i18n
11
+ - nuxt i18n
12
+ - fluent-vue
13
+ - Paraglide
14
+ - Intlayer
15
+ - порівняння бібліотек i18n
16
+ slugs:
17
+ - blog
18
+ - how-to-pick-vue-i18n-library
19
+ author: aymericzip
20
+ ---
21
+
22
+ # Як правильно обрати бібліотеку Vue i18n
23
+
24
+ "Vue i18n" є як загальним терміном, так і назвою бібліотеки, яку встановлюють майже всі. Це водночас зручно та оманливо: `vue-i18n` — хороший варіант за замовчуванням, але це не єдиний вибір, і питання, які мали б визначати рішення (наявність SSR, кількість сторінок, хто саме пише переклади), рідко ставлять перед виконанням `npm install`.
25
+
26
+ Цей посібник спочатку розглядає ці запитання, а потім зіставляє відповіді з відповідними бібліотеками як для звичайного Vite + Vue, так і для Nuxt.
27
+
28
+ ![Екосистема бібліотек Vue i18n](https://github.com/aymericzip/intlayer/blob/main/docs/assets/cloud_i18n_logo.webp?raw=true)
29
+
30
+ ## Зміст
31
+
32
+ <TOC/>
33
+
34
+ ## Шість запитань, на які варто відповісти перед порівнянням бібліотек
35
+
36
+ 1. **Vite SPA чи Nuxt?** У SPA вартість каталогу є проблемою JS bundle. У Nuxt це також проблема розміру HTML payload, оскільки повідомлення серіалізуються в стан SSR та гідратуються. Більшість скарг на те, що "vue-i18n працює повільно", надходять саме від додатків на Nuxt з цієї причини.
37
+ 2. **Хто пише переклади?** Розробники, TMS, агентство, що надає рядки у форматі ICU, або AI pipeline. `vue-i18n` використовує власний синтаксис множини з роздільником pipe, а не ICU. Це має значення, якщо рядки надходять ззовні.
38
+ 3. **Скільки локалей і сторінок?** Дві локалі та п'ять сторінок дозволяють завантажувати все одразу. Десять локалей і сорок маршрутів цього не дозволяють, і стратегія завантаження стає головною статтею витрат.
39
+ 4. **Чи потрібні типи для ключів?** `t("cart.totl")` компілюється у `vue-i18n`, якщо ви не передасте generic для схеми повідомлень, і ця схема конфліктує з каталогами з lazy loading.
40
+ 5. **Що містить контент?** Лише мітки інтерфейсу (UI labels), чи markdown, посилання всередині речень і блоки для окремих локалей. Складний багатий контент (rich content) — це саме те, де використання `t()`, що повертає звичайний рядок, стає незручним.
41
+ 6. **Чи є CSP обмеженням?** Збірка `vue-i18n` за замовчуванням компілює повідомлення в браузері за допомогою `new Function`. Збірки runtime-only потребують `@intlify/unplugin-vue-i18n` для попередньої компіляції під час build time.
42
+
43
+ Запишіть відповіді. Усе викладене нижче посилається на них.
44
+
45
+ ## Загальна картина в одній ілюстрації
46
+
47
+ Екосистема Vue має менше бібліотек i18n, ніж React, і вони походять з різних архітектурних хвиль.
48
+
49
+ ![Історія бібліотек JavaScript i18n](https://github.com/aymericzip/intlayer/blob/main/docs/assets/history_i18n.webp?raw=true)
50
+
51
+ <AccordionGroup>
52
+ <Accordion header="Словники часу виконання (2015–2019): vue-i18n, @nuxt/i18n">
53
+
54
+ `vue-i18n` з'явився у 2015 році та відтоді залишається вибором за замовчуванням. `@nuxt/i18n` обгортає його, додаючи маршрутизацію локалей, SEO-теги та lazy loading для кожної локалі. Повідомлення компілюються у render functions: під час build time, якщо ви додаєте unplugin, або безпосередньо в браузері в іншому випадку.
55
+
56
+ </Accordion>
57
+ <Accordion header="Альтернативні формати (2020): fluent-vue">
58
+
59
+ Файли Mozilla Fluent `.ftl` запропонували зручніший синтаксис повідомлень із граматичними варіантами. Типізація ключів відсутня, а плагін для Vite завантажує всі локалі на кожну сторінку.
60
+
61
+ </Accordion>
62
+ <Accordion header="Компілятор і колокований контент (2024–2026): Paraglide, Intlayer">
63
+
64
+ Paraglide генерує окрему функцію для кожного повідомлення та дозволяє бандлеру виконати tree-shaking для решти. Intlayer декларує контент для кожного компонента у файлах `.content.ts`, генерує типи та відправляє клієнту лише те, що рендерить конкретний маршрут.
65
+
66
+ </Accordion>
67
+ </AccordionGroup>
68
+
69
+ Стаття про [історію JavaScript i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/history_of_i18n.md) детально розглядає кожну хвилю.
70
+
71
+ ## Рішення, яке має найбільше значення: де зберігається контент і коли він завантажується
72
+
73
+ Два структурні рішення визначають більшу частину різниці в розмірі bundle між підходами:
74
+
75
+ - **Централізований або ізольований (scoped) контент.** Один спільний файл `locales/en.json` для всього додатку або окрема декларація для кожного компонента.
76
+ - **Статичний чи динамічний імпорт.** Усе завантажується під час старту, або активна локаль (і в ідеалі активний маршрут) завантажується за запитом.
77
+
78
+ Графік оцінює payload для теоретичного додатку від 1 до 10 сторінок, перекладеного на кількість локалей від 1 до 10, із приблизно 30 КБ тексту на сторінку.
79
+
80
+ ![Теоретичний витік контенту за архітектурою](https://github.com/aymericzip/intlayer/blob/main/docs/assets/theorical_content_leakage.webp?raw=true)
81
+
82
+ `vue-i18n` підтримує динамічну вісь: виклик `setLocaleMessage` після `import()` дозволяє припинити завантаження дев'яти локалей, які ніхто не читає. Проте він не надає оптимізації за віссю сторінок. Каталог локалі є єдиним об'єктом, і його завантаження підтягує тексти для кожної сторінки. У SPA цього ніхто не помічає. У Nuxt з `@nuxtjs/i18n` за наявності понад десяти сторінок кожен маршрут тягне за собою тексти всіх інших маршрутів двічі: у JS chunk та в SSR payload.
83
+
84
+ [Бенчмарк Vue](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/benchmark/vue.md) вимірює це як "витік з інших маршрутів" (leakage from other routes) та "витік з інших локалей" (leakage from other locales). Якщо вашою відповіддю на запитання 3 було "багато сторінок", цей розділ важливіший за будь-які переваги API. Стаття про [покомпонентний та централізований i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/per-component_vs_centralized_i18n.md) розглядає аспект підтримки цього ж компромісу.
85
+
86
+ ## Кандидати
87
+
88
+ Розміри бібліотек наведено на основі [бенчмарку Vue](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/benchmark/vue.md): плагін плюс composable у порожньому компоненті після збирання, tree-shaking та мініфікації в додатку на 10 сторінок і 10 локалей. Обсяг контенту вимірюється окремо.
89
+
90
+ | Бібліотека | Модель контенту | Типобезпечність | Формат повідомлень | Розділення за маршрутами | Розмір бібліотеки |
91
+ | :------------- | :------------------------------------------------------------ | :------------------------------------------- | :---------------------------------- | :----------------------- | :--------------------------------------------------- |
92
+ | `vue-i18n` | Центральні каталоги на локаль, опціональні блоки SFC `<i18n>` | 2/5 — Опціонально через generic схеми | Власний (множина через pipe) | Ні | ~24.3 kB |
93
+ | `@nuxtjs/i18n` | Як у `vue-i18n`, плюс маршрутизація та SEO-теги | 2/5 — Так само | Так само | Ні, лише за локалями | ~24.3 kB |
94
+ | `fluent-vue` | Файли `.ftl` (Mozilla Fluent) | 1/5 — Відсутні | Fluent | Ні | ~29.7 kB |
95
+ | Paraglide | Проєкт inlang, згенеровані функції | 3.5/5 — Згенеровані | Власний | Через tree-shaking | Майже нуль (за рахунок згенерованого коду в проєкті) |
96
+ | Intlayer | Один `.content.ts` на компонент | 5/5 — Згенеровані, включені за замовчуванням | Intlayer (+ ICU, i18next, vue-i18n) | Так, на компонент | ~3.9 kB |
97
+
98
+ > Цифри є знімком стану версій із бенчмарку. Протестуйте їх на власному додатку, перш ніж приймати рішення виключно на основі розміру.
99
+ > Типобезпечність: 5/5 означає, що ключі, параметри та кожна локаль перевіряються без ручного налаштування, включаючи форматувальники URL та хелпери.
100
+
101
+ Майже нульовий розмір бібліотеки Paraglide досягається за рахунок її структури: runtime генерується безпосередньо у ваш репозиторій, що вимагає кроку регенерації перед кожним push та спричиняє merge conflicts у згенерованих файлах. Intlayer потребує `vite-intlayer` (або модуля Nuxt), тому він не може працювати без етапу збирання.
102
+
103
+ ## Зіставте свої відповіді з бібліотекою
104
+
105
+ <AccordionGroup>
106
+ <Accordion header="Vite SPA, невелика команда, мало локалей">
107
+
108
+ `vue-i18n` у режимі Composition mode (`legacy: false`), разом із `@intlify/unplugin-vue-i18n` для надсилання runtime-only збірки. Використовуйте lazy loading для локалей через `import()`. Це покриває більшість невеликих додатків, а відповіді спільноти можна легко знайти всюди. Блоки SFC `<i18n>` розміщують повідомлення поруч із компонентом, що допомагає, але інструменти екстракції та інтеграції з TMS для них розвинені слабше, ніж для JSON каталогів, тому варто заздалегідь визначитися з вибором у команді.
109
+
110
+ </Accordion>
111
+ <Accordion header="Nuxt із локалізованою маршрутизацією, sitemap та hreflang">
112
+
113
+ `@nuxtjs/i18n` надає стратегію маршрутизації, теги `hreflang` та визначення локалі без додаткового коду, і тільки це виправдовує його використання для сайтів із контентом на кілька сторінок. Його обмеження полягає в каталогах на рівні локалей: якщо сторінок більше десяти, SSR payload несе тексти кожного маршруту. Якщо це ваш випадок, налаштуйте `vue-i18n` вручну з повідомленнями для окремих маршрутів або перейдіть на ізольований контент. Стаття про [Nuxt i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/list_i18n_technologies/frameworks/nuxt.md) у першу чергу розглядає вибір стратегії маршрутизації.
114
+
115
+ </Accordion>
116
+ <Accordion header="Переклади надходять з TMS або агентства, що надає ICU">
117
+
118
+ Синтаксис множини у `vue-i18n` (`"no item | one item | {count} items"`) не є ICU і не є портативним. Перекладачів потрібно окремо попереджати про це, а експорт із TMS не згенерує такого формату. Погодьте формат до створення першого каталогу або оберіть бібліотеку, формат якої відповідає вашому постачальнику перекладів. Підтримка ICU в Intlayer є частковою, тому якщо ви вже отримуєте рядки в ICU, враховуйте це як блокуючий фактор.
119
+
120
+ </Accordion>
121
+ <Accordion header="Великий додаток, багато маршрутів, обмежений бюджет на bundle або SSR payload">
122
+
123
+ Надавайте перевагу ізольованому контенту, скомпільованому під час build time. Paraglide досягає цього за допомогою tree-shaking, який працює у Vite належним чином. Intlayer досягає цього завдяки деклараціям на рівні компонентів і завантажує лише те, що рендерить маршрут. У `vue-i18n` ви можете розділяти повідомлення за маршрутами вручну, проте ніщо не гарантує дотримання цього правила, і спільний компонент, що імпортує глобальний namespace, непомітно зведе зусилля нанівець.
124
+
125
+ </Accordion>
126
+ <Accordion header="Типобезпека є обов'язковою вимогою">
127
+
128
+ `vue-i18n` можна типізувати, передавши generic схеми до `createI18n`. Це працює, але ламається, щойно каталоги починають завантажуватися через lazy loading, оскільки схема описує повідомлення, які ще можуть бути не завантажені. Якщо ви не хочете підтримувати це вручну, оберіть бібліотеку, чиї типи генеруються з контенту: Paraglide або Intlayer. Публікація про [виявлення відсутніх перекладів](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/detecting_missing_translations.md) порівнює, які помилки кожен інструмент виявляє на етапі збирання.
129
+
130
+ </Accordion>
131
+ <Accordion header="Контент містить більше, ніж прості мітки UI">
132
+
133
+ Сторінки markdown, речення з компонентом `<RouterLink>` посередині, компоненти під конкретні локалі. `vue-i18n` має `<i18n-t>` для інтерполяції компонентів, що працює, але є досить громіздким. Вузли контенту Intlayer напряму приймають markdown, HTML та вкладені об'єкти, що значно зручніше для додатків із великим обсягом контенту.
134
+
135
+ </Accordion>
136
+ <Accordion header="Переклади створюватимуться за допомогою AI">
137
+
138
+ У такому разі централізований JSON більше не має користувача, який би виправдовував його існування. Колокований контент у поєднанні з CLI, який заповнює відсутні локалі, є коротшим шляхом. Команда `fill` в Intlayer виконується з використанням вашого власного API key (OpenAI, Anthropic, Mistral, Gemini) і перекладає лише змінені фрагменти.
139
+
140
+ </Accordion>
141
+ </AccordionGroup>
142
+
143
+ ## Слабкі місця кожної бібліотеки
144
+
145
+ - **`vue-i18n`**: найважча з представлених, власний формат множини, типізація є опціональною та вразливою за використання lazy loading, відсутня ізоляція за маршрутами, невикористовувані ключі непомітно накопичуються. Збереження `legacy: true` у додатку на Vue 3 залишає шар сумісності з Vue 2 і позбавляє типізації `useI18n()`.
146
+ - **`@nuxtjs/i18n`**: успадковує всі перераховані недоліки, а SSR payload містить тексти кожної сторінки, якщо кількість маршрутів перевищує десяток.
147
+ - **`fluent-vue`**: чудовий синтаксис повідомлень, відсутність типізації ключів, а плагін для Vite завантажує весь контент усіма мовами на кожну сторінку. Найважча бібліотека в бенчмарку.
148
+ - **Paraglide**: згенеровані файли додаються до репозиторію, регенерація перед кожним push, а локаль зчитується з cookie або storage при кожному виклику повідомлення, а не з реактивного сховища, що створює додаткове навантаження під час зміни локалі.
149
+ - **Intlayer**: обов'язковий плагін для збирання, менша екосистема, часткова підтримка ICU та контент, розподілений по кодовій базі за дизайном, тому експорт єдиного JSON для перекладача потребує додаткових інструментів.
150
+
151
+ ## Як кожен варіант виглядає в коді
152
+
153
+ Один і той самий компонент, підсумок кошика із заголовком та формою множини, написаний для кожного кандидата. Найцікавіша частина полягає не в шаблоні, а в тому, де зберігається контент і що про нього відомо `vue-tsc`.
154
+
155
+ <Tabs defaultTab="vue-i18n">
156
+ <Tab label="vue-i18n" value="vue-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": "no item | one item | {count} 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": "aucun article | un article | {count} 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": "ningún artículo | un artículo | {count} artículos"
190
+ }
191
+ }
192
+ ```
193
+
194
+ </Tab>
195
+ </Tabs>
196
+
197
+ ```vue fileName="src/components/CartSummary.vue"
198
+ <script setup lang="ts">
199
+ import { useI18n } from "vue-i18n";
200
+
201
+ const props = defineProps<{ count: number }>();
202
+ const { t } = useI18n();
203
+ </script>
204
+
205
+ <template>
206
+ <section>
207
+ <h2>{{ t("cart.title") }}</h2>
208
+ <p>{{ t("cart.items", { count: props.count }, props.count) }}</p>
209
+ </section>
210
+ </template>
211
+ ```
212
+
213
+ Форми множини з роздільником pipe є власним форматом vue-i18n, а не ICU. `t` приймає будь-який рядок, якщо ви не передасте generic схеми повідомлень до `createI18n`.
214
+
215
+ </Tab>
216
+ <Tab label="fluent-vue" value="fluent-vue">
217
+
218
+ <Tabs group="locale">
219
+ <Tab value="en" label="Англійська">
220
+
221
+ ```ftl fileName="src/locales/en.ftl"
222
+ cart-title = Your cart
223
+ cart-items = { $count ->
224
+ [one] { $count } item
225
+ *[other] { $count } items
226
+ }
227
+ ```
228
+
229
+ </Tab>
230
+ <Tab value="fr" label="Французька">
231
+
232
+ ```ftl fileName="src/locales/fr.ftl"
233
+ cart-title = Votre panier
234
+ cart-items = { $count ->
235
+ [one] { $count } article
236
+ *[other] { $count } articles
237
+ }
238
+ ```
239
+
240
+ </Tab>
241
+ <Tab value="es" label="Іспанська">
242
+
243
+ ```ftl fileName="src/locales/es.ftl"
244
+ cart-title = Tu carrito
245
+ cart-items = { $count ->
246
+ [one] { $count } artículo
247
+ *[other] { $count } artículos
248
+ }
249
+ ```
250
+
251
+ </Tab>
252
+ </Tabs>
253
+
254
+ ```vue fileName="src/components/CartSummary.vue"
255
+ <script setup lang="ts">
256
+ import { useFluent } from "fluent-vue";
257
+
258
+ const props = defineProps<{ count: number }>();
259
+ const { $t } = useFluent();
260
+ </script>
261
+
262
+ <template>
263
+ <section>
264
+ <h2>{{ $t("cart-title") }}</h2>
265
+ <p>{{ $t("cart-items", { count: props.count }) }}</p>
266
+ </section>
267
+ </template>
268
+ ```
269
+
270
+ Синтаксис Fluent добре підтримує множину та граматичні варіанти. Ідентифікатори повідомлень є нетипізованими рядками, а плагін для Vite додає всі локалі в бандл кожної сторінки.
271
+
272
+ </Tab>
273
+ <Tab label="Paraglide" value="paraglide">
274
+
275
+ <Tabs group="locale">
276
+ <Tab value="en" label="Англійська">
277
+
278
+ ```json fileName="messages/en.json"
279
+ {
280
+ "cart_title": "Your cart",
281
+ "cart_items": "{count} items"
282
+ }
283
+ ```
284
+
285
+ </Tab>
286
+ <Tab value="fr" label="Французька">
287
+
288
+ ```json fileName="messages/fr.json"
289
+ {
290
+ "cart_title": "Votre panier",
291
+ "cart_items": "{count} articles"
292
+ }
293
+ ```
294
+
295
+ </Tab>
296
+ <Tab value="es" label="Іспанська">
297
+
298
+ ```json fileName="messages/es.json"
299
+ {
300
+ "cart_title": "Tu carrito",
301
+ "cart_items": "{count} artículos"
302
+ }
303
+ ```
304
+
305
+ </Tab>
306
+ </Tabs>
307
+
308
+ ```vue fileName="src/components/CartSummary.vue"
309
+ <script setup lang="ts">
310
+ import { m } from "../paraglide/messages.js";
311
+
312
+ const props = defineProps<{ count: number }>();
313
+ </script>
314
+
315
+ <template>
316
+ <section>
317
+ <h2>{{ m.cart_title() }}</h2>
318
+ <p>{{ m.cart_items({ count: props.count }) }}</p>
319
+ </section>
320
+ </template>
321
+ ```
322
+
323
+ Кожне повідомлення є згенерованою типізованою функцією, тому відсутній ключ спричиняє помилку імпорту. Папка `paraglide/` генерується у вашому репозиторії та оновлюється під час кожної зміни.
324
+
325
+ </Tab>
326
+ <Tab label="Intlayer" value="intlayer">
327
+
328
+ ```ts fileName="src/components/cartSummary.content.ts"
329
+ import { plural, t, type Dictionary } from "intlayer";
330
+
331
+ const cartSummaryContent = {
332
+ key: "cart-summary",
333
+ content: {
334
+ title: t({ en: "Your cart", fr: "Votre panier", es: "Tu carrito" }),
335
+ items: t({
336
+ en: plural({ one: "{{count}} item", other: "{{count}} items" }),
337
+ fr: plural({ one: "{{count}} article", other: "{{count}} articles" }),
338
+ es: plural({ one: "{{count}} artículo", other: "{{count}} artículos" }),
339
+ }),
340
+ },
341
+ } satisfies Dictionary;
342
+
343
+ export default cartSummaryContent;
344
+ ```
345
+
346
+ ```vue fileName="src/components/CartSummary.vue"
347
+ <script setup lang="ts">
348
+ import { useIntlayer } from "vue-intlayer";
349
+
350
+ const props = defineProps<{ count: number }>();
351
+ const { title, items } = useIntlayer("cart-summary");
352
+ </script>
353
+
354
+ <template>
355
+ <section>
356
+ <h2><title /></h2>
357
+ <p>{{ items(props.count) }}</p>
358
+ </section>
359
+ </template>
360
+ ```
361
+
362
+ Усі локалі в одному файлі поруч із компонентом. Типи генеруються під час збирання, тому для `title` працює автодоповнення, а друкарська помилка призведе до збою `vue-tsc`. `<title />` рендерить вузол, доступний для візуального редактора; `{{ items(props.count) }}` повертає звичайний рядок.
363
+
364
+ </Tab>
365
+ </Tabs>
366
+
367
+ Вже використовуєте `vue-i18n`? [Адаптер сумісності `@intlayer/vue-i18n`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/compat/vue-i18n.md) створює alias для пакета на рівні бандлера, тому `useI18n()`, `$t`, множина через pipe та `v-t` продовжують працювати, поки Intlayer надає контент. [Посібник із міграції](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/migration_from_vue-i18n_to_intlayer.md) пояснює подальшу відмову від адаптера, також є [окремий посібник для Nuxt](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/migration_from_nuxtjs_i18n_to_intlayer.md).
368
+
369
+ ## Перш ніж зробити вибір
370
+
371
+ Таблиця функціоналу показує, що бібліотека вміє сьогодні. Наведені нижче пункти описують, яким буде її щоденне використання.
372
+
373
+ **Перевірте активність репозиторію.**
374
+
375
+ Коміти, час реакції на issues та наявність мінорного релізу в поточному році. Продумана архітектура без супроводу — це неминуча майбутня міграція.
376
+
377
+ **Не обирайте за кількістю завантажень в npm.**
378
+
379
+ Найчастіше встановлюють бібліотеку, яка з'явилася першою, а не ту, що найкраще підходить для кодової бази Vue у 2026 році. Завантаження відображають історію, а не відповідність вимогам.
380
+
381
+ ![Рейтинг бібліотек JavaScript i18n](https://github.com/aymericzip/intlayer/blob/main/docs/assets/alphabet_rank_i18n_lib.webp?raw=true)
382
+
383
+ **Дізнайтеся, хто фінансує розробку та що вони продають.**
384
+
385
+ `vue-i18n` підтримується Crowdin, як і `next-intl` та `svelte-i18n`. `i18next` підтримується Locize. Tolgee, Paraglide (inlang) та Intlayer розвивають власні платформи. Постачальник, чий дохід базується на платному хостингу перекладів, має мало стимулів робити переклад безкоштовним всередині вашого інструментарію. Intlayer є єдиним серед них, хто надає AI-переклад через CLI з використанням вашого власного API key, а також CMS, яку можна хостити самостійно.
386
+
387
+ **Чи готова бібліотека до взаємодії з AI-агентами?**
388
+
389
+ Агенти все ще стикаються з труднощами в i18n: вони забувають локалі, вигадують неіснуючі ключі та плутають синтаксис повідомлень. Чи надає бібліотека [Agent Skills](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/agent_skills.md) або [сервер MCP](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/mcp_server.md), щоб агент міг переглядати, заповнювати та тестувати контент? І чи оптимізовано завантаження контенту за замовчуванням, чи комусь доведеться щокварталу перевіряти namespaces та lazy imports?
390
+
391
+ **Типобезпека з коробки.**
392
+
393
+ Не "можна типізувати за допомогою додаткового коду", а "неправильний ключ призводить до помилки `tsc` одразу після встановлення". Перевірте поведінку з ключем, якого не існує, та з локаллю, де відсутній один переклад.
394
+
395
+ **Виявлення невикористовуваного контенту.**
396
+
397
+ Каталоги лише розростаються. Збірка Intlayer видаляє невикористовувані поля та записує їх у логи (`build.purge`). Paraglide досягає цього завдяки архітектурі, оскільки невикликана функція повідомлення видаляється через tree-shaking. Усі інші рішення залишають очищення на вас.
398
+
399
+ **Досвід розробника (Developer Experience).**
400
+
401
+ Час від налаштування до першого перекладеного рядка, [LSP](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/lsp.md) або [розширення VS Code](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/vs_code_extension.md), яке показує переклад при наведенні курсору та переходить до декларації, [CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/cli/index.md) для заповнення, тестування та відправки, [компілятор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/compiler.md) або екстрактор, який витягує захардкоджені рядки з компонентів, щоб не керувати кожним рядком ключ за ключем, а також можливість редагування контенту без участі розробників ([візуальний редактор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_visual_editor.md) або [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_CMS.md)) без відкриття pull request.
402
+
403
+ ## Часті запитання
404
+
405
+ <FAQ>
406
+
407
+ <Question title="Чи залишається vue-i18n правильним вибором за замовчуванням у 2026 році?">
408
+
409
+ Для більшості додатків на Vue — так. У неї найбільша екосистема, вичерпна документація та передбачувані компроміси: важкий runtime, власний формат множини та ізоляція за маршрутами, яку вам потрібно налаштовувати та контролювати самостійно.
410
+
411
+ </Question>
412
+
413
+ <Question title="Чи варто використовувати @nuxtjs/i18n, чи налаштувати vue-i18n власноруч у Nuxt?">
414
+
415
+ Використовуйте модуль, якщо тільки ваша маршрутизація не є нестандартною або додаток не має всього кілька сторінок. Ручне налаштування означає самостійну реалізацію локалізованих маршрутів, middleware, `hreflang` та sitemap, що вимагає більше зусиль, ніж здається.
416
+
417
+ </Question>
418
+
419
+ <Question title="Чи потрібна мені бібліотека на основі компілятора?">
420
+
421
+ Лише якщо розмір bundle, SSR payload, згенеровані типи або перевірка відсутніх ключів під час збирання є критичними вимогами. Стаття про [компіляторний та декларативний i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/compiler_vs_declarative_i18n.md) пояснює можливості компіляторів і випадки, де вони можуть бути неоптимальними.
422
+
423
+ </Question>
424
+
425
+ <Question title="Чи впливає вибір бібліотеки на SEO?">
426
+
427
+ Опосередковано. Пошукові роботи аналізують маршрутизацію, `hreflang`, `<html lang>` і наявність тексту у відрендереному на сервері HTML. Перегляньте [посібник із hreflang](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/hreflang_guide_multilingual_seo.md).
428
+
429
+ </Question>
430
+
431
+ </FAQ>
432
+
433
+ ## Додаткові матеріали
434
+
435
+ - [Бенчмарк Vue i18n: розмір bundle, витоки та час перемикання локалі](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/benchmark/vue.md)
436
+ - [Vue i18n: як працює vue-i18n та де виникають проблеми](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/list_i18n_technologies/frameworks/vue.md) та [публікація про Nuxt i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/list_i18n_technologies/frameworks/nuxt.md)
437
+ - [vue-i18n проти Intlayer: детальне порівняння функцій](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/vue-i18n_vs_intlayer.md) та [бенчмарк vue-i18n проти Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/vue-i18n_vs_intlayer_benchmark.md)
438
+ - [Чи застарів vue-i18n?](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/is_vue-i18n_outdated.md)
439
+ - [Історія JavaScript i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/history_of_i18n.md)
440
+ - [Компіляторний чи декларативний i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/compiler_vs_declarative_i18n.md)
441
+ - [Покомпонентний чи централізований i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/per-component_vs_centralized_i18n.md)
442
+ - [Налаштування i18n у додатку Vite + Vue](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_with_vite+vue.md) та в [додатку Nuxt](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_with_nuxt.md)
443
+ - Аналогічні посібники для [React](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/how_to_pick_react_i18n_library.md), [Svelte](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/how_to_pick_svelte_i18n_library.md) та [Solid](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/how_to_pick_solid_i18n_library.md)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-09-02
3
- updatedAt: 2026-09-02
3
+ updatedAt: 2026-09-16
4
4
  title: Чи застарів i18next у 2026 році?
5
5
  description: i18next використовується на мільйонах сайтів, але його runtime-архітектура 2011 року показує свій вік. Аналіз розміру бандла, обмежень tree-shaking та сповільнення інновацій.
6
6
  keywords:
@@ -125,6 +125,10 @@ style="border:none;"
125
125
 
126
126
  За замовчуванням майже **90% тексту**, що завантажується на сторінку, стосується інших маршрутів. Ручне налаштування неймспейсів потребує постійної уваги та призводить до помилок.
127
127
 
128
+ Графік нижче оцінює обсяг контенту для теоретичного застосунку, в якому від 1 до 10 сторінок і від 1 до 10 мов, приблизно по 30 КБ тексту на сторінку. Динамічне завантаження за локаллю прибирає вісь мов, обмеження контенту компонентом або маршрутом прибирає вісь сторінок, і лише їх поєднання зберігає обсяг стабільним.
129
+
130
+ ![Теоретичний витік контенту за архітектурою](https://github.com/aymericzip/intlayer/blob/main/docs/assets/theorical_content_leakage.webp?raw=true)
131
+
128
132
  **Затримка гідратації:**
129
133
 
130
134
  Компоненти з `react-i18next` гідратувалися **85 мс** проти **24 мс** у Intlayer. Передача великих дерев JSON клієнтським компонентам погіршує швидкість реагування.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-09-02
3
- updatedAt: 2026-09-02
3
+ updatedAt: 2026-09-16
4
4
  title: Чи застарів next-intl у 2026 році?
5
5
  description: next-intl став популярним рішенням для Next.js App Router. Проте він все ще створює оверхед у бандлі під час виконання та вимагає ручного керування неймспейсами.
6
6
  keywords:
@@ -127,6 +127,10 @@ export default async function RootLayout({ children, params }) {
127
127
 
128
128
  Цю проблему можна зменшити, розділивши JSON на неймспейси. Однак підтримувати ці зв'язки вручну складно та небезпечно через ризик пропустити ключі.
129
129
 
130
+ Графік нижче оцінює обсяг контенту для теоретичного застосунку, в якому від 1 до 10 сторінок і від 1 до 10 мов, приблизно по 30 КБ тексту на сторінку. Динамічне завантаження за локаллю прибирає вісь мов, обмеження контенту компонентом або маршрутом прибирає вісь сторінок, і лише їх поєднання зберігає обсяг стабільним.
131
+
132
+ ![Теоретичний витік контенту за архітектурою](https://github.com/aymericzip/intlayer/blob/main/docs/assets/theorical_content_leakage.webp?raw=true)
133
+
130
134
  Intlayer вирішує це статичним аналізом: [компілятор Intlayer](https://intlayer.org/uk/doc/compiler) включає тільки ті тексти, які реально використовуються на поточному маршруті, зводячи витік до **0.0%**.
131
135
 
132
136
  ## Чому next-intl не підтримує tree-shaking
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-09-02
3
- updatedAt: 2026-09-02
3
+ updatedAt: 2026-09-16
4
4
  title: Чи застарів vue-i18n у 2026 році?
5
5
  description: vue-i18n був стандартом для застосунків Vue та Nuxt ціле десятиліття. Проте в наших бенчмарках він виявився найважчим runtime i18n у вебі. Пояснюємо причини.
6
6
  keywords:
@@ -116,6 +116,12 @@ Runtime `vue-i18n` сам по собі важить **24.3 КБ gzipped**, що
116
116
 
117
117
  Компоненти з локальними областями видимості досягали в середньому 196 КБ у `vue-i18n` через дублювання каталогів, проти лише **6.5 КБ** в Intlayer.
118
118
 
119
+ **Як зростає витік:**
120
+
121
+ Графік нижче оцінює обсяг контенту для теоретичного застосунку, в якому від 1 до 10 сторінок і від 1 до 10 мов, приблизно по 30 КБ тексту на сторінку. Динамічне завантаження за локаллю прибирає вісь мов, обмеження контенту компонентом або маршрутом прибирає вісь сторінок, і лише їх поєднання зберігає обсяг стабільним.
122
+
123
+ ![Теоретичний витік контенту за архітектурою](https://github.com/aymericzip/intlayer/blob/main/docs/assets/theorical_content_leakage.webp?raw=true)
124
+
119
125
  ## Чому vue-i18n важкий?
120
126
 
121
127
  ### Компілятор AST у браузері користувача
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-08-23
3
- updatedAt: 2026-05-31
3
+ updatedAt: 2026-09-16
4
4
  title: "next-i18next проти next-intl проти Intlayer - Повний посібник з перекладу next-i18next vs next-intl vs Intlayer: 2026 Comparison"
5
5
  description: Найкраще рішення для розміру бандлу, SEO, продуктивності & підтримуваності. Зробіть Next.js сайт багатомовним у 2026, переклад LLM, Agent Skills & MCP.
6
6
  keywords:
@@ -20,7 +20,7 @@ author: aymericzip
20
20
 
21
21
  # next-i18next VS next-intl VS intlayer | Інтернаціоналізація Next.js (i18n)
22
22
 
23
- ![next-i18next проти next-intl та intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/assets/i18next-next-intl-intlayer.png?raw=true)
23
+ ![next-i18next проти next-intl та intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/assets/i18next-next-intl-intlayer.webp?raw=true)
24
24
 
25
25
  Розглянемо схожості та відмінності між трьома варіантами i18n для Next.js: next-i18next, next-intl та Intlayer.
26
26
 
@@ -137,6 +137,10 @@ Next.js надає вбудовану підтримку інтернаціон
137
137
 
138
138
  > Якщо я на сторінці `/fr/about`, я не хочу завантажувати вміст сторінки `/en/about`
139
139
 
140
+ Графік нижче оцінює обсяг контенту для теоретичного застосунку, в якому від 1 до 10 сторінок і від 1 до 10 мов, приблизно по 30 КБ тексту на сторінку. Динамічне завантаження за локаллю прибирає вісь мов, обмеження контенту компонентом або маршрутом прибирає вісь сторінок, і лише їх поєднання зберігає обсяг стабільним.
141
+
142
+ ![Теоретичний витік контенту за архітектурою](https://github.com/aymericzip/intlayer/blob/main/docs/assets/theorical_content_leakage.webp?raw=true)
143
+
140
144
  Знову ж таки, усі три рішення усвідомлюють ці проблеми та дозволяють керувати цими оптимізаціями. Різниця між ними, це DX (Developer Experience).
141
145
 
142
146
  `next-intl` та `next-i18next` використовують централізований підхід для керування перекладами, дозволяючи розбивати JSON за локаллю й на підфайли. У `next-i18next` ми називаємо JSON-файли 'namespaces'; `next-intl` дозволяє оголошувати messages. В `intlayer` ми називаємо JSON-файли 'dictionaries'.
@@ -161,9 +165,9 @@ Next.js надає вбудовану підтримку інтернаціон
161
165
 
162
166
  Нижче приклад впливу оптимізації розміру бандла за допомогою `intlayer` у застосунку на vite + react:
163
167
 
164
- | Оптимізований бандл | Неоптимізований бандл |
165
- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
166
- | ![оптимізований бандл](https://github.com/aymericzip/intlayer/blob/main/docs/assets/bundle.png?raw=true) | ![неоптимізований бандл](https://github.com/aymericzip/intlayer/blob/main/docs/assets/bundle_no_optimization.png?raw=true) |
168
+ | Оптимізований бандл | Неоптимізований бандл |
169
+ | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
170
+ | ![оптимізований бандл](https://github.com/aymericzip/intlayer/blob/main/docs/assets/bundle.webp?raw=true) | ![неоптимізований бандл](https://github.com/aymericzip/intlayer/blob/main/docs/assets/bundle_no_optimization.webp?raw=true) |
167
171
 
168
172
  ## TypeScript і безпека
169
173
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-09-10
3
- updatedAt: 2025-09-10
3
+ updatedAt: 2026-09-16
4
4
  title: "Per-Component проти централізованого i18n: новий підхід з Intlayer"
5
5
  description: "Детальний огляд стратегій інтернаціоналізації в React: порівняння централізованого, per-key і per-component підходів та презентація Intlayer."
6
6
  keywords:
@@ -63,6 +63,7 @@ extension Localization on String {
63
63
  - деталізує отримання контенту за ключем або на рівні компонента.
64
64
 
65
65
  </Column>
66
+
66
67
  </Columns>
67
68
 
68
69
  > У цьому блозі я не зосереджуватимусь на рішеннях на основі компілятора, які я вже розглянув тут: [Компілятор проти декларативного i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/uk/compiler_vs_declarative_i18n.md).
@@ -80,6 +81,10 @@ extension Localization on String {
80
81
  Звісно, автори бібліотек усвідомлюють ці обмеження і пропонують обхідні шляхи.
81
82
  Серед них: розподіл на namespaces, динамічне завантаження JSON-файлів (`await import()`), або очищення контенту під час збірки.
82
83
 
84
+ Графік нижче оцінює обсяг контенту для теоретичного застосунку, в якому від 1 до 10 сторінок і від 1 до 10 мов, приблизно по 30 КБ тексту на сторінку. Динамічне завантаження за локаллю прибирає вісь мов, обмеження контенту компонентом або маршрутом прибирає вісь сторінок, і лише їх поєднання зберігає обсяг стабільним.
85
+
86
+ ![Теоретичний витік контенту за архітектурою](https://github.com/aymericzip/intlayer/blob/main/docs/assets/theorical_content_leakage.webp?raw=true)
87
+
83
88
  Водночас потрібно знати, що коли ви динамічно завантажуєте свій вміст, ви вводите додаткові запити до сервера. Кожен додатковий `useState` або хук означає ще один запит до сервера.
84
89
 
85
90
  > Щоб вирішити це питання, Intlayer пропонує групувати кілька визначень контенту під одним ключем. Intlayer потім об'єднає цей контент.
@@ -112,9 +117,9 @@ extension Localization on String {
112
117
 
113
118
  Перший приклад не включає lazy-loaded переклади за локалями і не використовує розбиття на неймспейси. Другий включає content purging + динамічне завантаження перекладів.
114
119
 
115
- | Оптимізований бандл | Бандл без оптимізації |
116
- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
117
- | ![неоптимізований бандл](https://github.com/aymericzip/intlayer/blob/main/docs/assets/bundle_no_optimization.png?raw=true) | ![оптимізований бандл](https://github.com/aymericzip/intlayer/blob/main/docs/assets/bundle.png?raw=true) |
120
+ | Оптимізований бандл | Бандл без оптимізації |
121
+ | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
122
+ | ![неоптимізований бандл](https://github.com/aymericzip/intlayer/blob/main/docs/assets/bundle_no_optimization.webp?raw=true) | ![оптимізований бандл](https://github.com/aymericzip/intlayer/blob/main/docs/assets/bundle.webp?raw=true) |
118
123
 
119
124
  Отже, завдяки namespaces, ми перейшли від такої структури:
120
125