@intlayer/docs 9.5.1 → 9.5.2

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 (711) hide show
  1. package/blog/ar/history_of_i18n.md +304 -0
  2. package/blog/de/history_of_i18n.md +304 -0
  3. package/blog/en/history_of_i18n.md +304 -0
  4. package/blog/en-GB/history_of_i18n.md +304 -0
  5. package/blog/es/history_of_i18n.md +304 -0
  6. package/blog/fr/history_of_i18n.md +304 -0
  7. package/blog/hi/history_of_i18n.md +304 -0
  8. package/blog/id/history_of_i18n.md +304 -0
  9. package/blog/it/history_of_i18n.md +304 -0
  10. package/blog/ja/history_of_i18n.md +304 -0
  11. package/blog/ko/history_of_i18n.md +304 -0
  12. package/blog/pl/history_of_i18n.md +304 -0
  13. package/blog/pt/history_of_i18n.md +304 -0
  14. package/blog/ru/history_of_i18n.md +304 -0
  15. package/blog/tr/history_of_i18n.md +304 -0
  16. package/blog/uk/history_of_i18n.md +304 -0
  17. package/blog/vi/history_of_i18n.md +304 -0
  18. package/blog/zh/history_of_i18n.md +304 -0
  19. package/dist/cjs/generated/blog.entry.cjs +20 -0
  20. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  21. package/dist/cjs/generated/docs.entry.cjs +0 -20
  22. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  23. package/dist/esm/generated/blog.entry.mjs +20 -0
  24. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  25. package/dist/esm/generated/docs.entry.mjs +0 -20
  26. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  27. package/dist/types/generated/blog.entry.d.ts +1 -0
  28. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  29. package/dist/types/generated/docs.entry.d.ts +0 -1
  30. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  31. package/docs/ar/benchmark/index.md +4 -1
  32. package/docs/ar/benchmark/nextjs.md +32 -27
  33. package/docs/ar/benchmark/solid.md +13 -10
  34. package/docs/ar/benchmark/svelte.md +12 -9
  35. package/docs/ar/benchmark/tanstack.md +29 -24
  36. package/docs/ar/benchmark/vue.md +11 -7
  37. package/docs/ar/cli/build.md +8 -1
  38. package/docs/ar/cli/configuration.md +3 -1
  39. package/docs/ar/cli/doc-review.md +8 -1
  40. package/docs/ar/cli/doc-translate.md +5 -1
  41. package/docs/ar/cli/extract.md +2 -1
  42. package/docs/ar/cli/fill.md +5 -1
  43. package/docs/ar/cli/index.md +4 -5
  44. package/docs/ar/cli/live.md +5 -1
  45. package/docs/ar/cli/login.md +2 -2
  46. package/docs/ar/cli/pull.md +5 -1
  47. package/docs/ar/cli/push.md +5 -1
  48. package/docs/ar/cli/scan.md +5 -1
  49. package/docs/ar/cli/standalone.md +5 -1
  50. package/docs/ar/cli/test.md +5 -1
  51. package/docs/ar/cli/watch.md +5 -1
  52. package/docs/ar/compat/i18n-js.md +1 -1
  53. package/docs/ar/compat/i18next.md +1 -1
  54. package/docs/ar/compat/lingui.md +1 -1
  55. package/docs/ar/compat/next-i18next.md +1 -1
  56. package/docs/ar/compat/next-intl.md +1 -1
  57. package/docs/ar/compat/next-translate.md +1 -1
  58. package/docs/ar/compat/ngx-translate.md +1 -1
  59. package/docs/ar/compat/nuxtjs-i18n.md +1 -1
  60. package/docs/ar/compat/polyglot.md +1 -1
  61. package/docs/ar/compat/react-i18next.md +1 -1
  62. package/docs/ar/compat/react-intl.md +1 -1
  63. package/docs/ar/compat/svelte-i18n.md +1 -1
  64. package/docs/ar/compat/transloco.md +1 -1
  65. package/docs/ar/compat/vue-i18n.md +1 -1
  66. package/docs/ar/intlayer_with_remix_3.md +543 -0
  67. package/docs/bn/cli/index.md +4 -5
  68. package/docs/bn/cli/scan.md +5 -1
  69. package/docs/bn/cli/standalone.md +5 -1
  70. package/docs/cs/cli/index.md +4 -5
  71. package/docs/cs/cli/scan.md +5 -1
  72. package/docs/cs/cli/standalone.md +5 -1
  73. package/docs/de/benchmark/index.md +4 -1
  74. package/docs/de/benchmark/nextjs.md +32 -27
  75. package/docs/de/benchmark/solid.md +13 -10
  76. package/docs/de/benchmark/svelte.md +12 -9
  77. package/docs/de/benchmark/tanstack.md +29 -24
  78. package/docs/de/benchmark/vue.md +11 -7
  79. package/docs/de/cli/build.md +8 -1
  80. package/docs/de/cli/configuration.md +3 -1
  81. package/docs/de/cli/doc-review.md +8 -1
  82. package/docs/de/cli/doc-translate.md +5 -1
  83. package/docs/de/cli/extract.md +2 -1
  84. package/docs/de/cli/fill.md +5 -1
  85. package/docs/de/cli/index.md +4 -5
  86. package/docs/de/cli/live.md +5 -1
  87. package/docs/de/cli/login.md +2 -2
  88. package/docs/de/cli/pull.md +5 -1
  89. package/docs/de/cli/push.md +5 -1
  90. package/docs/de/cli/scan.md +5 -1
  91. package/docs/de/cli/standalone.md +5 -1
  92. package/docs/de/cli/test.md +5 -1
  93. package/docs/de/cli/watch.md +5 -1
  94. package/docs/de/compat/i18n-js.md +1 -1
  95. package/docs/de/compat/i18next.md +1 -1
  96. package/docs/de/compat/lingui.md +1 -1
  97. package/docs/de/compat/next-i18next.md +1 -1
  98. package/docs/de/compat/next-intl.md +1 -1
  99. package/docs/de/compat/next-translate.md +1 -1
  100. package/docs/de/compat/ngx-translate.md +1 -1
  101. package/docs/de/compat/nuxtjs-i18n.md +1 -1
  102. package/docs/de/compat/polyglot.md +1 -1
  103. package/docs/de/compat/react-i18next.md +1 -1
  104. package/docs/de/compat/react-intl.md +1 -1
  105. package/docs/de/compat/svelte-i18n.md +1 -1
  106. package/docs/de/compat/transloco.md +1 -1
  107. package/docs/de/compat/vue-i18n.md +1 -1
  108. package/docs/de/intlayer_with_remix_3.md +543 -0
  109. package/docs/en/benchmark/index.md +4 -1
  110. package/docs/en/benchmark/nextjs.md +32 -27
  111. package/docs/en/benchmark/solid.md +13 -10
  112. package/docs/en/benchmark/svelte.md +12 -9
  113. package/docs/en/benchmark/tanstack.md +30 -25
  114. package/docs/en/benchmark/vue.md +11 -7
  115. package/docs/en/cli/build.md +8 -1
  116. package/docs/en/cli/configuration.md +3 -1
  117. package/docs/en/cli/doc-review.md +8 -1
  118. package/docs/en/cli/doc-translate.md +5 -1
  119. package/docs/en/cli/extract.md +2 -1
  120. package/docs/en/cli/fill.md +5 -1
  121. package/docs/en/cli/index.md +4 -5
  122. package/docs/en/cli/live.md +5 -1
  123. package/docs/en/cli/login.md +2 -2
  124. package/docs/en/cli/pull.md +5 -1
  125. package/docs/en/cli/push.md +5 -1
  126. package/docs/en/cli/scan.md +5 -1
  127. package/docs/en/cli/standalone.md +5 -1
  128. package/docs/en/cli/test.md +5 -1
  129. package/docs/en/cli/watch.md +5 -1
  130. package/docs/en/compat/i18n-js.md +1 -1
  131. package/docs/en/compat/i18next.md +1 -1
  132. package/docs/en/compat/lingui.md +1 -1
  133. package/docs/en/compat/next-i18next.md +1 -1
  134. package/docs/en/compat/next-intl.md +1 -1
  135. package/docs/en/compat/next-translate.md +1 -1
  136. package/docs/en/compat/ngx-translate.md +1 -1
  137. package/docs/en/compat/nuxtjs-i18n.md +1 -1
  138. package/docs/en/compat/polyglot.md +1 -1
  139. package/docs/en/compat/react-i18next.md +1 -1
  140. package/docs/en/compat/react-intl.md +1 -1
  141. package/docs/en/compat/svelte-i18n.md +1 -1
  142. package/docs/en/compat/transloco.md +1 -1
  143. package/docs/en/compat/vue-i18n.md +1 -1
  144. package/docs/en/intlayer_with_remix_3.md +103 -71
  145. package/docs/en-GB/benchmark/index.md +4 -1
  146. package/docs/en-GB/benchmark/nextjs.md +32 -27
  147. package/docs/en-GB/benchmark/solid.md +13 -10
  148. package/docs/en-GB/benchmark/svelte.md +12 -9
  149. package/docs/en-GB/benchmark/tanstack.md +29 -24
  150. package/docs/en-GB/benchmark/vue.md +11 -7
  151. package/docs/en-GB/cli/build.md +8 -1
  152. package/docs/en-GB/cli/configuration.md +3 -1
  153. package/docs/en-GB/cli/doc-review.md +8 -1
  154. package/docs/en-GB/cli/doc-translate.md +5 -1
  155. package/docs/en-GB/cli/extract.md +2 -1
  156. package/docs/en-GB/cli/fill.md +5 -1
  157. package/docs/en-GB/cli/index.md +4 -5
  158. package/docs/en-GB/cli/live.md +5 -1
  159. package/docs/en-GB/cli/login.md +2 -2
  160. package/docs/en-GB/cli/pull.md +5 -1
  161. package/docs/en-GB/cli/push.md +5 -1
  162. package/docs/en-GB/cli/scan.md +5 -1
  163. package/docs/en-GB/cli/standalone.md +5 -1
  164. package/docs/en-GB/cli/test.md +5 -1
  165. package/docs/en-GB/cli/watch.md +5 -1
  166. package/docs/en-GB/compat/i18n-js.md +1 -1
  167. package/docs/en-GB/compat/i18next.md +1 -1
  168. package/docs/en-GB/compat/lingui.md +1 -1
  169. package/docs/en-GB/compat/next-i18next.md +1 -1
  170. package/docs/en-GB/compat/next-intl.md +1 -1
  171. package/docs/en-GB/compat/next-translate.md +1 -1
  172. package/docs/en-GB/compat/ngx-translate.md +1 -1
  173. package/docs/en-GB/compat/nuxtjs-i18n.md +1 -1
  174. package/docs/en-GB/compat/polyglot.md +1 -1
  175. package/docs/en-GB/compat/react-i18next.md +1 -1
  176. package/docs/en-GB/compat/react-intl.md +1 -1
  177. package/docs/en-GB/compat/svelte-i18n.md +1 -1
  178. package/docs/en-GB/compat/transloco.md +1 -1
  179. package/docs/en-GB/compat/vue-i18n.md +1 -1
  180. package/docs/en-GB/intlayer_with_remix_3.md +558 -0
  181. package/docs/es/benchmark/index.md +4 -1
  182. package/docs/es/benchmark/nextjs.md +32 -27
  183. package/docs/es/benchmark/solid.md +13 -10
  184. package/docs/es/benchmark/svelte.md +12 -9
  185. package/docs/es/benchmark/tanstack.md +29 -24
  186. package/docs/es/benchmark/vue.md +11 -7
  187. package/docs/es/cli/build.md +8 -1
  188. package/docs/es/cli/configuration.md +3 -1
  189. package/docs/es/cli/doc-review.md +8 -1
  190. package/docs/es/cli/doc-translate.md +5 -1
  191. package/docs/es/cli/extract.md +2 -1
  192. package/docs/es/cli/fill.md +5 -1
  193. package/docs/es/cli/index.md +4 -5
  194. package/docs/es/cli/live.md +5 -1
  195. package/docs/es/cli/login.md +2 -2
  196. package/docs/es/cli/pull.md +5 -1
  197. package/docs/es/cli/push.md +5 -1
  198. package/docs/es/cli/scan.md +5 -1
  199. package/docs/es/cli/standalone.md +5 -1
  200. package/docs/es/cli/test.md +5 -1
  201. package/docs/es/cli/watch.md +5 -1
  202. package/docs/es/compat/i18n-js.md +1 -1
  203. package/docs/es/compat/i18next.md +1 -1
  204. package/docs/es/compat/lingui.md +1 -1
  205. package/docs/es/compat/next-i18next.md +1 -1
  206. package/docs/es/compat/next-intl.md +1 -1
  207. package/docs/es/compat/next-translate.md +1 -1
  208. package/docs/es/compat/ngx-translate.md +1 -1
  209. package/docs/es/compat/nuxtjs-i18n.md +1 -1
  210. package/docs/es/compat/polyglot.md +1 -1
  211. package/docs/es/compat/react-i18next.md +1 -1
  212. package/docs/es/compat/react-intl.md +1 -1
  213. package/docs/es/compat/svelte-i18n.md +1 -1
  214. package/docs/es/compat/transloco.md +1 -1
  215. package/docs/es/compat/vue-i18n.md +1 -1
  216. package/docs/es/intlayer_with_remix_3.md +540 -0
  217. package/docs/fr/benchmark/index.md +4 -1
  218. package/docs/fr/benchmark/nextjs.md +32 -27
  219. package/docs/fr/benchmark/solid.md +13 -10
  220. package/docs/fr/benchmark/svelte.md +12 -9
  221. package/docs/fr/benchmark/tanstack.md +29 -24
  222. package/docs/fr/benchmark/vue.md +11 -7
  223. package/docs/fr/cli/build.md +8 -1
  224. package/docs/fr/cli/configuration.md +3 -1
  225. package/docs/fr/cli/doc-review.md +8 -1
  226. package/docs/fr/cli/doc-translate.md +5 -1
  227. package/docs/fr/cli/extract.md +2 -1
  228. package/docs/fr/cli/fill.md +5 -1
  229. package/docs/fr/cli/index.md +4 -5
  230. package/docs/fr/cli/live.md +5 -1
  231. package/docs/fr/cli/login.md +2 -2
  232. package/docs/fr/cli/pull.md +5 -1
  233. package/docs/fr/cli/push.md +5 -1
  234. package/docs/fr/cli/scan.md +5 -1
  235. package/docs/fr/cli/standalone.md +5 -1
  236. package/docs/fr/cli/test.md +5 -1
  237. package/docs/fr/cli/watch.md +5 -1
  238. package/docs/fr/compat/i18n-js.md +1 -1
  239. package/docs/fr/compat/i18next.md +1 -1
  240. package/docs/fr/compat/lingui.md +1 -1
  241. package/docs/fr/compat/next-i18next.md +1 -1
  242. package/docs/fr/compat/next-intl.md +1 -1
  243. package/docs/fr/compat/next-translate.md +1 -1
  244. package/docs/fr/compat/ngx-translate.md +1 -1
  245. package/docs/fr/compat/nuxtjs-i18n.md +1 -1
  246. package/docs/fr/compat/polyglot.md +1 -1
  247. package/docs/fr/compat/react-i18next.md +1 -1
  248. package/docs/fr/compat/react-intl.md +1 -1
  249. package/docs/fr/compat/svelte-i18n.md +1 -1
  250. package/docs/fr/compat/transloco.md +1 -1
  251. package/docs/fr/compat/vue-i18n.md +1 -1
  252. package/docs/fr/intlayer_with_remix_3.md +540 -0
  253. package/docs/hi/benchmark/index.md +4 -1
  254. package/docs/hi/benchmark/nextjs.md +32 -27
  255. package/docs/hi/benchmark/solid.md +13 -10
  256. package/docs/hi/benchmark/svelte.md +12 -9
  257. package/docs/hi/benchmark/tanstack.md +29 -24
  258. package/docs/hi/benchmark/vue.md +11 -7
  259. package/docs/hi/cli/build.md +8 -1
  260. package/docs/hi/cli/configuration.md +3 -1
  261. package/docs/hi/cli/doc-review.md +8 -1
  262. package/docs/hi/cli/doc-translate.md +5 -1
  263. package/docs/hi/cli/extract.md +2 -1
  264. package/docs/hi/cli/fill.md +5 -1
  265. package/docs/hi/cli/index.md +4 -5
  266. package/docs/hi/cli/live.md +5 -1
  267. package/docs/hi/cli/login.md +2 -2
  268. package/docs/hi/cli/pull.md +5 -1
  269. package/docs/hi/cli/push.md +5 -1
  270. package/docs/hi/cli/scan.md +5 -1
  271. package/docs/hi/cli/standalone.md +5 -1
  272. package/docs/hi/cli/test.md +5 -1
  273. package/docs/hi/cli/watch.md +5 -1
  274. package/docs/hi/compat/i18n-js.md +1 -1
  275. package/docs/hi/compat/i18next.md +1 -1
  276. package/docs/hi/compat/lingui.md +1 -1
  277. package/docs/hi/compat/next-i18next.md +1 -1
  278. package/docs/hi/compat/next-intl.md +1 -1
  279. package/docs/hi/compat/next-translate.md +1 -1
  280. package/docs/hi/compat/ngx-translate.md +1 -1
  281. package/docs/hi/compat/nuxtjs-i18n.md +1 -1
  282. package/docs/hi/compat/polyglot.md +1 -1
  283. package/docs/hi/compat/react-i18next.md +1 -1
  284. package/docs/hi/compat/react-intl.md +1 -1
  285. package/docs/hi/compat/svelte-i18n.md +1 -1
  286. package/docs/hi/compat/transloco.md +1 -1
  287. package/docs/hi/compat/vue-i18n.md +1 -1
  288. package/docs/hi/intlayer_with_remix_3.md +543 -0
  289. package/docs/id/benchmark/index.md +4 -1
  290. package/docs/id/benchmark/nextjs.md +32 -27
  291. package/docs/id/benchmark/solid.md +13 -10
  292. package/docs/id/benchmark/svelte.md +12 -9
  293. package/docs/id/benchmark/tanstack.md +29 -24
  294. package/docs/id/benchmark/vue.md +11 -7
  295. package/docs/id/cli/build.md +8 -1
  296. package/docs/id/cli/configuration.md +3 -1
  297. package/docs/id/cli/doc-review.md +8 -1
  298. package/docs/id/cli/doc-translate.md +5 -1
  299. package/docs/id/cli/extract.md +2 -1
  300. package/docs/id/cli/fill.md +5 -1
  301. package/docs/id/cli/index.md +4 -5
  302. package/docs/id/cli/live.md +5 -1
  303. package/docs/id/cli/login.md +2 -2
  304. package/docs/id/cli/pull.md +5 -1
  305. package/docs/id/cli/push.md +5 -1
  306. package/docs/id/cli/scan.md +5 -1
  307. package/docs/id/cli/standalone.md +5 -1
  308. package/docs/id/cli/test.md +5 -1
  309. package/docs/id/cli/watch.md +5 -1
  310. package/docs/id/compat/i18n-js.md +1 -1
  311. package/docs/id/compat/i18next.md +1 -1
  312. package/docs/id/compat/lingui.md +1 -1
  313. package/docs/id/compat/next-i18next.md +1 -1
  314. package/docs/id/compat/next-intl.md +1 -1
  315. package/docs/id/compat/next-translate.md +1 -1
  316. package/docs/id/compat/ngx-translate.md +1 -1
  317. package/docs/id/compat/nuxtjs-i18n.md +1 -1
  318. package/docs/id/compat/polyglot.md +1 -1
  319. package/docs/id/compat/react-i18next.md +1 -1
  320. package/docs/id/compat/react-intl.md +1 -1
  321. package/docs/id/compat/svelte-i18n.md +1 -1
  322. package/docs/id/compat/transloco.md +1 -1
  323. package/docs/id/compat/vue-i18n.md +1 -1
  324. package/docs/id/intlayer_with_remix_3.md +566 -0
  325. package/docs/it/benchmark/index.md +4 -1
  326. package/docs/it/benchmark/nextjs.md +32 -27
  327. package/docs/it/benchmark/solid.md +13 -10
  328. package/docs/it/benchmark/svelte.md +12 -9
  329. package/docs/it/benchmark/tanstack.md +29 -24
  330. package/docs/it/benchmark/vue.md +11 -7
  331. package/docs/it/cli/build.md +8 -1
  332. package/docs/it/cli/configuration.md +3 -1
  333. package/docs/it/cli/doc-review.md +8 -1
  334. package/docs/it/cli/doc-translate.md +5 -1
  335. package/docs/it/cli/extract.md +2 -1
  336. package/docs/it/cli/fill.md +5 -1
  337. package/docs/it/cli/index.md +4 -5
  338. package/docs/it/cli/live.md +5 -1
  339. package/docs/it/cli/login.md +2 -2
  340. package/docs/it/cli/pull.md +5 -1
  341. package/docs/it/cli/push.md +5 -1
  342. package/docs/it/cli/scan.md +5 -1
  343. package/docs/it/cli/standalone.md +5 -1
  344. package/docs/it/cli/test.md +5 -1
  345. package/docs/it/cli/watch.md +5 -1
  346. package/docs/it/compat/i18n-js.md +1 -1
  347. package/docs/it/compat/i18next.md +1 -1
  348. package/docs/it/compat/lingui.md +1 -1
  349. package/docs/it/compat/next-i18next.md +1 -1
  350. package/docs/it/compat/next-intl.md +1 -1
  351. package/docs/it/compat/next-translate.md +1 -1
  352. package/docs/it/compat/ngx-translate.md +1 -1
  353. package/docs/it/compat/nuxtjs-i18n.md +1 -1
  354. package/docs/it/compat/polyglot.md +1 -1
  355. package/docs/it/compat/react-i18next.md +1 -1
  356. package/docs/it/compat/react-intl.md +1 -1
  357. package/docs/it/compat/svelte-i18n.md +1 -1
  358. package/docs/it/compat/transloco.md +1 -1
  359. package/docs/it/compat/vue-i18n.md +1 -1
  360. package/docs/it/intlayer_with_remix_3.md +558 -0
  361. package/docs/ja/benchmark/index.md +4 -1
  362. package/docs/ja/benchmark/nextjs.md +32 -27
  363. package/docs/ja/benchmark/solid.md +13 -10
  364. package/docs/ja/benchmark/svelte.md +12 -9
  365. package/docs/ja/benchmark/tanstack.md +29 -24
  366. package/docs/ja/benchmark/vue.md +11 -7
  367. package/docs/ja/cli/build.md +8 -1
  368. package/docs/ja/cli/configuration.md +3 -1
  369. package/docs/ja/cli/doc-review.md +8 -1
  370. package/docs/ja/cli/doc-translate.md +5 -1
  371. package/docs/ja/cli/extract.md +2 -1
  372. package/docs/ja/cli/fill.md +5 -1
  373. package/docs/ja/cli/index.md +4 -5
  374. package/docs/ja/cli/live.md +5 -1
  375. package/docs/ja/cli/login.md +2 -2
  376. package/docs/ja/cli/pull.md +5 -1
  377. package/docs/ja/cli/push.md +5 -1
  378. package/docs/ja/cli/scan.md +5 -1
  379. package/docs/ja/cli/standalone.md +5 -1
  380. package/docs/ja/cli/test.md +5 -1
  381. package/docs/ja/cli/watch.md +5 -1
  382. package/docs/ja/compat/i18n-js.md +1 -1
  383. package/docs/ja/compat/i18next.md +1 -1
  384. package/docs/ja/compat/lingui.md +1 -1
  385. package/docs/ja/compat/next-i18next.md +1 -1
  386. package/docs/ja/compat/next-intl.md +1 -1
  387. package/docs/ja/compat/next-translate.md +1 -1
  388. package/docs/ja/compat/ngx-translate.md +1 -1
  389. package/docs/ja/compat/nuxtjs-i18n.md +1 -1
  390. package/docs/ja/compat/polyglot.md +1 -1
  391. package/docs/ja/compat/react-i18next.md +1 -1
  392. package/docs/ja/compat/react-intl.md +1 -1
  393. package/docs/ja/compat/svelte-i18n.md +1 -1
  394. package/docs/ja/compat/transloco.md +1 -1
  395. package/docs/ja/compat/vue-i18n.md +1 -1
  396. package/docs/ja/intlayer_with_remix_3.md +558 -0
  397. package/docs/ko/benchmark/index.md +4 -1
  398. package/docs/ko/benchmark/nextjs.md +32 -27
  399. package/docs/ko/benchmark/solid.md +13 -10
  400. package/docs/ko/benchmark/svelte.md +12 -9
  401. package/docs/ko/benchmark/tanstack.md +29 -24
  402. package/docs/ko/benchmark/vue.md +11 -7
  403. package/docs/ko/cli/build.md +8 -1
  404. package/docs/ko/cli/configuration.md +3 -1
  405. package/docs/ko/cli/doc-review.md +8 -1
  406. package/docs/ko/cli/doc-translate.md +5 -1
  407. package/docs/ko/cli/extract.md +2 -1
  408. package/docs/ko/cli/fill.md +5 -1
  409. package/docs/ko/cli/index.md +4 -5
  410. package/docs/ko/cli/live.md +5 -1
  411. package/docs/ko/cli/login.md +2 -2
  412. package/docs/ko/cli/pull.md +5 -1
  413. package/docs/ko/cli/push.md +5 -1
  414. package/docs/ko/cli/scan.md +5 -1
  415. package/docs/ko/cli/standalone.md +5 -1
  416. package/docs/ko/cli/test.md +5 -1
  417. package/docs/ko/cli/watch.md +5 -1
  418. package/docs/ko/compat/i18n-js.md +1 -1
  419. package/docs/ko/compat/i18next.md +1 -1
  420. package/docs/ko/compat/lingui.md +1 -1
  421. package/docs/ko/compat/next-i18next.md +1 -1
  422. package/docs/ko/compat/next-intl.md +1 -1
  423. package/docs/ko/compat/next-translate.md +1 -1
  424. package/docs/ko/compat/ngx-translate.md +1 -1
  425. package/docs/ko/compat/nuxtjs-i18n.md +1 -1
  426. package/docs/ko/compat/polyglot.md +1 -1
  427. package/docs/ko/compat/react-i18next.md +1 -1
  428. package/docs/ko/compat/react-intl.md +1 -1
  429. package/docs/ko/compat/svelte-i18n.md +1 -1
  430. package/docs/ko/compat/transloco.md +1 -1
  431. package/docs/ko/compat/vue-i18n.md +1 -1
  432. package/docs/ko/intlayer_with_remix_3.md +543 -0
  433. package/docs/nl/cli/index.md +4 -5
  434. package/docs/nl/cli/scan.md +5 -1
  435. package/docs/nl/cli/standalone.md +5 -1
  436. package/docs/pl/benchmark/index.md +4 -1
  437. package/docs/pl/benchmark/nextjs.md +32 -27
  438. package/docs/pl/benchmark/solid.md +13 -10
  439. package/docs/pl/benchmark/svelte.md +12 -9
  440. package/docs/pl/benchmark/tanstack.md +29 -24
  441. package/docs/pl/benchmark/vue.md +11 -7
  442. package/docs/pl/cli/build.md +8 -1
  443. package/docs/pl/cli/configuration.md +3 -1
  444. package/docs/pl/cli/doc-review.md +8 -1
  445. package/docs/pl/cli/doc-translate.md +5 -1
  446. package/docs/pl/cli/extract.md +2 -1
  447. package/docs/pl/cli/fill.md +5 -1
  448. package/docs/pl/cli/index.md +4 -5
  449. package/docs/pl/cli/live.md +5 -1
  450. package/docs/pl/cli/login.md +2 -2
  451. package/docs/pl/cli/pull.md +5 -1
  452. package/docs/pl/cli/push.md +5 -1
  453. package/docs/pl/cli/scan.md +5 -1
  454. package/docs/pl/cli/standalone.md +5 -1
  455. package/docs/pl/cli/test.md +5 -1
  456. package/docs/pl/cli/watch.md +5 -1
  457. package/docs/pl/compat/i18n-js.md +1 -1
  458. package/docs/pl/compat/i18next.md +1 -1
  459. package/docs/pl/compat/lingui.md +1 -1
  460. package/docs/pl/compat/next-i18next.md +1 -1
  461. package/docs/pl/compat/next-intl.md +1 -1
  462. package/docs/pl/compat/next-translate.md +1 -1
  463. package/docs/pl/compat/ngx-translate.md +1 -1
  464. package/docs/pl/compat/nuxtjs-i18n.md +1 -1
  465. package/docs/pl/compat/polyglot.md +1 -1
  466. package/docs/pl/compat/react-i18next.md +1 -1
  467. package/docs/pl/compat/react-intl.md +1 -1
  468. package/docs/pl/compat/svelte-i18n.md +1 -1
  469. package/docs/pl/compat/transloco.md +1 -1
  470. package/docs/pl/compat/vue-i18n.md +1 -1
  471. package/docs/pl/intlayer_with_remix_3.md +551 -0
  472. package/docs/pt/benchmark/index.md +4 -1
  473. package/docs/pt/benchmark/nextjs.md +32 -27
  474. package/docs/pt/benchmark/solid.md +13 -10
  475. package/docs/pt/benchmark/svelte.md +12 -9
  476. package/docs/pt/benchmark/tanstack.md +29 -24
  477. package/docs/pt/benchmark/vue.md +11 -7
  478. package/docs/pt/cli/build.md +8 -1
  479. package/docs/pt/cli/configuration.md +3 -1
  480. package/docs/pt/cli/doc-review.md +8 -1
  481. package/docs/pt/cli/doc-translate.md +5 -1
  482. package/docs/pt/cli/extract.md +2 -1
  483. package/docs/pt/cli/fill.md +5 -1
  484. package/docs/pt/cli/index.md +4 -5
  485. package/docs/pt/cli/live.md +5 -1
  486. package/docs/pt/cli/login.md +2 -2
  487. package/docs/pt/cli/pull.md +5 -1
  488. package/docs/pt/cli/push.md +5 -1
  489. package/docs/pt/cli/scan.md +5 -1
  490. package/docs/pt/cli/standalone.md +5 -1
  491. package/docs/pt/cli/test.md +5 -1
  492. package/docs/pt/cli/watch.md +5 -1
  493. package/docs/pt/compat/i18n-js.md +1 -1
  494. package/docs/pt/compat/i18next.md +1 -1
  495. package/docs/pt/compat/lingui.md +1 -1
  496. package/docs/pt/compat/next-i18next.md +1 -1
  497. package/docs/pt/compat/next-intl.md +1 -1
  498. package/docs/pt/compat/next-translate.md +1 -1
  499. package/docs/pt/compat/ngx-translate.md +1 -1
  500. package/docs/pt/compat/nuxtjs-i18n.md +1 -1
  501. package/docs/pt/compat/polyglot.md +1 -1
  502. package/docs/pt/compat/react-i18next.md +1 -1
  503. package/docs/pt/compat/react-intl.md +1 -1
  504. package/docs/pt/compat/svelte-i18n.md +1 -1
  505. package/docs/pt/compat/transloco.md +1 -1
  506. package/docs/pt/compat/vue-i18n.md +1 -1
  507. package/docs/pt/intlayer_with_remix_3.md +558 -0
  508. package/docs/ru/benchmark/index.md +4 -1
  509. package/docs/ru/benchmark/nextjs.md +32 -27
  510. package/docs/ru/benchmark/solid.md +13 -10
  511. package/docs/ru/benchmark/svelte.md +12 -9
  512. package/docs/ru/benchmark/tanstack.md +29 -24
  513. package/docs/ru/benchmark/vue.md +11 -7
  514. package/docs/ru/cli/build.md +8 -1
  515. package/docs/ru/cli/configuration.md +3 -1
  516. package/docs/ru/cli/doc-review.md +8 -1
  517. package/docs/ru/cli/doc-translate.md +5 -1
  518. package/docs/ru/cli/extract.md +2 -1
  519. package/docs/ru/cli/fill.md +5 -1
  520. package/docs/ru/cli/index.md +4 -5
  521. package/docs/ru/cli/live.md +5 -1
  522. package/docs/ru/cli/login.md +2 -2
  523. package/docs/ru/cli/pull.md +5 -1
  524. package/docs/ru/cli/push.md +5 -1
  525. package/docs/ru/cli/scan.md +5 -1
  526. package/docs/ru/cli/standalone.md +5 -1
  527. package/docs/ru/cli/test.md +5 -1
  528. package/docs/ru/cli/watch.md +5 -1
  529. package/docs/ru/compat/i18n-js.md +1 -1
  530. package/docs/ru/compat/i18next.md +1 -1
  531. package/docs/ru/compat/lingui.md +1 -1
  532. package/docs/ru/compat/next-i18next.md +1 -1
  533. package/docs/ru/compat/next-intl.md +1 -1
  534. package/docs/ru/compat/next-translate.md +1 -1
  535. package/docs/ru/compat/ngx-translate.md +1 -1
  536. package/docs/ru/compat/nuxtjs-i18n.md +1 -1
  537. package/docs/ru/compat/polyglot.md +1 -1
  538. package/docs/ru/compat/react-i18next.md +1 -1
  539. package/docs/ru/compat/react-intl.md +1 -1
  540. package/docs/ru/compat/svelte-i18n.md +1 -1
  541. package/docs/ru/compat/transloco.md +1 -1
  542. package/docs/ru/compat/vue-i18n.md +1 -1
  543. package/docs/ru/intlayer_with_remix_3.md +558 -0
  544. package/docs/tr/benchmark/index.md +4 -1
  545. package/docs/tr/benchmark/nextjs.md +32 -27
  546. package/docs/tr/benchmark/solid.md +13 -10
  547. package/docs/tr/benchmark/svelte.md +12 -9
  548. package/docs/tr/benchmark/tanstack.md +29 -24
  549. package/docs/tr/benchmark/vue.md +11 -7
  550. package/docs/tr/cli/build.md +8 -1
  551. package/docs/tr/cli/configuration.md +3 -1
  552. package/docs/tr/cli/doc-review.md +8 -1
  553. package/docs/tr/cli/doc-translate.md +5 -1
  554. package/docs/tr/cli/extract.md +2 -1
  555. package/docs/tr/cli/fill.md +5 -1
  556. package/docs/tr/cli/index.md +4 -5
  557. package/docs/tr/cli/live.md +5 -1
  558. package/docs/tr/cli/login.md +2 -2
  559. package/docs/tr/cli/pull.md +5 -1
  560. package/docs/tr/cli/push.md +5 -1
  561. package/docs/tr/cli/scan.md +5 -1
  562. package/docs/tr/cli/standalone.md +5 -1
  563. package/docs/tr/cli/test.md +5 -1
  564. package/docs/tr/cli/watch.md +5 -1
  565. package/docs/tr/compat/i18n-js.md +1 -1
  566. package/docs/tr/compat/i18next.md +1 -1
  567. package/docs/tr/compat/lingui.md +1 -1
  568. package/docs/tr/compat/next-i18next.md +1 -1
  569. package/docs/tr/compat/next-intl.md +1 -1
  570. package/docs/tr/compat/next-translate.md +1 -1
  571. package/docs/tr/compat/ngx-translate.md +1 -1
  572. package/docs/tr/compat/nuxtjs-i18n.md +1 -1
  573. package/docs/tr/compat/polyglot.md +1 -1
  574. package/docs/tr/compat/react-i18next.md +1 -1
  575. package/docs/tr/compat/react-intl.md +1 -1
  576. package/docs/tr/compat/svelte-i18n.md +1 -1
  577. package/docs/tr/compat/transloco.md +1 -1
  578. package/docs/tr/compat/vue-i18n.md +1 -1
  579. package/docs/tr/intlayer_with_remix_3.md +566 -0
  580. package/docs/uk/benchmark/index.md +4 -1
  581. package/docs/uk/benchmark/nextjs.md +32 -27
  582. package/docs/uk/benchmark/solid.md +13 -10
  583. package/docs/uk/benchmark/svelte.md +12 -9
  584. package/docs/uk/benchmark/tanstack.md +29 -24
  585. package/docs/uk/benchmark/vue.md +11 -7
  586. package/docs/uk/cli/build.md +8 -1
  587. package/docs/uk/cli/configuration.md +3 -1
  588. package/docs/uk/cli/doc-review.md +8 -1
  589. package/docs/uk/cli/doc-translate.md +5 -1
  590. package/docs/uk/cli/extract.md +2 -1
  591. package/docs/uk/cli/fill.md +5 -1
  592. package/docs/uk/cli/index.md +4 -5
  593. package/docs/uk/cli/live.md +5 -1
  594. package/docs/uk/cli/login.md +2 -2
  595. package/docs/uk/cli/pull.md +5 -1
  596. package/docs/uk/cli/push.md +5 -1
  597. package/docs/uk/cli/scan.md +5 -1
  598. package/docs/uk/cli/standalone.md +5 -1
  599. package/docs/uk/cli/test.md +5 -1
  600. package/docs/uk/cli/watch.md +5 -1
  601. package/docs/uk/compat/i18n-js.md +1 -1
  602. package/docs/uk/compat/i18next.md +1 -1
  603. package/docs/uk/compat/lingui.md +1 -1
  604. package/docs/uk/compat/next-i18next.md +1 -1
  605. package/docs/uk/compat/next-intl.md +1 -1
  606. package/docs/uk/compat/next-translate.md +1 -1
  607. package/docs/uk/compat/ngx-translate.md +1 -1
  608. package/docs/uk/compat/nuxtjs-i18n.md +1 -1
  609. package/docs/uk/compat/polyglot.md +1 -1
  610. package/docs/uk/compat/react-i18next.md +1 -1
  611. package/docs/uk/compat/react-intl.md +1 -1
  612. package/docs/uk/compat/svelte-i18n.md +1 -1
  613. package/docs/uk/compat/transloco.md +1 -1
  614. package/docs/uk/compat/vue-i18n.md +1 -1
  615. package/docs/uk/intlayer_with_remix_3.md +566 -0
  616. package/docs/ur/cli/index.md +4 -5
  617. package/docs/ur/cli/scan.md +5 -1
  618. package/docs/ur/cli/standalone.md +5 -1
  619. package/docs/vi/benchmark/index.md +4 -1
  620. package/docs/vi/benchmark/nextjs.md +32 -27
  621. package/docs/vi/benchmark/solid.md +13 -10
  622. package/docs/vi/benchmark/svelte.md +12 -9
  623. package/docs/vi/benchmark/tanstack.md +29 -24
  624. package/docs/vi/benchmark/vue.md +11 -7
  625. package/docs/vi/cli/build.md +8 -1
  626. package/docs/vi/cli/configuration.md +3 -1
  627. package/docs/vi/cli/doc-review.md +8 -1
  628. package/docs/vi/cli/doc-translate.md +5 -1
  629. package/docs/vi/cli/extract.md +2 -1
  630. package/docs/vi/cli/fill.md +5 -1
  631. package/docs/vi/cli/index.md +4 -5
  632. package/docs/vi/cli/live.md +5 -1
  633. package/docs/vi/cli/login.md +2 -2
  634. package/docs/vi/cli/pull.md +5 -1
  635. package/docs/vi/cli/push.md +5 -1
  636. package/docs/vi/cli/scan.md +5 -1
  637. package/docs/vi/cli/standalone.md +5 -1
  638. package/docs/vi/cli/test.md +5 -1
  639. package/docs/vi/cli/watch.md +5 -1
  640. package/docs/vi/compat/i18n-js.md +1 -1
  641. package/docs/vi/compat/i18next.md +1 -1
  642. package/docs/vi/compat/lingui.md +1 -1
  643. package/docs/vi/compat/next-i18next.md +1 -1
  644. package/docs/vi/compat/next-intl.md +1 -1
  645. package/docs/vi/compat/next-translate.md +1 -1
  646. package/docs/vi/compat/ngx-translate.md +1 -1
  647. package/docs/vi/compat/nuxtjs-i18n.md +1 -1
  648. package/docs/vi/compat/polyglot.md +1 -1
  649. package/docs/vi/compat/react-i18next.md +1 -1
  650. package/docs/vi/compat/react-intl.md +1 -1
  651. package/docs/vi/compat/svelte-i18n.md +1 -1
  652. package/docs/vi/compat/transloco.md +1 -1
  653. package/docs/vi/compat/vue-i18n.md +1 -1
  654. package/docs/vi/intlayer_with_remix_3.md +566 -0
  655. package/docs/zh/benchmark/index.md +4 -1
  656. package/docs/zh/benchmark/nextjs.md +32 -27
  657. package/docs/zh/benchmark/solid.md +13 -10
  658. package/docs/zh/benchmark/svelte.md +12 -9
  659. package/docs/zh/benchmark/tanstack.md +29 -24
  660. package/docs/zh/benchmark/vue.md +11 -7
  661. package/docs/zh/cli/build.md +8 -1
  662. package/docs/zh/cli/configuration.md +3 -1
  663. package/docs/zh/cli/doc-review.md +8 -1
  664. package/docs/zh/cli/doc-translate.md +5 -1
  665. package/docs/zh/cli/extract.md +2 -1
  666. package/docs/zh/cli/fill.md +5 -1
  667. package/docs/zh/cli/index.md +4 -5
  668. package/docs/zh/cli/live.md +5 -1
  669. package/docs/zh/cli/login.md +2 -2
  670. package/docs/zh/cli/pull.md +5 -1
  671. package/docs/zh/cli/push.md +5 -1
  672. package/docs/zh/cli/scan.md +5 -1
  673. package/docs/zh/cli/standalone.md +5 -1
  674. package/docs/zh/cli/test.md +5 -1
  675. package/docs/zh/cli/watch.md +5 -1
  676. package/docs/zh/compat/i18n-js.md +1 -1
  677. package/docs/zh/compat/i18next.md +1 -1
  678. package/docs/zh/compat/lingui.md +1 -1
  679. package/docs/zh/compat/next-i18next.md +1 -1
  680. package/docs/zh/compat/next-intl.md +1 -1
  681. package/docs/zh/compat/next-translate.md +1 -1
  682. package/docs/zh/compat/ngx-translate.md +1 -1
  683. package/docs/zh/compat/nuxtjs-i18n.md +1 -1
  684. package/docs/zh/compat/polyglot.md +1 -1
  685. package/docs/zh/compat/react-i18next.md +1 -1
  686. package/docs/zh/compat/react-intl.md +1 -1
  687. package/docs/zh/compat/svelte-i18n.md +1 -1
  688. package/docs/zh/compat/transloco.md +1 -1
  689. package/docs/zh/compat/vue-i18n.md +1 -1
  690. package/docs/zh/intlayer_with_remix_3.md +558 -0
  691. package/package.json +7 -7
  692. package/src/generated/blog.entry.ts +20 -0
  693. package/src/generated/docs.entry.ts +0 -20
  694. package/docs/ar/cli/ci.md +0 -186
  695. package/docs/de/cli/ci.md +0 -186
  696. package/docs/en/cli/ci.md +0 -216
  697. package/docs/en-GB/cli/ci.md +0 -186
  698. package/docs/es/cli/ci.md +0 -186
  699. package/docs/fr/cli/ci.md +0 -186
  700. package/docs/hi/cli/ci.md +0 -186
  701. package/docs/id/cli/ci.md +0 -186
  702. package/docs/it/cli/ci.md +0 -186
  703. package/docs/ja/cli/ci.md +0 -186
  704. package/docs/ko/cli/ci.md +0 -186
  705. package/docs/pl/cli/ci.md +0 -186
  706. package/docs/pt/cli/ci.md +0 -186
  707. package/docs/ru/cli/ci.md +0 -186
  708. package/docs/tr/cli/ci.md +0 -186
  709. package/docs/uk/cli/ci.md +0 -186
  710. package/docs/vi/cli/ci.md +0 -186
  711. package/docs/zh/cli/ci.md +0 -186
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-04-20
3
- updatedAt: 2026-05-18
3
+ updatedAt: 2026-09-11
4
4
  title: Найкраще i18n рішення для Next.js у 2026 році - Звіт бенчмарку
