@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,453 @@
1
+ ---
2
+ createdAt: 2026-09-16
3
+ updatedAt: 2026-09-16
4
+ title: "Как выбрать подходящую библиотеку i18n для Vue в 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-i18n
10
+ - nuxt i18n
11
+ - fluent-vue
12
+ - Paraglide
13
+ - Intlayer
14
+ - сравнение библиотек i18n
15
+ slugs:
16
+ - blog
17
+ - how-to-pick-vue-i18n-library
18
+ author: aymericzip
19
+ ---
20
+
21
+ # Как выбрать подходящую библиотеку i18n для Vue
22
+
23
+ «Vue i18n», это одновременно и общий термин, и название библиотеки, которую устанавливают почти все. Это удобно и в то же время вводит в заблуждение: `vue-i18n`, отличный вариант по умолчанию, но далеко не единственный, а вопросы, определяющие выбор (нужен ли SSR, сколько страниц, кто пишет переводы), редко задаются до выполнения `npm install`.
24
+
25
+ Это руководство сначала ставит правильные вопросы, а затем сопоставляет ответы с подходящими библиотеками, как для чистого Vite + Vue, так и для Nuxt.
26
+
27
+ ![Экосистема библиотек i18n для Vue](https://github.com/aymericzip/intlayer/blob/main/docs/assets/cloud_i18n_logo.webp?raw=true)
28
+
29
+ ## Table of Contents
30
+
31
+ <TOC/>
32
+
33
+ ## Шесть вопросов перед сравнением библиотек
34
+
35
+ 1. **Vite SPA или Nuxt?** В SPA затраты на каталог, это проблема размера JS bundle. В Nuxt это также проблема размера HTML payload, поскольку сообщения сериализуются в состояние SSR и гидратируются. Именно поэтому большинство жалоб на то, что «vue-i18n работает медленно», исходят от приложений на Nuxt.
36
+ 2. **Кто пишет переводы?** Разработчики, TMS, агентство, поставляющее строки ICU, или AI-пайплайн. `vue-i18n` использует собственный синтаксис плюрализации, разделенный вертикальной чертой (pipe), а не ICU. Это имеет решающее значение, если строки поступают извне.
37
+ 3. **Сколько локалей и страниц?** Две локали и пять страниц могут позволить себе загружать всё сразу. Десять локалей и сорок маршрутов не могут, и стратегия загрузки становится главной статьей расходов.
38
+ 4. **Нужна ли типизация ключей?** `t("cart.totl")` скомпилируется в `vue-i18n` без ошибок, если не передать generic схемы сообщений, а эта схема конфликтует с лениво загружаемыми каталогами.
39
+ 5. **Что содержит контент?** Только UI-метки или также markdown, ссылки внутри предложений и блоки под конкретные локали. Сложный (rich) контент, это место, где `t()`, возвращающий строку, становится неудобным.
40
+ 6. **Является ли CSP ограничением?** Сборка `vue-i18n` по умолчанию компилирует сообщения в браузере с помощью `new Function`. Сборкам только для runtime требуется `@intlify/unplugin-vue-i18n` для предварительной компиляции во время сборки.
41
+
42
+ Запишите ответы. Всё изложенное ниже будет опираться на них.
43
+
44
+ ## Общая картина
45
+
46
+ В экосистеме Vue меньше библиотек i18n, чем в React, и они относятся к разным архитектурным волнам.
47
+
48
+ ![История библиотек i18n в JavaScript](https://github.com/aymericzip/intlayer/blob/main/docs/assets/history_i18n.webp?raw=true)
49
+
50
+ <AccordionGroup>
51
+ <Accordion header="Словари времени выполнения (2015–2019): vue-i18n, @nuxt/i18n">
52
+
53
+ `vue-i18n` появился в 2015 году и с тех пор остается решением по умолчанию. `@nuxt/i18n` оборачивает его, добавляя маршрутизацию локалей, SEO-теги и ленивую загрузку для каждой локали. Сообщения компилируются в функции рендеринга: во время сборки (если подключен unplugin) или в браузере.
54
+
55
+ </Accordion>
56
+ <Accordion header="Альтернативные форматы (2020): fluent-vue">
57
+
58
+ Файлы `.ftl` от Mozilla Fluent принесли более удобный синтаксис сообщений с учетом грамматических вариантов. Типизация ключей отсутствует, а плагин Vite загружает все локали на каждую страницу.
59
+
60
+ </Accordion>
61
+ <Accordion header="Компилятор и колоцированный контент (2024–2026): Paraglide, Intlayer">
62
+
63
+ Paraglide генерирует отдельную функцию для каждого сообщения и позволяет сборщику исключать неиспользуемый код через tree-shaking. Intlayer объявляет контент для каждого компонента в файлах `.content.ts`, генерирует типы и отправляет клиенту только то, что рендерит маршрут.
64
+
65
+ </Accordion>
66
+ </AccordionGroup>
67
+
68
+ В статье об [истории JavaScript i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ru/history_of_i18n.md) каждая волна рассмотрена подробно.
69
+
70
+ ## Главное решение: где живет контент и когда он загружается
71
+
72
+ Два структурных выбора объясняют большую часть разницы в размере bundle между различными конфигурациями:
73
+
74
+ - **Централизованный или локальный (scoped) контент.** Один `locales/en.json` на всё приложение или отдельное объявление для каждого компонента.
75
+ - **Статический или динамический импорт.** Загрузка всего сразу при запуске или получение активной локали (и в идеале активного маршрута) по требованию.
76
+
77
+ На графике показана расчетная нагрузка для теоретического приложения от 1 до 10 страниц, переведенного на 1–10 локалей, при объеме текста около 30 КБ на страницу.
78
+
79
+ ![Теоретическая утечка контента в зависимости от архитектуры](https://github.com/aymericzip/intlayer/blob/main/docs/assets/theorical_content_leakage.webp?raw=true)
80
+
81
+ `vue-i18n` поддерживает динамическую ось: вызов `setLocaleMessage` после `import()` позволяет не отправлять девять локалей, которые никто не читает. Однако он не дает разделения по страницам. Каталог локали, это один объект, и его загрузка подтягивает текст для всех страниц. В SPA этого никто не заметит. В Nuxt с `@nuxtjs/i18n` и более чем десятью страницами каждый маршрут несет в себе строки всех остальных маршрутов дважды: в JS chunk и в SSR payload.
82
+
83
+ В [бенчмарке Vue](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/benchmark/vue.md) это измеряется как «утечка из других маршрутов» и «утечка из других локалей». Если вашим ответом на вопрос 3 было «много страниц», этот раздел важнее любых предпочтений по API. В статье о [покомпонентном и централизованном i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ru/per-component_vs_centralized_i18n.md) этот компромисс рассматривается со стороны поддержки кода.
84
+
85
+ ## Кандидаты
86
+
87
+ Размеры библиотек взяты из [бенчмарка Vue](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/benchmark/vue.md): плагин плюс composable в пустом компоненте после сборки, tree-shaking и минификации для приложения из 10 страниц и 10 локалей. Контент измеряется отдельно.
88
+
89
+ | Библиотека | Модель контента | Типобезопасность | Формат сообщений | Разделение по маршрутам | Размер библиотеки |
90
+ | :------------- | :------------------------------------------------------------- | :------------------------------------ | :---------------------------------- | :---------------------- | :--------------------------------------------------- |
91
+ | `vue-i18n` | Центральные каталоги на локаль, опционально блоки SFC `<i18n>` | 2/5 — Опционально через generic схемы | Собственный (pipe plurals) | Нет | ~24.3 kB |
92
+ | `@nuxtjs/i18n` | Как и в `vue-i18n`, плюс маршрутизация и SEO-теги | 2/5 — То же | То же | Нет, только по локалям | ~24.3 kB |
93
+ | `fluent-vue` | Файлы `.ftl` (Mozilla Fluent) | 1/5 — Нет | Fluent | Нет | ~29.7 kB |
94
+ | Paraglide | Проект inlang, сгенерированные функции | 3.5/5 — Сгенерированные | Собственный | Через tree-shaking | Около нуля (за счёт сгенерированного кода в проекте) |
95
+ | Intlayer | Один `.content.ts` на компонент | 5/5 — Сгенерированные, по умолчанию | Intlayer (+ ICU, i18next, vue-i18n) | Да, по компонентам | ~3.9 kB |
96
+
97
+ > Значения представляют собой срез версий на момент проведения бенчмарка. Запустите его на своем приложении, прежде чем принимать решение исключительно на основе размера.
98
+ > Типобезопасность: 5/5 означает, что ключи, параметры и каждая локаль проверяются без ручной настройки, включая форматтеры URL и хелперы.
99
+
100
+ Размер библиотеки Paraglide близок к нулю по архитектурным причинам: runtime генерируется прямо в ваш репозиторий, что требует шага регенерации перед каждым push и приводит к merge-конфликтам в сгенерированных файлах. Intlayer требует `vite-intlayer` (или модуль для Nuxt), поэтому не может работать без шага сборки.
101
+
102
+ ## Сопоставьте ваши ответы с библиотекой
103
+
104
+ <AccordionGroup>
105
+ <Accordion header="Vite SPA, небольшая команда, мало локалей">
106
+
107
+ `vue-i18n` в режиме Composition (`legacy: false`) с `@intlify/unplugin-vue-i18n`, чтобы использовать сборку только для runtime. Ленивая загрузка локалей через `import()`. Это покрывает большинство небольших приложений, а ответы сообщества можно найти везде. Блоки SFC `<i18n>` размещают сообщения рядом с компонентом, что удобно, однако экосистема извлечения и TMS-инструментов вокруг них слабее, чем вокруг JSON-каталогов, поэтому заранее определитесь, что будет использовать команда.
108
+
109
+ </Accordion>
110
+ <Accordion header="Nuxt с локализованной маршрутизацией, sitemap и hreflang">
111
+
112
+ `@nuxtjs/i18n` предоставляет стратегию маршрутизации, теги `hreflang` и определение локали без написания лишнего кода, и одного этого достаточно для контентных сайтов с небольшим числом страниц. Его ограничением является каталог на уровне локали: когда страниц больше десятка, SSR payload начинает содержать тексты всех маршрутов. Если это ваш случай, настройте `vue-i18n` вручную с сообщениями для каждого маршрута либо перейдите на scoped-контент. В статье об [i18n в Nuxt](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ru/list_i18n_technologies/frameworks/nuxt.md) подробно рассматривается выбор стратегии маршрутизации.
113
+
114
+ </Accordion>
115
+ <Accordion header="Переводы приходят из TMS или агентства в формате ICU">
116
+
117
+ Синтаксис плюрализации в `vue-i18n` (`"no item | one item | {count} items"`), это не ICU, и он не является переносимым. Переводчиков нужно предупреждать об этом заранее, а экспорт из TMS не выдаст такой формат автоматически. Либо согласуйте формат до создания первого каталога, либо выберите библиотеку, формат которой совпадает с форматом вашего поставщика. Поддержка ICU в Intlayer частичная, поэтому если вы уже получаете строки в ICU, учитывайте это как сдерживающий фактор.
118
+
119
+ </Accordion>
120
+ <Accordion header="Большое приложение, много маршрутов, строгий бюджет на bundle или SSR payload">
121
+
122
+ Отдавайте предпочтение scoped-контенту, скомпилированному во время сборки. Paraglide решает эту задачу через tree-shaking, который отлично работает на Vite. Intlayer достигает этого за счет покомпонентных объявлений и отправляет клиенту только то, что рендерит маршрут. В `vue-i18n` можно разделять сообщения по маршрутам вручную, но инструменты этого не контролируют, и общий компонент, импортирующий глобальный namespace, незаметно нарушит разделение.
123
+
124
+ </Accordion>
125
+ <Accordion header="Типобезопасность обязательна">
126
+
127
+ `vue-i18n` можно типизировать, передав generic схемы в `createI18n`. Это работает, но ломается при ленивой загрузке каталогов, так как схема описывает сообщения, которых может еще не быть в памяти. Если вы не хотите поддерживать это вручную, выберите библиотеку, где типы генерируются из контента: Paraglide или Intlayer. В статье об [обнаружении недостающих переводов](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ru/detecting_missing_translations.md) сравнивается, что каждая библиотека находит на этапе сборки.
128
+
129
+ </Accordion>
130
+ <Accordion header="Контент сложнее простых UI-меток">
131
+
132
+ Markdown-страницы, предложения с `<RouterLink>` посередине, компоненты под конкретные локали. В `vue-i18n` есть `<i18n-t>` для интерполяции компонентов, что работает, но выглядит многословно. Узлы контента в Intlayer принимают markdown, HTML и вложенные объекты напрямую, что гораздо удобнее для приложений с большим объемом контента.
133
+
134
+ </Accordion>
135
+ <Accordion header="Переводы будут создаваться с помощью AI">
136
+
137
+ В этом случае у централизованного JSON не остается потребителя, который бы его оправдывал. Колоцированный контент в сочетании с CLI, дополняющим недостающие локали, наиболее прямой путь. Команда `fill` в Intlayer работает с вашим собственным API-ключом (OpenAI, Anthropic, Mistral, Gemini) и переводит только то, что изменилось.
138
+
139
+ </Accordion>
140
+ </AccordionGroup>
141
+
142
+ ## В чем слабые стороны каждой библиотеки
143
+
144
+ - **`vue-i18n`**: самая тяжелая из всех, собственный формат плюрализации, типы подключаются вручную и нестабильны при ленивой загрузке, нет разделения по маршрутам, неиспользуемые ключи незаметно накапливаются. Оставленный флаг `legacy: true` в приложении Vue 3 сохраняет слой совместимости с Vue 2 и отключает типизацию `useI18n()`.
145
+ - **`@nuxtjs/i18n`**: наследует все недостатки выше, а SSR payload несет в себе строки каждой страницы, как только число маршрутов превышает десяток.
146
+ - **`fluent-vue`**: приятный синтаксис сообщений, отсутствие типизации ключей, а плагин Vite загружает весь контент на всех языках на каждую страницу. Самая тяжелая библиотека в бенчмарке.
147
+ - **Paraglide**: сгенерированные файлы сохраняются в репозиторий, требуется регенерация перед каждым push, а локаль считывается из cookie или storage при каждом вызове сообщения вместо реактивного store, что создает лишнюю нагрузку при смене языка.
148
+ - **Intlayer**: обязательный плагин для сборки, меньшая экосистема, частичная поддержка ICU, контент распределен по кодовой базе по концепции дизайна, поэтому для экспорта единого JSON для переводчика требуются специальные инструменты.
149
+
150
+ ## Как каждый вариант выглядит в коде
151
+
152
+ Один и тот же компонент, сводка корзины с заголовком и формой множественного числа, написанный с использованием каждого кандидата. Самое интересное здесь, не шаблон, а то, где находится контент и что о нем знает `vue-tsc`.
153
+
154
+ <Tabs defaultTab="vue-i18n">
155
+ <Tab label="vue-i18n" value="vue-i18n">
156
+
157
+ <Tabs group="locale">
158
+ <Tab value="en" label="Английский">
159
+
160
+ ```json fileName="src/locales/en.json"
161
+ {
162
+ "cart": {
163
+ "title": "Your cart",
164
+ "items": "no item | one item | {count} items"
165
+ }
166
+ }
167
+ ```
168
+
169
+ </Tab>
170
+ <Tab value="fr" label="Французский">
171
+
172
+ ```json fileName="src/locales/fr.json"
173
+ {
174
+ "cart": {
175
+ "title": "Votre panier",
176
+ "items": "aucun article | un article | {count} articles"
177
+ }
178
+ }
179
+ ```
180
+
181
+ </Tab>
182
+ <Tab value="es" label="Испанский">
183
+
184
+ ```json fileName="src/locales/es.json"
185
+ {
186
+ "cart": {
187
+ "title": "Tu carrito",
188
+ "items": "ningún artículo | un artículo | {count} artículos"
189
+ }
190
+ }
191
+ ```
192
+
193
+ </Tab>
194
+ </Tabs>
195
+
196
+ ```vue fileName="src/components/CartSummary.vue"
197
+ <script setup lang="ts">
198
+ import { useI18n } from "vue-i18n";
199
+
200
+ const props = defineProps<{ count: number }>();
201
+ const { t } = useI18n();
202
+ </script>
203
+
204
+ <template>
205
+ <section>
206
+ <h2>{{ t("cart.title") }}</h2>
207
+ <p>{{ t("cart.items", { count: props.count }, props.count) }}</p>
208
+ </section>
209
+ </template>
210
+ ```
211
+
212
+ Плюрализация через вертикальную черту (pipe), собственный формат vue-i18n, а не ICU. Функция `t` принимает любую строку, если не передать generic схемы сообщений в `createI18n`.
213
+
214
+ </Tab>
215
+ <Tab label="fluent-vue" value="fluent-vue">
216
+
217
+ <Tabs group="locale">
218
+ <Tab value="en" label="Английский">
219
+
220
+ ```ftl fileName="src/locales/en.ftl"
221
+ cart-title = Your cart
222
+ cart-items = { $count ->
223
+ [one] { $count } item
224
+ *[other] { $count } items
225
+ }
226
+ ```
227
+
228
+ </Tab>
229
+ <Tab value="fr" label="Французский">
230
+
231
+ ```ftl fileName="src/locales/fr.ftl"
232
+ cart-title = Votre panier
233
+ cart-items = { $count ->
234
+ [one] { $count } article
235
+ *[other] { $count } articles
236
+ }
237
+ ```
238
+
239
+ </Tab>
240
+ <Tab value="es" label="Испанский">
241
+
242
+ ```ftl fileName="src/locales/es.ftl"
243
+ cart-title = Tu carrito
244
+ cart-items = { $count ->
245
+ [one] { $count } artículo
246
+ *[other] { $count } artículos
247
+ }
248
+ ```
249
+
250
+ </Tab>
251
+ </Tabs>
252
+
253
+ ```vue fileName="src/components/CartSummary.vue"
254
+ <script setup lang="ts">
255
+ import { useFluent } from "fluent-vue";
256
+
257
+ const props = defineProps<{ count: number }>();
258
+ const { $t } = useFluent();
259
+ </script>
260
+
261
+ <template>
262
+ <section>
263
+ <h2>{{ $t("cart-title") }}</h2>
264
+ <p>{{ $t("cart-items", { count: props.count }) }}</p>
265
+ </section>
266
+ </template>
267
+ ```
268
+
269
+ Синтаксис Fluent отлично справляется с формами множественного числа и грамматическими вариантами. Идентификаторы сообщений, это нетипизированные строки, а плагин Vite включает все локали в каждую страницу.
270
+
271
+ </Tab>
272
+ <Tab label="Paraglide" value="paraglide">
273
+
274
+ <Tabs group="locale">
275
+ <Tab value="en" label="Английский">
276
+
277
+ ```json fileName="messages/en.json"
278
+ {
279
+ "cart_title": "Your cart",
280
+ "cart_items": "{count} items"
281
+ }
282
+ ```
283
+
284
+ </Tab>
285
+ <Tab value="fr" label="Французский">
286
+
287
+ ```json fileName="messages/fr.json"
288
+ {
289
+ "cart_title": "Votre panier",
290
+ "cart_items": "{count} articles"
291
+ }
292
+ ```
293
+
294
+ </Tab>
295
+ <Tab value="es" label="Испанский">
296
+
297
+ ```json fileName="messages/es.json"
298
+ {
299
+ "cart_title": "Tu carrito",
300
+ "cart_items": "{count} artículos"
301
+ }
302
+ ```
303
+
304
+ </Tab>
305
+ </Tabs>
306
+
307
+ ```vue fileName="src/components/CartSummary.vue"
308
+ <script setup lang="ts">
309
+ import { m } from "../paraglide/messages.js";
310
+
311
+ const props = defineProps<{ count: number }>();
312
+ </script>
313
+
314
+ <template>
315
+ <section>
316
+ <h2>{{ m.cart_title() }}</h2>
317
+ <p>{{ m.cart_items({ count: props.count }) }}</p>
318
+ </section>
319
+ </template>
320
+ ```
321
+
322
+ Каждое сообщение, это сгенерированная типизированная функция, поэтому отсутствие ключа вызывает ошибку импорта. Папка `paraglide/` генерируется прямо в репозитории и пересоздается при каждом изменении.
323
+
324
+ </Tab>
325
+ <Tab label="Intlayer" value="intlayer">
326
+
327
+ ```ts fileName="src/components/cartSummary.content.ts"
328
+ import { plural, t, type Dictionary } from "intlayer";
329
+
330
+ const cartSummaryContent = {
331
+ key: "cart-summary",
332
+ content: {
333
+ title: t({
334
+ ru: "Ваша корзина",
335
+ en: "Your cart",
336
+ fr: "Votre panier",
337
+ es: "Tu carrito",
338
+ }),
339
+ items: t({
340
+ ru: plural({
341
+ one: "{{count}} товар",
342
+ few: "{{count}} товара",
343
+ many: "{{count}} товаров",
344
+ other: "{{count}} товаров",
345
+ }),
346
+ en: plural({ one: "{{count}} item", other: "{{count}} items" }),
347
+ fr: plural({ one: "{{count}} article", other: "{{count}} articles" }),
348
+ es: plural({ one: "{{count}} artículo", other: "{{count}} artículos" }),
349
+ }),
350
+ },
351
+ } satisfies Dictionary;
352
+
353
+ export default cartSummaryContent;
354
+ ```
355
+
356
+ ```vue fileName="src/components/CartSummary.vue"
357
+ <script setup lang="ts">
358
+ import { useIntlayer } from "vue-intlayer";
359
+
360
+ const props = defineProps<{ count: number }>();
361
+ const { title, items } = useIntlayer("cart-summary");
362
+ </script>
363
+
364
+ <template>
365
+ <section>
366
+ <h2><title /></h2>
367
+ <p>{{ items(props.count) }}</p>
368
+ </section>
369
+ </template>
370
+ ```
371
+
372
+ Все локали находятся в одном файле рядом с компонентом. Типы генерируются во время сборки, поэтому для `title` работает автодополнение, а опечатка вызовет ошибку `vue-tsc`. `<title />` рендерит узел, доступный визуальному редактору, а `{{ items(props.count) }}` возвращает обычную строку.
373
+
374
+ </Tab>
375
+ </Tabs>
376
+
377
+ Уже используете `vue-i18n`? [Адаптер совместимости `@intlayer/vue-i18n`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/compat/vue-i18n.md) создает псевдонимы пакета на уровне сборщика, благодаря чему `useI18n()`, `$t`, pipe-плюрализация и `v-t` продолжают работать, пока Intlayer управляет контентом. В [руководстве по миграции](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/migration_from_vue-i18n_to_intlayer.md) описан последующий отказ от адаптера, также доступно [руководство для Nuxt](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/migration_from_nuxtjs_i18n_to_intlayer.md).
378
+
379
+ ## Перед тем как сделать выбор
380
+
381
+ Таблица возможностей показывает, что библиотека умеет сегодня. Следующие пункты помогут понять, каково будет поддерживать ее в реальной работе.
382
+
383
+ **Проверьте активность репозитория.**
384
+
385
+ Коммиты, время ответа на issues и выходил ли последний минорный релиз в этом году. Надежная архитектура без мейнтейнера, это отложенная миграция.
386
+
387
+ **Не выбирайте исключительно по числу загрузок в npm.**
388
+
389
+ Самая скачиваемая библиотека, это та, что вышла первой, а не та, которая лучше всего подходит для кодовой базы на Vue в 2026 году. Число загрузок отражает историю, а не соответствие текущим требованиям.
390
+
391
+ ![Рейтинг библиотек i18n для JavaScript](https://github.com/aymericzip/intlayer/blob/main/docs/assets/alphabet_rank_i18n_lib.webp?raw=true)
392
+
393
+ **Узнайте, кто финансирует мейнтейнера и что они продают.**
394
+
395
+ `vue-i18n` поддерживается платформой Crowdin, как `next-intl` и `svelte-i18n`. `i18next` поддерживается Locize. Tolgee, Paraglide (inlang) и Intlayer развивают собственные платформы. Поставщик, чей доход строится на платном хостинге переводов, мало заинтересован в том, чтобы переводы стали бесплатными внутри вашего toolchain. Intlayer, единственный вариант из списка, предлагающий AI-перевод через CLI с вашим собственным API-ключом, а также CMS, которую можно развернуть самостоятельно (self-host).
396
+
397
+ **Готова ли библиотека к работе с AI-агентами?**
398
+
399
+ Агенты все еще испытывают сложности с i18n: они забывают локали, выдумывают ключи и путают синтаксис сообщений. Поставляет ли библиотека [Agent Skills](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/agent_skills.md) или [MCP-сервер](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/mcp_server.md), чтобы агент мог получать список контента, заполнять его и тестировать? Оптимизирована ли загрузка контента по умолчанию, или кому-то придется каждый квартал проверять namespaces и ленивые импорты?
400
+
401
+ **Типобезопасность из коробки.**
402
+
403
+ Не «можно типизировать с помощью дополнительных настроек», а «неверный ключ приводит к ошибке `tsc` сразу после чистой установки». Проверьте, что происходит при обращении к несуществующему ключу и если для какой-то локали пропущен перевод.
404
+
405
+ **Обнаружение неиспользуемого контента.**
406
+
407
+ Каталоги со временем только растут. Сборка Intlayer удаляет неиспользуемые поля и логирует их (`build.purge`). Paraglide решает эту задачу на уровне архитектуры, поскольку невызываемая функция сообщения удаляется через tree-shaking. Во всех остальных случаях очистка остается за вами.
408
+
409
+ **Developer experience.**
410
+
411
+ Время от настройки до первой переведенной строки, наличие [LSP](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/lsp.md) или [расширения для VS Code](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/vs_code_extension.md), показывающего перевод при наведении и позволяющего перейти к объявлению, [CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/index.md) для заполнения, тестирования и отправки, [компилятор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/compiler.md) или экстрактор, который извлекает захардкоженные строки из компонентов, чтобы не управлять каждой строкой ключ за ключом, а также возможность для не-разработчиков редактировать контент ([визуальный редактор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_visual_editor.md) или [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_CMS.md)) без создания pull request.
412
+
413
+ ## Часто задаваемые вопросы
414
+
415
+ <FAQ>
416
+
417
+ <Question title="Остается ли vue-i18n хорошим выбором по умолчанию в 2026 году?">
418
+
419
+ Для большинства приложений на Vue, да. У нее крупнейшая экосистема, подробная документация и предсказуемые издержки: тяжелый runtime, собственный формат множественного числа и разделение по маршрутам, которое вам придется настраивать и контролировать самостоятельно.
420
+
421
+ </Question>
422
+
423
+ <Question title="Стоит ли использовать @nuxtjs/i18n или настроить vue-i18n вручную в Nuxt?">
424
+
425
+ Используйте модуль, если только у вас не нестандартная маршрутизация или в приложении мало страниц. Настройка вручную означает самостоятельную реализацию маршрутов локалей, middleware, `hreflang` и карты сайта (sitemap), а это сложнее, чем кажется.
426
+
427
+ </Question>
428
+
429
+ <Question title="Нужна ли мне библиотека на основе компилятора?">
430
+
431
+ Только если размер bundle, SSR payload, сгенерированные типы или проверка отсутствующих ключей во время сборки являются обязательными требованиями. В статье о [сравнении компиляторного и декларативного подходов в i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ru/compiler_vs_declarative_i18n.md) объясняется, что дают компиляторы и где они могут ошибаться.
432
+
433
+ </Question>
434
+
435
+ <Question title="Влияет ли выбор библиотеки на SEO?">
436
+
437
+ Косвенно. Поисковым роботам важны маршрутизация, `hreflang`, `<html lang>` и наличие текста в HTML, отрендеренном на сервере. См. [руководство по hreflang](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ru/hreflang_guide_multilingual_seo.md).
438
+
439
+ </Question>
440
+
441
+ </FAQ>
442
+
443
+ ## Дополнительные материалы
444
+
445
+ - [Бенчмарк Vue i18n: размер bundle, утечки и время переключения локалей](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/benchmark/vue.md)
446
+ - [Vue i18n: как устроен vue-i18n и в чем его слабые места](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ru/list_i18n_technologies/frameworks/vue.md) и [статья об i18n в Nuxt](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ru/list_i18n_technologies/frameworks/nuxt.md)
447
+ - [vue-i18n против Intlayer: детальное сравнение функций](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ru/vue-i18n_vs_intlayer.md) и [бенчмарк vue-i18n против Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ru/vue-i18n_vs_intlayer_benchmark.md)
448
+ - [Устарел ли vue-i18n?](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ru/is_vue-i18n_outdated.md)
449
+ - [История i18n в JavaScript](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ru/history_of_i18n.md)
450
+ - [Компиляторный против декларативного i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ru/compiler_vs_declarative_i18n.md)
451
+ - [Покомпонентный против централизованного i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ru/per-component_vs_centralized_i18n.md)
452
+ - [Настройка i18n в приложении Vite + Vue](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_vite+vue.md) и в [приложении Nuxt](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_nuxt.md)
453
+ - Аналогичные руководства для [React](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ru/how_to_pick_react_i18n_library.md), [Svelte](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ru/how_to_pick_svelte_i18n_library.md) и [Solid](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ru/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
  Частично это решается делением на неймспейсы. Но ручное отслеживание привязки текстов к маршрутам трудоемко и часто приводит к сбоям.
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/ru/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:
@@ -134,6 +134,10 @@ Next.js предоставляет встроенную поддержку ин
134
134
 
135
135
  > Если я нахожусь на странице `/fr/about`, я не хочу загружать содержимое страницы `/en/about`
136
136
 
137
+ График ниже оценивает объём контента для теоретического приложения, в котором от 1 до 10 страниц и от 1 до 10 языков, примерно по 30 КБ текста на страницу. Динамическая загрузка по локали убирает ось языков, ограничение контента компонентом или маршрутом убирает ось страниц, и только их сочетание сохраняет объём стабильным.
138
+
139
+ ![Теоретическая утечка контента по архитектуре](https://github.com/aymericzip/intlayer/blob/main/docs/assets/theorical_content_leakage.webp?raw=true)
140
+
137
141
  Опять же, все три решения осведомлены об этих проблемах и позволяют управлять этими оптимизациями. Разница между тремя решениями заключается в опыте разработчика (DX).
138
142
 
139
143
  `next-intl` и `next-i18next` используют централизованный подход к управлению переводами, позволяющий разделять JSON по локалям и по подфайлам. В `next-i18next` мы называем JSON-файлы «пространствами имён» (namespaces); `next-intl` позволяет объявлять сообщения. В `intlayer` мы называем JSON-файлы «словарями» (dictionaries).
@@ -156,9 +160,9 @@ Next.js предоставляет встроенную поддержку ин
156
160
 
157
161
  Вот пример влияния оптимизации размера бандла с использованием `intlayer` в приложении на vite + react:
158
162
 
159
- | Оптимизированный бандл | Неоптимизированный бандл |
160
- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
161
- | ![оптимизированный бандл](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) |
163
+ | Оптимизированный бандл | Неоптимизированный бандл |
164
+ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
165
+ | ![оптимизированный бандл](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) |
162
166
 
163
167
  ## TypeScript и безопасность
164
168
 
@@ -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: "i18n на уровне компонента против централизованного: новый подход с Intlayer"
5
5
  description: Глубокое погружение в стратегии интернационализации в React, сравнение централизованного, по-ключевого и по-компонентного подходов, и представление 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
  > В этом блоге я не буду фокусироваться на решениях, основанных на компиляции, которые я уже рассмотрел здесь: [Компилятор vs декларативный i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ru/compiler_vs_declarative_i18n.md).
@@ -79,6 +80,10 @@ extension Localization on String {
79
80
 
80
81
  Разработчики библиотек, разумеется, знают об этих ограничениях и предлагают обходные решения. Среди них: разделение на namespaces, динамическая загрузка JSON-файлов (`await import()`), или очистка контента на этапе сборки.
81
82
 
83
+ График ниже оценивает объём контента для теоретического приложения, в котором от 1 до 10 страниц и от 1 до 10 языков, примерно по 30 КБ текста на страницу. Динамическая загрузка по локали убирает ось языков, ограничение контента компонентом или маршрутом убирает ось страниц, и только их сочетание сохраняет объём стабильным.
84
+
85
+ ![Теоретическая утечка контента по архитектуре](https://github.com/aymericzip/intlayer/blob/main/docs/assets/theorical_content_leakage.webp?raw=true)
86
+
82
87
  В то же время следует учитывать, что при динамической подгрузке контента вы создаёте дополнительные запросы к серверу. Каждое дополнительное `useState` или hook означает ещё один запрос к серверу.
83
88
 
84
89
  > Чтобы решить эту проблему, Intlayer предлагает группировать несколько определений контента под одним и тем же ключом; Intlayer затем объединит этот контент.
@@ -115,9 +120,9 @@ extension Localization on String {
115
120
 
116
121
  Первый пример не включает ленивую загрузку переводов по локалям и не содержит разделения на namespaces. Во втором примере используется content purging + динамическая загрузка переводов.
117
122
 
118
- | Оптимизированный бандл | Неоптимизированный бандл |
119
- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
120
- | ![неоптимизированный bundle](https://github.com/aymericzip/intlayer/blob/main/docs/assets/bundle_no_optimization.png?raw=true) | ![оптимизированный bundle](https://github.com/aymericzip/intlayer/blob/main/docs/assets/bundle.png?raw=true) |
123
+ | Оптимизированный бандл | Неоптимизированный бандл |
124
+ | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
125
+ | ![неоптимизированный bundle](https://github.com/aymericzip/intlayer/blob/main/docs/assets/bundle_no_optimization.webp?raw=true) | ![оптимизированный bundle](https://github.com/aymericzip/intlayer/blob/main/docs/assets/bundle.webp?raw=true) |
121
126
 
122
127
  Таким образом, благодаря namespaces, мы перешли от этой структуры:
123
128