5
5
  description: Порівняйте бібліотеки інтернаціоналізації (i18n) для Next.js, такі як next-intl, next-i18next та Intlayer. Детальний звіт про продуктивність за розміром бандла, витоком та реактивністю.
6
6
  keywords:
@@ -17,6 +17,9 @@ slugs:
17
17
  author: aymericzip
18
18
  applicationTemplate: https://github.com/intlayer-org/benchmark-i18n
19
19
  history:
20
+ - version: 9.5.1
21
+ date: 2026-09-11
22
+ changes: "Оновлення результатів бенчмарку"
20
23
  - version: 8.9.8
21
24
  date: 2026-05-18
22
25
  changes: "Додати порівняння зірок GitHub"
@@ -56,7 +59,7 @@ style="border:none;"
56
59
 
57
60
  У міру зростання додатку розмір бандла може збільшуватися в геометричній прогресії, що помітно погіршує продуктивність.
58
61
 
59
- Наприклад, у найгірших випадках інтернаціоналізована сторінка може стати майже в 4 рази важчою.
62
+ Наприклад, у найгірших випадках інтернаціоналізована сторінка може стати майже в 2 рази важчою.
60
63
 
61
64
  Інший вплив бібліотек i18n - сповільнення розробки. Перетворення компонентів на багатомовний контент багатьма мовами займає багато часу.
62
65
 
@@ -68,7 +71,7 @@ Intlayer намагається оптимізувати всі ці парам
68
71
 
69
72
  - **Intlayer** та **next-translate**: Найкращі варіанти для продуктивності Next.js, що забезпечують мінімальний розмір та найкращу підтримку статичного рендерингу.
70
73
  - **next-intl**: Найбільш трендовий варіант на сьогодні, проте він важкий і складний в оптимізації для великих додатків.
71
- - **next-i18next**: Популярний та багатий на плагіни, але має значну вагу бандла (~3× Intlayer).
74
+ - **next-i18next**: Популярний та багатий на плагіни, але має значну вагу бандла (~3.5× Intlayer).
72
75
  - **Уникайте**: **gt-next** та **lingo.dev** через серйозні проблеми з продуктивністю, прив'язку до вендора (vendor lock-in) та критичні помилки при збірці.
73
76
 
74
77
  ## Протестуйте свій додаток
@@ -109,19 +112,21 @@ Intlayer намагається оптимізувати всі ці парам
109
112
  Для цього бенчмарку ми порівняли наступні бібліотеки:
110
113
 
111
114
  - `Base App` (Без бібліотеки i18n)
112
- - `next-intlayer` (v8.7.12)
113
- - `next-i18next` (v16.0.5)
114
- - `next-intl` (v4.9.1)
115
- - `@lingui/core` (v5.3.0)
116
- - `next-translate` (v3.1.2)
115
+ - `next-intlayer` (v9.5.1)
116
+ - [`@intlayer/next-intl`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/compat/next-intl.md) (v9.5.1)
117
+ - [`@intlayer/next-i18next`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/compat/next-i18next.md) (v9.5.1)
118
+ - `next-i18next` (v16.3.0)
119
+ - `next-intl` (v4.14.2)
120
+ - `@lingui/core` (v6.6.0)
121
+ - `next-translate` (v3.2.0)
117
122
  - `next-international` (v1.3.1)
118
123
  - `@inlang/paraglide-js` (v2.15.1)
119
- - `@tolgee/react` (v7.0.0)
120
- - `@lingo.dev/compiler` (v0.4.0)
121
- - `wuchale` (v0.22.11)
122
- - `gt-next` (v6.16.5)
124
+ - `@tolgee/react` (v7.2.0)
125
+ - `@lingo.dev/compiler` (v0.4.12)
126
+ - `wuchale` (v0.26.6)
127
+ - `gt-next` (v11.1.24)
123
128
 
124
- Я використовував `Next.js` версії `16.2.4` з App Router.
129
+ Я використовував `Next.js` версії `16.3.4` з App Router.
125
130
 
126
131
  Я побудував багатомовний додаток з **10 сторінками** та **10 мовами**.
127
132
 
@@ -175,15 +180,15 @@ Intlayer намагається оптимізувати всі ці парам
175
180
 
176
181
  Виявлені проблеми:
177
182
 
178
- **(General Translation)** (`gt-next@6.16.5`):
183
+ **(General Translation)** (`gt-next@11.1.24`):
179
184
 
180
- - Для додатку розміром 110 КБ `gt-next` додає понад 440 КБ зайвих даних.
185
+ - Для додатку розміром 141 КБ `gt-next` додає понад 50 КБ зайвих даних.
181
186
  - `Quota Exceeded, please upgrade your plan` вже під час першої збірки.
182
187
  - Переклади не рендериться; отримую помилку `Error: <T> used on the client-side outside of <GTProvider>`, що схоже на баг бібліотеки.
183
188
  - При впровадженні **gt-next** я також стикнувся з [проблемою](https://github.com/generaltranslation/gt/issues/1210#event-24510646961) бібліотеки: помилка `does not provide an export named 'printAST' - @formatjs/icu-messageformat-parser`, через яку додаток падав. Після звіту про помилку розробник виправив її протягом 24 годин.
184
189
  - Бібліотека блокує статичний рендеринг сторінок Next.js.
185
190
 
186
- **(Lingo.dev)** (`@lingo.dev/compiler@0.4.0`):
191
+ **(Lingo.dev)** (`@lingo.dev/compiler@0.4.12`):
187
192
 
188
193
  - Перевищено квоту AI, що повністю блокує збірку - ви не можете випустити продукт у продакшн без оплати.
189
194
  - Компілятор пропустив майже 40% перекладеного контенту. Мені довелося переписувати всі `.map` у плоскі блоки компонентів, щоб це запрацювало.
@@ -192,7 +197,7 @@ Intlayer намагається оптимізувати всі ці парам
192
197
 
193
198
  ### 2 - Експериментальні рішення
194
199
 
195
- **(Wuchale)** (`wuchale@0.22.11`):
200
+ **(Wuchale)** (`wuchale@0.26.6`):
196
201
 
197
202
  Ідея `Wuchale` цікава, але поки не життєздатна. Я зіткнувся з проблемами реактивності та був змушений примусово перерендерити провайдер, щоб додаток запрацював. Документація також досить нечітка, що ускладнює освоєння.
198
203
 
@@ -202,21 +207,21 @@ Intlayer намагається оптимізувати всі ці парам
202
207
  Особисто мені не подобається необхідність регенерувати JS-файли перед кожним пушем, що створює постійний ризик конфліктів під час злиття через PR. Інструмент також здається більш орієнтованим на Vite, ніж на Next.js.
203
208
  Нарешті, порівняно з іншими рішеннями, Paraglide не використовує стор (наприклад, React context) для отримання поточної локалі для рендерингу. Для кожного обробленого вузла він запитує локаль з localStorage / cookie тощо. Це призводить до виконання непотрібної логіки, що впливає на реактивність компонентів.
204
209
 
205
- > Примітка щодо paraglide: це рішення впроваджує код у вашу кодову базу для імпорту, в результаті чого показник 'розмір бібліотеки' у звіті бенчмарку становить майже 0. Генерація коду - це добре, оскільки функція, що використовується, міститиме лише необхідну логіку (повний префікс проти відсутності префікса, кукі проти сховища тощо). Для порівняння, Intlayer виконує цю фільтрацію через впровадження змінних середовища під час збірки, щоб змусити бандлер видалити невикористаний контент (tree-shaking) залежно від логіки. Завдяки цьому paraglide та intlayer виявляються в 6-10 разів легшими рішеннями, ніж i18next або next-intl.
210
+ > Примітка щодо paraglide: це рішення впроваджує код у вашу кодову базу для імпорту, в результаті чого показник 'розмір бібліотеки' у звіті бенчмарку становить майже 0. Генерація коду - це добре, оскільки функція, що використовується, міститиме лише необхідну логіку (повний префікс проти відсутності префікса, кукі проти сховища тощо). Для порівняння, Intlayer виконує цю фільтрацію через впровадження змінних середовища під час збірки, щоб змусити бандлер видалити невикористаний контент (tree-shaking) залежно від логіки. Завдяки цьому paraglide та intlayer виявляються в 3-8 разів легшими рішеннями, ніж i18next або next-intl.
206
211
 
207
212
  ### 3 - Прийнятні рішення
208
213
 
209
- **(Tolgee)** (`@tolgee/react@7.0.0`):
214
+ **(Tolgee)** (`@tolgee/react@7.2.0`):
210
215
 
211
216
  `Tolgee` вирішує багато зі згаданих проблем. Проте його впровадження здалося мені складнішим, ніж у подібних інструментів. Він не забезпечує типізацію (type safety), що ускладнює виявлення відсутніх ключів під час компіляції. Мені довелося обертати функції Tolgee своїми, щоб додати перевірку відсутніх ключів.
212
217
 
213
- **(Next Intl)** (`next-intl@4.9.1`):
218
+ **(Next Intl)** (`next-intl@4.14.2`):
214
219
 
215
- `next-intl` - це зараз найбільш трендовий варіант, який ШІ-агенти просувають найбільше, але на мій погляд, помилково. Почати роботу легко. На практиці ж оптимізація для обмеження витоків є складною. Поєднання динамічного завантаження + просторів імен + типів TypeScript сильно сповільнює розробку. Пакет також досить важкий (~13 КБ для `NextIntlClientProvider` + `useTranslations`, що майже вдвічі більше за `next-intlayer`). **next-intl** раніше блокував статичний рендеринг сторінок Next.js. Він надає хелпер `setRequestLocale()`. Здається, це частково вирішено для централізованих файлів на кшталт `en.json` / `fr.json`, але статичний рендеринг все одно ламається, коли контент розділений на простори імен, як-от `en/shared.json` / `fr/shared.json` / `es/shared.json`.
220
+ `next-intl` - це зараз найбільш трендовий варіант, який ШІ-агенти просувають найбільше, але на мій погляд, помилково. Почати роботу легко. На практиці ж оптимізація для обмеження витоків є складною. Поєднання динамічного завантаження + просторів імен + типів TypeScript сильно сповільнює розробку. Пакет також досить важкий (~14.7 КБ для `NextIntlClientProvider` + `useTranslations`, що більш ніж у 2.5 раза більше за `next-intlayer`). **next-intl** раніше блокував статичний рендеринг сторінок Next.js. Він надає хелпер `setRequestLocale()`. Здається, це частково вирішено для централізованих файлів на кшталт `en.json` / `fr.json`, але статичний рендеринг все одно ламається, коли контент розділений на простори імен, як-от `en/shared.json` / `fr/shared.json` / `es/shared.json`.
216
221
 
217
- **(Next I18next)** (`next-i18next@16.0.5`):
222
+ **(Next I18next)** (`next-i18next@16.3.0`):
218
223
 
219
- `next-i18next` - це, мабуть, найпопулярніший варіант, оскільки він був одним із перших рішень i18n для JS-додатків. Він має багато плагінів від спільноти. Має ті ж основні недоліки, що й `next-intl`. Пакет особливо важкий (~18 КБ для `I18nProvider` + `useTranslation`, приблизно втричі більше за `next-intlayer`).
224
+ `next-i18next` - це, мабуть, найпопулярніший варіант, оскільки він був одним із перших рішень i18n для JS-додатків. Він має багато плагінів від спільноти. Має ті ж основні недоліки, що й `next-intl`. Пакет особливо важкий (~19.7 КБ для `I18nProvider` + `useTranslation`, приблизно у 3.5 раза більше за `next-intlayer`).
220
225
 
221
226
  Формати повідомлень також відрізняються: `next-intl` використовує ICU MessageFormat, тоді як `i18next` використовує власний формат.
222
227
 
@@ -224,17 +229,17 @@ Intlayer намагається оптимізувати всі ці парам
224
229
 
225
230
  `next-international` також намагається вирішити ці проблеми, але не сильно відрізняється від `next-intl` або `next-i18next`. Він включає `scopedT()` для перекладів у межах просторів імен, але це практично не впливає на розмір бандла.
226
231
 
227
- **(Lingui)** (`@lingui/core@5.3.0`):
232
+ **(Lingui)** (`@lingui/core@6.6.0`):
228
233
 
229
234
  `Lingui` часто хвалять. Особисто мені робочий процес із `lingui extract` / `lingui compile` здався складнішим за альтернативи, без явних переваг. Також помічені непослідовні синтаксиси, які плутають ШІ (наприклад, `t()`, `t''`, `i18n.t()`, `<Trans>`).
230
235
 
231
236
  ### 4 - Рекомендації
232
237
 
233
- **(Next Translate)** (`next-translate@3.1.2`):
238
+ **(Next Translate)** (`next-translate@3.2.0`):
234
239
 
235
- `next-translate` - моя основна рекомендація, якщо вам подобається API у стилі `t()`. Він елегантно працює через `next-translate-plugin`, завантажуючи простори імен через `getStaticProps` за допомогою завантажувача Webpack / Turbopack. Це також найлегший варіант у цьому списку (~2.5 КБ). Визначення просторів імен для сторінок або маршрутів у конфігу добре продумане і простіше в підтримці, ніж у **next-intl** чи **next-i18next**. У версії `3.1.2` я помітив, що статичний рендеринг не працював; Next.js переходив до динамічного рендерингу.
240
+ `next-translate` - моя основна рекомендація, якщо вам подобається API у стилі `t()`. Він елегантно працює через `next-translate-plugin`, завантажуючи простори імен через `getStaticProps` за допомогою завантажувача Webpack / Turbopack. Це також один із найлегших варіантів у цьому списку (~3.5 КБ). Визначення просторів імен для сторінок або маршрутів у конфігу добре продумане і простіше в підтримці, ніж у **next-intl** чи **next-i18next**. У версії `3.1.2` я помітив, що статичний рендеринг не працював; Next.js переходив до динамічного рендерингу.
236
241
 
237
- **(Intlayer)** (`next-intlayer@8.7.12`):
242
+ **(Intlayer)** (`next-intlayer@9.5.1`):
238
243
 
239
244
  Я не буду особисто оцінювати `next-intlayer` заради об’єктивності, оскільки це моє власне рішення.
240
245
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-04-20
3
- updatedAt: 2026-05-18
3
+ updatedAt: 2026-09-11
4
4
  title: Найкраще i18n рішення для Solid у 2026 році - Звіт про бенчмарк
5
5
  description: Порівняйте бібліотеки інтернаціоналізації (i18n) для Solid, такі як solid-primitives, solid-i18next та Intlayer. Детальний звіт про продуктивність щодо розміру бандла, витоків та реактивності.
6
6
  keywords:
@@ -17,6 +17,9 @@ slugs:
17
17
  author: aymericzip
18
18
  applicationTemplate: https://github.com/intlayer-org/benchmark-i18n-solid-template
19
19
  history:
20
+ - version: 9.5.1
21
+ date: 2026-09-11
22
+ changes: "Оновлення результатів бенчмарку"
20
23
  - version: 8.9.8
21
24
  date: 2026-05-18
22
25
  changes: "Додати порівняння зірок GitHub"
@@ -62,9 +65,9 @@ style="border:none;"
62
65
 
63
66
  ## TL;DR
64
67
 
65
- - **Intlayer**: Рекомендований вибір для професійних додатків Solid, які потребують розширених функцій та оптимізації (v8.7.12).
68
+ - **Intlayer**: Рекомендований вибір для професійних додатків Solid, які потребують розширених функцій та оптимізації (v9.5.0).
66
69
  - **@solid-primitives/i18n**: Відмінна легка альтернатива для простих проєктів, хоча їй бракує розширених функцій, таких як lazy loading.
67
- - **solid-i18next**: Стандартний, але важкий варіант (~4.7 рази більше за Intlayer) з тими ж недоліками, що і React i18next.
70
+ - **solid-i18next**: Стандартний, але важкий варіант (~3.5 рази більше за Intlayer) з тими ж недоліками, що і React i18next.
68
71
  - **Paraglide**: Інноваційний підхід, але складний DX та проблеми з tree-shaking у деяких конфігураціях.
69
72
 
70
73
  ## Протестуйте свій додаток
@@ -97,10 +100,10 @@ style="border:none;"
97
100
  Для цього бенчмарку ми порівняли наступні бібліотеки:
98
101
 
99
102
  - `Base App` (Без бібліотеки i18n)
100
- - `solid-intlayer` (v8.7.12)
103
+ - `solid-intlayer` (v9.5.0)
101
104
  - `@solid-primitives/i18n` (v2.2.1)
102
- - `solid-i18next` (v17.0.2)
103
- - `@inlang/paraglide-js` (v2.17.0)
105
+ - `i18next` (v26.0.8) + `@mbarzda/solid-i18next` (v1.4.1)
106
+ - `@inlang/paraglide-js` (v2.25.1)
104
107
 
105
108
  Фреймворк - `Solid` з багатомовним додатком із **10 сторінок** і **10 мов**.
106
109
 
@@ -154,11 +157,11 @@ style="border:none;"
154
157
 
155
158
  ### 2 - Прийнятні рішення
156
159
 
157
- **(solid-i18next)** (`solid-i18next@17.0.2`):
160
+ **(solid-i18next)** (`i18next@26.0.8`):
158
161
 
159
162
  `solid-i18next`, ймовірно, є найпопулярнішим варіантом, оскільки він був одним із перших, хто задовольнив потреби i18n у JavaScript-додатках. Він також має широкий набір плагінів спільноти для конкретних проблем.
160
163
 
161
- Пакет важкий (~14.6kb, що приблизно в 4.7 рази більше за `solid-intlayer`).
164
+ Пакет важкий (~14.9kb, що приблизно в 3.5 рази більше за `solid-intlayer`).
162
165
 
163
166
  Тим не менш, він має ті ж основні недоліки, що і стеки, побудовані на `t('a.b.c')`: оптимізація можлива, але забирає багато часу, а великі проєкти ризикують поганими практиками (простори імен + динамічне завантаження + типи).
164
167
 
@@ -167,7 +170,7 @@ style="border:none;"
167
170
  Solid primitive надзвичайно легкий і ефективний. Я рекомендую це рішення для легких проєктів, але в ньому може швидко не вистачити функцій для професійних рішень, що включають управління кукі, перенаправлення проксі, форматери тощо.
168
171
  Йому також не вистачає lazy loading та скоупінгу просторів імен для оптимізації розміру сторінки.
169
172
 
170
- **(Paraglide)** (`@inlang/paraglide-js@2.17.0`):
173
+ **(Paraglide)** (`@inlang/paraglide-js@2.25.1`):
171
174
 
172
175
  `Paraglide` пропонує інноваційний, добре продуманий підхід. Незважаючи на це, у цьому бенчмарку деревоподібне шейкінг (tree-shaking), яке рекламує їхня компанія, не спрацювало для моєї реалізації. Робочий процес і DX також складніші за інші варіанти.
173
176
  Особисто я не прихильник того, щоб перегенерувати файли JS перед кожним пушем, що створює постійний ризик конфліктів при злитті через PR.
@@ -175,7 +178,7 @@ Solid primitive надзвичайно легкий і ефективний. Я
175
178
 
176
179
  ### 3 - Рекомендації
177
180
 
178
- **(Intlayer)** (`solid-intlayer@8.7.12`):
181
+ **(Intlayer)** (`solid-intlayer@9.5.0`):
179
182
 
180
183
  Я не буду особисто оцінювати `solid-intlayer` заради об'єктивності, оскільки це моє власне рішення.
181
184
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-04-20
3
- updatedAt: 2026-05-18
3
+ updatedAt: 2026-09-11
4
4
  title: Найкраще i18n рішення для Svelte у 2026 році - Звіт про бенчмарк
5
5
  description: Порівняйте бібліотеки інтернаціоналізації (i18n) для Svelte, такі як svelte-i18n, Paraglide та Intlayer. Детальний звіт про продуктивність щодо розміру бандла, витоків та реактивності.
6
6
  keywords:
@@ -17,6 +17,9 @@ slugs:
17
17
  author: aymericzip
18
18
  applicationTemplate: https://github.com/intlayer-org/benchmark-i18n-svelte-template
19
19
  history:
20
+ - version: 9.5.1
21
+ date: 2026-09-11
22
+ changes: "Оновлення результатів бенчмарку"
20
23
  - version: 8.9.8
21
24
  date: 2026-05-18
22
25
  changes: "Додати порівняння зірок GitHub"
@@ -62,9 +65,9 @@ style="border:none;"
62
65
 
63
66
  ## TL;DR
64
67
 
65
- - **Intlayer**: Найефективніший за продуктивністю вибір (v8.7.12) з найменшим слідом (footprint).
68
+ - **Intlayer**: Найефективніший за продуктивністю вибір (v9.5.0) з найменшим слідом (footprint).
66
69
  - **Paraglide**: Сильний претендент для tree-shaking, але має складніший досвід розробника та накладні витрати на реактивність.
67
- - **svelte-i18n**: Комплексний та стандартний для Svelte, але несе значно більшу вагу бандла (~7 разів більше за Intlayer).
70
+ - **svelte-i18n**: Комплексний та стандартний для Svelte, але несе значно більшу вагу бандла (~4.5 разів більше за Intlayer).
68
71
 
69
72
  ## Протестуйте свій додаток
70
73
 
@@ -96,9 +99,9 @@ style="border:none;"
96
99
  Для цього бенчмарку ми порівняли наступні бібліотеки:
97
100
 
98
101
  - `Base App` (Без бібліотеки i18n)
99
- - `svelte-intlayer` (v8.7.12)
102
+ - `svelte-intlayer` (v9.5.0)
100
103
  - `svelte-i18n` (v4.0.1)
101
- - `@inlang/paraglide-js` (v2.17.0)
104
+ - `@inlang/paraglide-js` (v2.25.1)
102
105
 
103
106
  Фреймворк - `Svelte` з багатомовним додатком із **10 сторінок** і **10 мов**.
104
107
 
@@ -152,7 +155,7 @@ style="border:none;"
152
155
 
153
156
  ### 2 - Прийнятні рішення
154
157
 
155
- **(Paraglide)** (`@inlang/paraglide-js@2.17.0`):
158
+ **(Paraglide)** (`@inlang/paraglide-js@2.25.1`):
156
159
 
157
160
  `Paraglide` пропонує інноваційний, добре продуманий підхід. У контексті додатка Vite + Svelte деревоподібне шейкінг (tree-shaking), яке рекламує їхня компанія, працювало як очікувалося, і це чудово.
158
161
  Але у випадку React + TanStack Start tree-shaking не спрацював як очікувалося, те саме для Next.js. Тим не менш, використання Paraglide у проєкті Svelte та TanStack Start варто було б перевірити ще раз.
@@ -162,13 +165,13 @@ style="border:none;"
162
165
 
163
166
  > Примітка щодо paraglide: рішення впорскує код у вашу кодову базу для імпорту; як результат, метрика 'lib size' у звіті бенчмарку становить майже 0. Генерація коду - це добре, тому що використана функція включатиме лише необхідну логіку (префікс скрізь проти відсутності префікса, кукі проти сховища тощо). Для порівняння, Intlayer виконує цю фільтрацію за допомогою впорскування змінних оточення під час збірки, щоб змусити бандлер виконувати tree-shaking контенту залежно від логіки. Завдяки цьому paraglide та intlayer стають у 6–10 разів легшими рішеннями, ніж i18next або next-intl.
164
167
 
165
- **(svelte-i18n)** (`svelte-i18n@3.4.0`):
168
+ **(svelte-i18n)** (`svelte-i18n@4.0.1`):
166
169
 
167
- Це рішення задовольняє всі потреби i18n у проєкті Svelte. Але як і у випадку з i18next або іншими великими i18n рішеннями, воно трохи важке (~15.9kb, що приблизно в 7 разів більше за `svelte-intlayer`).
170
+ Це рішення задовольняє всі потреби i18n у проєкті Svelte. Але як і у випадку з i18next або іншими великими i18n рішеннями, воно трохи важке (~16.6kb, що приблизно в 4.5 разів більше за `svelte-intlayer`).
168
171
 
169
172
  ### 3 - Рекомендації
170
173
 
171
- **(Intlayer)** (`svelte-intlayer@8.7.12`):
174
+ **(Intlayer)** (`svelte-intlayer@9.5.0`):
172
175
 
173
176
  Я не буду особисто оцінювати `svelte-intlayer` заради об'єктивності, оскільки це моє власне рішення.
174
177
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-04-20
3
- updatedAt: 2026-05-18
3
+ updatedAt: 2026-09-11
4
4
  title: Найкраще i18n рішення для TanStack Start у 2026 році - Звіт бенчмарку
5
5
  description: Порівняйте бібліотеки інтернаціоналізації для TanStack Start, такі як react-i18next, use-intl та Intlayer. Детальний звіт про продуктивність за розміром бандла, витоком та реактивністю.
6
6
  keywords:
@@ -17,6 +17,9 @@ slugs:
17
17
  author: aymericzip
18
18
  applicationTemplate: https://github.com/intlayer-org/benchmark-i18n-tanstack-start-template
19
19
  history:
20
+ - version: 9.5.1
21
+ date: 2026-09-11
22
+ changes: "Оновлення результатів бенчмарку"
20
23
  - version: 8.9.8
21
24
  date: 2026-05-18
22
25
  changes: "Додати порівняння зірок GitHub"
@@ -62,7 +65,7 @@ history:
62
65
 
63
66
  ## TL;DR
64
67
 
65
- - **Intlayer**: Забезпечує найкращу продуктивність і найменший розмір бандла (v8.7.12) для TanStack Start.
68
+ - **Intlayer**: Забезпечує найкращу продуктивність і найменший розмір бандла (v9.5.1) для TanStack Start.
66
69
  - **react-i18next** та **use-intl**: Зрілі альтернативи з великими екосистемами, але значно важчі та складніші в оптимізації.
67
70
  - **Paraglide**: Інноваційна ідея tree-shaking, яка не працює на практиці. Складний DX та накладні витрати реактивності в TanStack Start.
68
71
  - **Уникайте**: **General Translation (GT)** та **Lingo.dev** через серйозні проблеми з продуктивністю, ліміти ШІ та прив'язку до вендора (vendor lock-in).
@@ -97,16 +100,18 @@ history:
97
100
  Для цього бенчмарку ми порівняли наступні бібліотеки:
98
101
 
99
102
  - `Base App` (Без бібліотеки i18n)
100
- - `react-intlayer` (v8.7.12)
101
- - `react-i18next` (v17.0.2)
102
- - `use-intl` (v4.9.1)
103
- - `@lingui/core` (v5.3.0)
103
+ - `react-intlayer` (v9.5.1)
104
+ - `@intlayer/use-intl` (v9.5.1)
105
+ - [`@intlayer/lingui`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/compat/lingui.md) (v9.5.1)
106
+ - `react-i18next` (v17.0.13)
107
+ - `use-intl` (v4.14.2)
108
+ - `@lingui/core` (v6.6.0)
104
109
  - `@inlang/paraglide-js` (v2.15.1)
105
- - `@tolgee/react` (v7.0.0)
106
- - `react-intl` (v10.1.1)
107
- - `wuchale` (v0.22.11)
108
- - `gt-react` (vlatest)
109
- - `lingo.dev` (v0.133.9)
110
+ - `@tolgee/react` (v7.2.0)
111
+ - `react-intl` (v10.1.26)
112
+ - `wuchale` (v0.26.6)
113
+ - `gt-react` (v10.18.3)
114
+ - `lingo.dev` (v0.138.7)
110
115
 
111
116
  Фреймворк - `TanStack Start` з багатомовним додатком на **10 сторінок** та **10 мов**.
112
117
 
@@ -160,15 +165,15 @@ history:
160
165
 
161
166
  Виявлені проблеми:
162
167
 
163
- **(General Translation)** (`gt-react@latest`):
168
+ **(General Translation)** (`gt-react@10.18.3`):
164
169
 
165
- - Для додатку розміром близько 110 КБ `gt-react` може додати понад 440 КБ зайвих даних (порядок величини зафіксовано в реалізації Next.js у тому ж бенчмарку).
170
+ - Для додатку розміром близько 111 КБ `gt-react` може додати понад 170 КБ зайвих даних (порядок величини зафіксовано в реалізації Next.js у тому ж бенчмарку).
166
171
  - `Quota Exceeded, please upgrade your plan` вже під час першої збірки.
167
172
  - Переклади не рендериться; отримую помилку `Error: <T> used on the client-side outside of <GTProvider>`, що схоже на баг бібліотеки.
168
173
  - При впровадженні **gt-tanstack-start-react** я також стикнувся з [проблемою](https://github.com/generaltranslation/gt/issues/1210#event-24510646961) бібліотеки: помилка `does not provide an export named 'printAST' - @formatjs/icu-messageformat-parser`, через яку додаток падав. Після звіту про помилку розробник виправив її протягом 24 годин.
169
174
  - Ці бібліотеки використовують антипатерн через функцію `initializeGT()`, що заважає чистому видаленню невикористаного коду (tree-shaking) бандла.
170
175
 
171
- **(Lingo.dev)** (`lingo.dev@0.133.9`):
176
+ **(Lingo.dev)** (`lingo.dev@0.138.7`):
172
177
 
173
178
  - Перевищено квоту AI (або блокування серверної залежності), що робить збірку / продакшн ризикованим без оплати.
174
179
  - Компілятор пропустив майже 40% перекладеного контенту. Мені довелося переписувати всі `.map` у плоскі блоки компонентів, щоб це запрацювало.
@@ -178,7 +183,7 @@ history:
178
183
 
179
184
  ### 2 - Експериментальні рішення
180
185
 
181
- **(Wuchale)** (`wuchale@0.22.11`):
186
+ **(Wuchale)** (`wuchale@0.26.6`):
182
187
 
183
188
  Ідея `Wuchale` цікава, але поки що не є життєздатним рішенням. Я зіткнувся з проблемами реактивності бібліотеки і був змушений примусово перерендерити провайдер, щоб додаток запрацював на TanStack Start. Документація також досить нечітка, що ускладнює освоєння.
184
189
 
@@ -188,9 +193,9 @@ history:
188
193
 
189
194
  `Paraglide` пропонує інноваційний, добре продуманий підхід. Проте в цьому тесті рекламований компанією tree-shaking не спрацював ні для моєї реалізації на Next.js, ні для TanStack Start. Робочий процес і DX також складніші за інші варіанти. Особисто я не прихильник необхідності регенерувати JS-файли перед кожним пушем, що створює постійний ризик конфліктів під час злиття для розробників через PR.
190
195
 
191
- > Примітка щодо paraglide: це рішення впорскує код у вашу кодову базу для імпорту; як наслідок, метрика 'lib size' у звіті бенчмарку становить майже 0. Генерація коду - це добре, оскільки використовувана функція включатиме лише необхідну логіку (префікс усюди проти відсутності префікса, куки проти сховища тощо). Для порівняння, Intlayer виконує це фільтрування за допомогою впорскування змінних оточення в збірку, щоб змусити бандлер виконати tree-shake контенту залежно від логіки. Завдяки цьому paraglide та intlayer врешті-решт стають у 6–10 разів легшими рішеннями, ніж i18next або next-intl.
196
+ > Примітка щодо paraglide: це рішення впорскує код у вашу кодову базу для імпорту; як наслідок, метрика 'lib size' у звіті бенчмарку становить майже 0. Генерація коду - це добре, оскільки використовувана функція включатиме лише необхідну логіку (префікс усюди проти відсутності префікса, куки проти сховища тощо). Для порівняння, Intlayer виконує це фільтрування за допомогою впорскування змінних оточення в збірку, щоб змусити бандлер виконати tree-shake контенту залежно від логіки. Завдяки цьому paraglide та intlayer врешті-решт стають у 3–10 разів легшими рішеннями, ніж i18next або next-intl.
192
197
 
193
- **(Tolgee)** (`@tolgee/react@7.0.0`):
198
+ **(Tolgee)** (`@tolgee/react@7.2.0`):
194
199
 
195
200
  `Tolgee` вирішує багато зі згаданих проблем. Проте почати роботу з ним здалося мені важче, ніж з іншими інструментами з подібними підходами. Він не забезпечує типізацію, що значно ускладнює виявлення відсутніх ключів під час компіляції. Мені довелося обертати Tolgee API своїми рішеннями, щоб додати перевірку відсутніх ключів.
196
201
 
@@ -198,37 +203,37 @@ history:
198
203
 
199
204
  На TanStack Start я також мав проблеми з реактивністю: при зміні локалі довелося примусово перерендерити провайдер і підписуватися на події зміни локалі, щоб завантаження іншою мовою працювало коректно.
200
205
 
201
- **(use-intl)** (`use-intl@4.9.1`):
206
+ **(use-intl)** (`use-intl@4.14.2`):
202
207
 
203
208
  `use-intl` - це зараз наймодніша частина "intl" в екосистемі React (та ж родина, що й `next-intl`), яку часто просувають ШІ-агенти, але на мій погляд - помилково в контексті продуктивності. Почати роботу досить просто. На практиці ж процес оптимізації та обмеження витоків є досить складним. Аналогічно, поєднання динамічного завантаження + просторів імен + типів TypeScript сильно сповільнює розробку.
204
209
 
205
210
  У TanStack Start ви уникаєте специфічних пасток Next.js (`setRequestLocale`, статичний рендеринг), але основна проблема та ж сама: без суворої дисципліни бандл швидко перевантажується повідомленнями, а підтримка просторів імен для кожного маршруту стає виснажливою.
206
211
 
207
- **(react-i18next)** (`react-i18next@17.0.2`):
212
+ **(react-i18next)** (`react-i18next@17.0.13`):
208
213
 
209
214
  `react-i18next` - це, мабуть, найпопулярніший варіант, оскільки він був одним із перших, хто задовольнив потреби i18n у JS-додатках. Він також має великий набір плагінів від спільноти для конкретних проблем.
210
215
 
211
216
  Проте він має ті ж недоліки, що й стеки на базі `t('a.b.c')`: оптимізація можлива, але забирає багато часу, а великі проекти ризикують скотитися до поганих практик (простори імен + динамічне завантаження + типи).
212
217
 
213
- Пакет особливо важкий (~17.3kb, що становить близько 3.5× `react-intlayer`).
218
+ Пакет особливо важкий (~18.4kb, що становить близько 3.5× `react-intlayer`).
214
219
 
215
220
  Формати повідомлень також відрізняються: `use-intl` використовує ICU MessageFormat, тоді як `i18next` має власний формат - це ускладнює інструментарій або міграцію, якщо ви їх змішуєте.
216
221
 
217
- **(Lingui)** (`@lingui/core@5.3.0`):
222
+ **(Lingui)** (`@lingui/core@6.6.0`):
218
223
 
219
224
  `Lingui` часто хвалять. Особисто мені робочий процес із `lingui extract` / `lingui compile` здався складнішим за інші підходи, без явних переваг у цьому тесті TanStack Start. Також помічені непослідовні синтаксиси, які плутають ШІ (наприклад, `t()`, `t''`, `i18n.t()`, `<Trans>`).
220
225
 
221
- **(react-intl)** (`react-intl@10.1.1`):
226
+ **(react-intl)** (`react-intl@10.1.26`):
222
227
 
223
228
  `react-intl` - це продуктивна реалізація від команди Format.js. DX залишається багатослівним: `const intl = useIntl()` + `intl.formatMessage({ id: "xx.xx" })` додає складності, додаткової роботи JavaScript та прив'язує глобальний екземпляр i18n до багатьох вузлів у React-дереві.
224
229
 
225
- Пакет також важкий (~14.4kb, що становить близько 3× `react-intlayer`).
230
+ Пакет також важкий (~15.3kb, що становить близько 3× `react-intlayer`).
226
231
 
227
232
  ### 4 - Рекомендації
228
233
 
229
234
  Цей бенчмарк TanStack Start не має прямого еквівалента `next-translate` (Next.js плагін + `getStaticProps`). Командам, які справді хочуть API у стилі `t()` зі зрілою екосистемою, `react-i18next` та `use-intl` залишаються "розумним" вибором, але будьте готові витратити багато часу на оптимізацію для уникнення витоків.
230
235
 
231
- **(Intlayer)** (`react-intlayer@8.7.12`):
236
+ **(Intlayer)** (`react-intlayer@9.5.1`):
232
237
 
233
238
  Я не буду особисто оцінювати `react-intlayer` заради об’єктивності, оскільки це моє власне рішення.
234
239
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-04-20
3
- updatedAt: 2026-05-18
3
+ updatedAt: 2026-09-11
4
4
  title: Найкраще i18n рішення для Vue у 2026 році - Звіт про бенчмарк
5
5
  description: Порівняйте бібліотеки інтернаціоналізації (i18n) для Vue, такі як vue-i18n, fluent-vue та Intlayer. Детальний звіт про продуктивність щодо розміру бандла, витоків та реактивності.
6
6
  keywords:
@@ -17,6 +17,9 @@ slugs:
17
17
  author: aymericzip
18
18
  applicationTemplate: https://github.com/intlayer-org/benchmark-i18n-vue-template
19
19
  history:
20
+ - version: 9.5.1
21
+ date: 2026-09-11
22
+ changes: "Оновлення результатів бенчмарку"
20
23
  - version: 8.9.8
21
24
  date: 2026-05-18
22
25
  changes: "Додати порівняння зірок GitHub"
@@ -62,7 +65,7 @@ style="border:none;"
62
65
 
63
66
  ## TL;DR
64
67
 
65
- - **Intlayer**: Найлегше рішення (v8.7.12) з нативним скоупінгом (scoping) та динамічним завантаженням.
68
+ - **Intlayer**: Найлегше рішення (v9.5.0) з нативним скоупінгом (scoping) та динамічним завантаженням.
66
69
  - **vue-i18n**: Галузевий стандарт з багатою екосистемою, але може стати значно важчим і важчим для оптимізації під code-splitting у великих додатках.
67
70
  - **fluent-vue**: Інноваційна організація повідомлень, але не вистачає безпеки типів (type-safety) і виявляється надзвичайно важким рішенням.
68
71
 
@@ -96,7 +99,8 @@ style="border:none;"
96
99
  Для цього бенчмарку ми порівняли наступні бібліотеки:
97
100
 
98
101
  - `Base App` (Без бібліотеки i18n)
99
- - `vue-intlayer` (v8.7.12)
102
+ - `vue-intlayer` (v9.5.0)
103
+ - [`@intlayer/vue-i18n`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/compat/vue-i18n.md) (v9.5.1)
100
104
  - `vue-i18n` (v11.4.0)
101
105
  - `fluent-vue` (v3.8.2)
102
106
 
@@ -156,14 +160,14 @@ style="border:none;"
156
160
 
157
161
  - **vue-i18n** безперечно є найбільш використовуваною бібліотекою i18n для Vue, вона має багато функцій і величезну екосистему. Але "під капотом" рішення досить важке. Навіть якщо vue-i18n інтегрує lazy loading для повідомлень, у ній відсутня функція скоупінгу (scoping). У випадку класичного Vue SPA додатка проблем немає, але для nuxt додатка, що використовує @nuxt/i18n, це призводить до включення повідомлень з усіх сторінок в одну. Для великого nuxt додатка з понад 10 сторінками це може стати справді проблематичним.
158
162
 
159
- Пакет дуже важкий (~24.3kb, що приблизно в 9 разів більше за `vue-intlayer`).
163
+ Пакет дуже важкий (~24.3kb, що приблизно в 6 разів більше за `vue-intlayer`).
160
164
 
161
- **(fluent-vue)** (`fluent-vue@0.5.0`):
165
+ **(fluent-vue)** (`fluent-vue@3.8.2`):
162
166
 
163
- - **fluent-vue** пропонує спробу інновації через формат .ftl. Організація повідомлень чудова, легше почати роботу. Але на практиці відсутність безпеки типів підвищує ризик помилок і налагодження може швидко стати трудомістким. Більше того, це рішення завантажує повідомлення за допомогою плагіна vite, який змушує завантажувати весь контент усіма мовами на кожну сторінку. Крім того, це надзвичайно важке рішення (~92.7kb, що приблизно в 34 рази більше за `vue-intlayer`).
167
+ - **fluent-vue** пропонує спробу інновації через формат .ftl. Організація повідомлень чудова, легше почати роботу. Але на практиці відсутність безпеки типів підвищує ризик помилок і налагодження може швидко стати трудомістким. Більше того, це рішення завантажує повідомлення за допомогою плагіна vite, який змушує завантажувати весь контент усіма мовами на кожну сторінку. Крім того, це надзвичайно важке рішення (~29.7kb, що приблизно в 7.5 рази більше за `vue-intlayer`).
164
168
 
165
169
  ### 3 - Рекомендації
166
170
 
167
- **(Intlayer)** (`vue-intlayer@8.7.12`):
171
+ **(Intlayer)** (`vue-intlayer@9.5.0`):
168
172
 
169
173
  Я не буду особисто оцінювати `vue-intlayer` заради об'єктивності, оскільки це моє власне рішення.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2024-08-11
3
- updatedAt: 2025-11-22
3
+ updatedAt: 2026-09-12
4
4
  title: Побудова словників
5
5
  description: Дізнайтеся, як побудувати словники Intlayer зі файлів декларації контенту.
6
6
  keywords:
@@ -14,6 +14,9 @@ slugs:
14
14
  - cli
15
15
  - build
16
16
  history:
17
+ - version: 9.5.2
18
+ date: 2026-09-12
19
+ changes: "Додано прапорець `--ci`"
17
20
  - version: 8.1.5
18
21
  date: 2026-02-23
19
22
  changes: "Додати опцію checkTypes"
@@ -92,6 +95,10 @@ bun x intlayer build --watch
92
95
 
93
96
  > Приклад: `npx intlayer build --no-cache`
94
97
 
98
+ - **`--ci`**: Виконує команду в кожному проєкті Intlayer монорепозиторію (або лише в поточному при запуску з директорії проєкту). Облікові дані для кожного проєкту можна підставити через `INTLAYER_PROJECT_CREDENTIALS` — JSON-об'єкт, що зіставляє шлях проєкту з `{ "clientId", "clientSecret" }`.
99
+
100
+ > Приклад: `npx intlayer build --ci`
101
+
95
102
  - **`--check-types`**: Перевіряє типи файлів оголошення контенту.
96
103
 
97
104
  > Приклад: `npx intlayer build --check-types`
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2024-08-11
3
- updatedAt: 2025-11-22
3
+ updatedAt: 2026-09-12
4
4
  title: Керування конфігурацією
5
5
  description: Дізнайтеся, як отримувати та завантажувати вашу конфігурацію Intlayer у CMS.
6
6
  keywords:
@@ -51,6 +51,7 @@ bun x intlayer configuration get
51
51
  - **`--base-dir`**: Вказати базовий каталог проекту.
52
52
  - **`--verbose`**: Увімкнути детальне логування для відлагодження. (за замовчуванням true при використанні CLI)
53
53
  - **`--no-cache`**: Вимкнути кеш.
54
+ - **`--ci`**: Виконує команду в кожному проєкті Intlayer монорепозиторію (або лише в поточному при запуску з директорії проєкту). Облікові дані для кожного проєкту можна підставити через `INTLAYER_PROJECT_CREDENTIALS` — JSON-об'єкт, що зіставляє шлях проєкту з `{ "clientId", "clientSecret" }`.
54
55
 
55
56
  ## Надіслати конфігурацію
56
57
 
@@ -84,5 +85,6 @@ bun x intlayer configuration push
84
85
  - **`--base-dir`**: Вказати базовий каталог проекту.
85
86
  - **`--verbose`**: Увімкнути детальне логування для налагодження. (за замовчуванням true при використанні CLI)
86
87
  - **`--no-cache`**: Вимкнути кеш.
88
+ - **`--ci`**: Виконує команду в кожному проєкті Intlayer монорепозиторію (або лише в поточному при запуску з директорії проєкту). Облікові дані для кожного проєкту можна підставити через `INTLAYER_PROJECT_CREDENTIALS` — JSON-об'єкт, що зіставляє шлях проєкту з `{ "clientId", "clientSecret" }`.
87
89
 
88
90
  Після пушу конфігурації ваш проєкт повністю інтегрується з Intlayer CMS, що дозволяє безшовне керування словниками між командами.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2024-08-11
3
- updatedAt: 2026-06-17
3
+ updatedAt: 2026-09-12
4
4
  title: Перевірка документа
5
5
  description: Дізнайтеся, як перевіряти файли документації на предмет якості, узгодженості та повноти для різних локалей.
6
6
  keywords:
@@ -16,6 +16,9 @@ slugs:
16
16
  - cli
17
17
  - doc-review
18
18
  history:
19
+ - version: 9.5.2
20
+ date: 2026-09-12
21
+ changes: "Додано прапорець `--ci`"
19
22
  - version: 9.0.0
20
23
  date: 2026-06-17
21
24
  changes: "Додати опцію --log"
@@ -138,6 +141,10 @@ bun x intlayer doc review
138
141
 
139
142
  > Приклад: `npx intlayer doc review --base-dir ./docs --env-file .env.production.local`
140
143
 
144
+ - **`--ci`**: Виконує команду в кожному проєкті Intlayer монорепозиторію (або лише в поточному при запуску з директорії проєкту). Облікові дані для кожного проєкту можна підставити через `INTLAYER_PROJECT_CREDENTIALS` — JSON-об'єкт, що зіставляє шлях проєкту з `{ "clientId", "clientSecret" }`.
145
+
146
+ > Приклад: `npx intlayer doc review --ci`
147
+
141
148
  **Параметри логування:**
142
149
 
143
150
  - **`--verbose`**: Увімкнути детальне логування для налагодження. (за замовчуванням true при використанні CLI)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2024-08-11
3
- updatedAt: 2025-11-22
3
+ updatedAt: 2026-09-12
4
4
  title: Переклад документа
5
5
  description: Дізнайтеся, як автоматично перекладати файли документації за допомогою AI-сервісів перекладу.
6
6
  keywords:
@@ -113,6 +113,10 @@ bun x intlayer doc translate
113
113
 
114
114
  > Приклад: `npx intlayer doc translate --base-dir ./docs --env-file .env.production.local`
115
115
 
116
+ - **`--ci`**: Виконує команду в кожному проєкті Intlayer монорепозиторію (або лише в поточному при запуску з директорії проєкту). Облікові дані для кожного проєкту можна підставити через `INTLAYER_PROJECT_CREDENTIALS` — JSON-об'єкт, що зіставляє шлях проєкту з `{ "clientId", "clientSecret" }`.
117
+
118
+ > Приклад: `npx intlayer doc translate --ci`
119
+
116
120
  **Параметри логування:**
117
121
 
118
122
  - **`--verbose`**: Увімкнути детальне логування для налагодження. (за замовчуванням true при використанні CLI)