@intlayer/docs 9.5.0 → 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 (745) 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 +20 -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 +20 -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 +1 -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_nextjs_15.md +1 -1
  67. package/docs/ar/intlayer_with_nextjs_16.md +1 -1
  68. package/docs/ar/intlayer_with_remix_3.md +543 -0
  69. package/docs/bn/cli/index.md +4 -5
  70. package/docs/bn/cli/scan.md +5 -1
  71. package/docs/bn/cli/standalone.md +5 -1
  72. package/docs/cs/cli/index.md +4 -5
  73. package/docs/cs/cli/scan.md +5 -1
  74. package/docs/cs/cli/standalone.md +5 -1
  75. package/docs/de/benchmark/index.md +4 -1
  76. package/docs/de/benchmark/nextjs.md +32 -27
  77. package/docs/de/benchmark/solid.md +13 -10
  78. package/docs/de/benchmark/svelte.md +12 -9
  79. package/docs/de/benchmark/tanstack.md +29 -24
  80. package/docs/de/benchmark/vue.md +11 -7
  81. package/docs/de/cli/build.md +8 -1
  82. package/docs/de/cli/configuration.md +3 -1
  83. package/docs/de/cli/doc-review.md +8 -1
  84. package/docs/de/cli/doc-translate.md +5 -1
  85. package/docs/de/cli/extract.md +2 -1
  86. package/docs/de/cli/fill.md +5 -1
  87. package/docs/de/cli/index.md +4 -5
  88. package/docs/de/cli/live.md +5 -1
  89. package/docs/de/cli/login.md +2 -2
  90. package/docs/de/cli/pull.md +5 -1
  91. package/docs/de/cli/push.md +5 -1
  92. package/docs/de/cli/scan.md +5 -1
  93. package/docs/de/cli/standalone.md +5 -1
  94. package/docs/de/cli/test.md +5 -1
  95. package/docs/de/cli/watch.md +5 -1
  96. package/docs/de/compat/i18n-js.md +1 -1
  97. package/docs/de/compat/i18next.md +1 -1
  98. package/docs/de/compat/lingui.md +1 -1
  99. package/docs/de/compat/next-i18next.md +1 -1
  100. package/docs/de/compat/next-intl.md +1 -1
  101. package/docs/de/compat/next-translate.md +1 -1
  102. package/docs/de/compat/ngx-translate.md +1 -1
  103. package/docs/de/compat/nuxtjs-i18n.md +1 -1
  104. package/docs/de/compat/polyglot.md +1 -1
  105. package/docs/de/compat/react-i18next.md +1 -1
  106. package/docs/de/compat/react-intl.md +1 -1
  107. package/docs/de/compat/svelte-i18n.md +1 -1
  108. package/docs/de/compat/transloco.md +1 -1
  109. package/docs/de/compat/vue-i18n.md +1 -1
  110. package/docs/de/intlayer_with_nextjs_15.md +1 -1
  111. package/docs/de/intlayer_with_nextjs_16.md +1 -1
  112. package/docs/de/intlayer_with_remix_3.md +543 -0
  113. package/docs/en/benchmark/index.md +4 -1
  114. package/docs/en/benchmark/nextjs.md +32 -27
  115. package/docs/en/benchmark/solid.md +13 -10
  116. package/docs/en/benchmark/svelte.md +12 -9
  117. package/docs/en/benchmark/tanstack.md +30 -25
  118. package/docs/en/benchmark/vue.md +11 -7
  119. package/docs/en/cli/build.md +8 -1
  120. package/docs/en/cli/configuration.md +3 -1
  121. package/docs/en/cli/doc-review.md +8 -1
  122. package/docs/en/cli/doc-translate.md +5 -1
  123. package/docs/en/cli/extract.md +2 -1
  124. package/docs/en/cli/fill.md +5 -1
  125. package/docs/en/cli/index.md +4 -5
  126. package/docs/en/cli/live.md +5 -1
  127. package/docs/en/cli/login.md +2 -2
  128. package/docs/en/cli/pull.md +5 -1
  129. package/docs/en/cli/push.md +5 -1
  130. package/docs/en/cli/scan.md +5 -1
  131. package/docs/en/cli/standalone.md +5 -1
  132. package/docs/en/cli/test.md +5 -1
  133. package/docs/en/cli/watch.md +5 -1
  134. package/docs/en/compat/i18n-js.md +1 -1
  135. package/docs/en/compat/i18next.md +1 -1
  136. package/docs/en/compat/lingui.md +1 -1
  137. package/docs/en/compat/next-i18next.md +1 -1
  138. package/docs/en/compat/next-intl.md +1 -1
  139. package/docs/en/compat/next-translate.md +1 -1
  140. package/docs/en/compat/ngx-translate.md +1 -1
  141. package/docs/en/compat/nuxtjs-i18n.md +1 -1
  142. package/docs/en/compat/polyglot.md +1 -1
  143. package/docs/en/compat/react-i18next.md +1 -1
  144. package/docs/en/compat/react-intl.md +1 -1
  145. package/docs/en/compat/svelte-i18n.md +1 -1
  146. package/docs/en/compat/transloco.md +1 -1
  147. package/docs/en/compat/vue-i18n.md +1 -1
  148. package/docs/en/intlayer_with_nextjs_15.md +1 -1
  149. package/docs/en/intlayer_with_nextjs_16.md +1 -1
  150. package/docs/en/intlayer_with_remix_3.md +540 -0
  151. package/docs/en-GB/benchmark/index.md +4 -1
  152. package/docs/en-GB/benchmark/nextjs.md +32 -27
  153. package/docs/en-GB/benchmark/solid.md +13 -10
  154. package/docs/en-GB/benchmark/svelte.md +12 -9
  155. package/docs/en-GB/benchmark/tanstack.md +29 -24
  156. package/docs/en-GB/benchmark/vue.md +11 -7
  157. package/docs/en-GB/cli/build.md +8 -1
  158. package/docs/en-GB/cli/configuration.md +3 -1
  159. package/docs/en-GB/cli/doc-review.md +8 -1
  160. package/docs/en-GB/cli/doc-translate.md +5 -1
  161. package/docs/en-GB/cli/extract.md +2 -1
  162. package/docs/en-GB/cli/fill.md +5 -1
  163. package/docs/en-GB/cli/index.md +4 -5
  164. package/docs/en-GB/cli/live.md +5 -1
  165. package/docs/en-GB/cli/login.md +2 -2
  166. package/docs/en-GB/cli/pull.md +5 -1
  167. package/docs/en-GB/cli/push.md +5 -1
  168. package/docs/en-GB/cli/scan.md +5 -1
  169. package/docs/en-GB/cli/standalone.md +5 -1
  170. package/docs/en-GB/cli/test.md +5 -1
  171. package/docs/en-GB/cli/watch.md +5 -1
  172. package/docs/en-GB/compat/i18n-js.md +1 -1
  173. package/docs/en-GB/compat/i18next.md +1 -1
  174. package/docs/en-GB/compat/lingui.md +1 -1
  175. package/docs/en-GB/compat/next-i18next.md +1 -1
  176. package/docs/en-GB/compat/next-intl.md +1 -1
  177. package/docs/en-GB/compat/next-translate.md +1 -1
  178. package/docs/en-GB/compat/ngx-translate.md +1 -1
  179. package/docs/en-GB/compat/nuxtjs-i18n.md +1 -1
  180. package/docs/en-GB/compat/polyglot.md +1 -1
  181. package/docs/en-GB/compat/react-i18next.md +1 -1
  182. package/docs/en-GB/compat/react-intl.md +1 -1
  183. package/docs/en-GB/compat/svelte-i18n.md +1 -1
  184. package/docs/en-GB/compat/transloco.md +1 -1
  185. package/docs/en-GB/compat/vue-i18n.md +1 -1
  186. package/docs/en-GB/intlayer_with_nextjs_15.md +1 -1
  187. package/docs/en-GB/intlayer_with_nextjs_16.md +1 -1
  188. package/docs/en-GB/intlayer_with_remix_3.md +558 -0
  189. package/docs/es/benchmark/index.md +4 -1
  190. package/docs/es/benchmark/nextjs.md +32 -27
  191. package/docs/es/benchmark/solid.md +13 -10
  192. package/docs/es/benchmark/svelte.md +12 -9
  193. package/docs/es/benchmark/tanstack.md +29 -24
  194. package/docs/es/benchmark/vue.md +11 -7
  195. package/docs/es/cli/build.md +8 -1
  196. package/docs/es/cli/configuration.md +3 -1
  197. package/docs/es/cli/doc-review.md +8 -1
  198. package/docs/es/cli/doc-translate.md +5 -1
  199. package/docs/es/cli/extract.md +2 -1
  200. package/docs/es/cli/fill.md +5 -1
  201. package/docs/es/cli/index.md +4 -5
  202. package/docs/es/cli/live.md +5 -1
  203. package/docs/es/cli/login.md +2 -2
  204. package/docs/es/cli/pull.md +5 -1
  205. package/docs/es/cli/push.md +5 -1
  206. package/docs/es/cli/scan.md +5 -1
  207. package/docs/es/cli/standalone.md +5 -1
  208. package/docs/es/cli/test.md +5 -1
  209. package/docs/es/cli/watch.md +5 -1
  210. package/docs/es/compat/i18n-js.md +1 -1
  211. package/docs/es/compat/i18next.md +1 -1
  212. package/docs/es/compat/lingui.md +1 -1
  213. package/docs/es/compat/next-i18next.md +1 -1
  214. package/docs/es/compat/next-intl.md +1 -1
  215. package/docs/es/compat/next-translate.md +1 -1
  216. package/docs/es/compat/ngx-translate.md +1 -1
  217. package/docs/es/compat/nuxtjs-i18n.md +1 -1
  218. package/docs/es/compat/polyglot.md +1 -1
  219. package/docs/es/compat/react-i18next.md +1 -1
  220. package/docs/es/compat/react-intl.md +1 -1
  221. package/docs/es/compat/svelte-i18n.md +1 -1
  222. package/docs/es/compat/transloco.md +1 -1
  223. package/docs/es/compat/vue-i18n.md +1 -1
  224. package/docs/es/intlayer_with_nextjs_15.md +1 -1
  225. package/docs/es/intlayer_with_nextjs_16.md +1 -1
  226. package/docs/es/intlayer_with_remix_3.md +540 -0
  227. package/docs/fr/benchmark/index.md +4 -1
  228. package/docs/fr/benchmark/nextjs.md +32 -27
  229. package/docs/fr/benchmark/solid.md +13 -10
  230. package/docs/fr/benchmark/svelte.md +12 -9
  231. package/docs/fr/benchmark/tanstack.md +29 -24
  232. package/docs/fr/benchmark/vue.md +11 -7
  233. package/docs/fr/cli/build.md +8 -1
  234. package/docs/fr/cli/configuration.md +3 -1
  235. package/docs/fr/cli/doc-review.md +8 -1
  236. package/docs/fr/cli/doc-translate.md +5 -1
  237. package/docs/fr/cli/extract.md +2 -1
  238. package/docs/fr/cli/fill.md +5 -1
  239. package/docs/fr/cli/index.md +4 -5
  240. package/docs/fr/cli/live.md +5 -1
  241. package/docs/fr/cli/login.md +2 -2
  242. package/docs/fr/cli/pull.md +5 -1
  243. package/docs/fr/cli/push.md +5 -1
  244. package/docs/fr/cli/scan.md +5 -1
  245. package/docs/fr/cli/standalone.md +5 -1
  246. package/docs/fr/cli/test.md +5 -1
  247. package/docs/fr/cli/watch.md +5 -1
  248. package/docs/fr/compat/i18n-js.md +1 -1
  249. package/docs/fr/compat/i18next.md +1 -1
  250. package/docs/fr/compat/lingui.md +1 -1
  251. package/docs/fr/compat/next-i18next.md +1 -1
  252. package/docs/fr/compat/next-intl.md +1 -1
  253. package/docs/fr/compat/next-translate.md +1 -1
  254. package/docs/fr/compat/ngx-translate.md +1 -1
  255. package/docs/fr/compat/nuxtjs-i18n.md +1 -1
  256. package/docs/fr/compat/polyglot.md +1 -1
  257. package/docs/fr/compat/react-i18next.md +1 -1
  258. package/docs/fr/compat/react-intl.md +1 -1
  259. package/docs/fr/compat/svelte-i18n.md +1 -1
  260. package/docs/fr/compat/transloco.md +1 -1
  261. package/docs/fr/compat/vue-i18n.md +1 -1
  262. package/docs/fr/intlayer_with_nextjs_15.md +1 -1
  263. package/docs/fr/intlayer_with_nextjs_16.md +1 -1
  264. package/docs/fr/intlayer_with_remix_3.md +540 -0
  265. package/docs/hi/benchmark/index.md +4 -1
  266. package/docs/hi/benchmark/nextjs.md +32 -27
  267. package/docs/hi/benchmark/solid.md +13 -10
  268. package/docs/hi/benchmark/svelte.md +12 -9
  269. package/docs/hi/benchmark/tanstack.md +29 -24
  270. package/docs/hi/benchmark/vue.md +11 -7
  271. package/docs/hi/cli/build.md +8 -1
  272. package/docs/hi/cli/configuration.md +3 -1
  273. package/docs/hi/cli/doc-review.md +8 -1
  274. package/docs/hi/cli/doc-translate.md +5 -1
  275. package/docs/hi/cli/extract.md +2 -1
  276. package/docs/hi/cli/fill.md +5 -1
  277. package/docs/hi/cli/index.md +4 -5
  278. package/docs/hi/cli/live.md +5 -1
  279. package/docs/hi/cli/login.md +2 -2
  280. package/docs/hi/cli/pull.md +5 -1
  281. package/docs/hi/cli/push.md +5 -1
  282. package/docs/hi/cli/scan.md +5 -1
  283. package/docs/hi/cli/standalone.md +5 -1
  284. package/docs/hi/cli/test.md +5 -1
  285. package/docs/hi/cli/watch.md +5 -1
  286. package/docs/hi/compat/i18n-js.md +1 -1
  287. package/docs/hi/compat/i18next.md +1 -1
  288. package/docs/hi/compat/lingui.md +1 -1
  289. package/docs/hi/compat/next-i18next.md +1 -1
  290. package/docs/hi/compat/next-intl.md +1 -1
  291. package/docs/hi/compat/next-translate.md +1 -1
  292. package/docs/hi/compat/ngx-translate.md +1 -1
  293. package/docs/hi/compat/nuxtjs-i18n.md +1 -1
  294. package/docs/hi/compat/polyglot.md +1 -1
  295. package/docs/hi/compat/react-i18next.md +1 -1
  296. package/docs/hi/compat/react-intl.md +1 -1
  297. package/docs/hi/compat/svelte-i18n.md +1 -1
  298. package/docs/hi/compat/transloco.md +1 -1
  299. package/docs/hi/compat/vue-i18n.md +1 -1
  300. package/docs/hi/intlayer_with_nextjs_15.md +1 -1
  301. package/docs/hi/intlayer_with_nextjs_16.md +1 -1
  302. package/docs/hi/intlayer_with_remix_3.md +543 -0
  303. package/docs/id/benchmark/index.md +4 -1
  304. package/docs/id/benchmark/nextjs.md +32 -27
  305. package/docs/id/benchmark/solid.md +13 -10
  306. package/docs/id/benchmark/svelte.md +12 -9
  307. package/docs/id/benchmark/tanstack.md +29 -24
  308. package/docs/id/benchmark/vue.md +11 -7
  309. package/docs/id/cli/build.md +8 -1
  310. package/docs/id/cli/configuration.md +3 -1
  311. package/docs/id/cli/doc-review.md +8 -1
  312. package/docs/id/cli/doc-translate.md +5 -1
  313. package/docs/id/cli/extract.md +2 -1
  314. package/docs/id/cli/fill.md +5 -1
  315. package/docs/id/cli/index.md +4 -5
  316. package/docs/id/cli/live.md +5 -1
  317. package/docs/id/cli/login.md +2 -2
  318. package/docs/id/cli/pull.md +5 -1
  319. package/docs/id/cli/push.md +5 -1
  320. package/docs/id/cli/scan.md +5 -1
  321. package/docs/id/cli/standalone.md +5 -1
  322. package/docs/id/cli/test.md +5 -1
  323. package/docs/id/cli/watch.md +5 -1
  324. package/docs/id/compat/i18n-js.md +1 -1
  325. package/docs/id/compat/i18next.md +1 -1
  326. package/docs/id/compat/lingui.md +1 -1
  327. package/docs/id/compat/next-i18next.md +1 -1
  328. package/docs/id/compat/next-intl.md +1 -1
  329. package/docs/id/compat/next-translate.md +1 -1
  330. package/docs/id/compat/ngx-translate.md +1 -1
  331. package/docs/id/compat/nuxtjs-i18n.md +1 -1
  332. package/docs/id/compat/polyglot.md +1 -1
  333. package/docs/id/compat/react-i18next.md +1 -1
  334. package/docs/id/compat/react-intl.md +1 -1
  335. package/docs/id/compat/svelte-i18n.md +1 -1
  336. package/docs/id/compat/transloco.md +1 -1
  337. package/docs/id/compat/vue-i18n.md +1 -1
  338. package/docs/id/intlayer_with_nextjs_15.md +1 -1
  339. package/docs/id/intlayer_with_nextjs_16.md +1 -1
  340. package/docs/id/intlayer_with_remix_3.md +566 -0
  341. package/docs/it/benchmark/index.md +4 -1
  342. package/docs/it/benchmark/nextjs.md +32 -27
  343. package/docs/it/benchmark/solid.md +13 -10
  344. package/docs/it/benchmark/svelte.md +12 -9
  345. package/docs/it/benchmark/tanstack.md +29 -24
  346. package/docs/it/benchmark/vue.md +11 -7
  347. package/docs/it/cli/build.md +8 -1
  348. package/docs/it/cli/configuration.md +3 -1
  349. package/docs/it/cli/doc-review.md +8 -1
  350. package/docs/it/cli/doc-translate.md +5 -1
  351. package/docs/it/cli/extract.md +2 -1
  352. package/docs/it/cli/fill.md +5 -1
  353. package/docs/it/cli/index.md +4 -5
  354. package/docs/it/cli/live.md +5 -1
  355. package/docs/it/cli/login.md +2 -2
  356. package/docs/it/cli/pull.md +5 -1
  357. package/docs/it/cli/push.md +5 -1
  358. package/docs/it/cli/scan.md +5 -1
  359. package/docs/it/cli/standalone.md +5 -1
  360. package/docs/it/cli/test.md +5 -1
  361. package/docs/it/cli/watch.md +5 -1
  362. package/docs/it/compat/i18n-js.md +1 -1
  363. package/docs/it/compat/i18next.md +1 -1
  364. package/docs/it/compat/lingui.md +1 -1
  365. package/docs/it/compat/next-i18next.md +1 -1
  366. package/docs/it/compat/next-intl.md +1 -1
  367. package/docs/it/compat/next-translate.md +1 -1
  368. package/docs/it/compat/ngx-translate.md +1 -1
  369. package/docs/it/compat/nuxtjs-i18n.md +1 -1
  370. package/docs/it/compat/polyglot.md +1 -1
  371. package/docs/it/compat/react-i18next.md +1 -1
  372. package/docs/it/compat/react-intl.md +1 -1
  373. package/docs/it/compat/svelte-i18n.md +1 -1
  374. package/docs/it/compat/transloco.md +1 -1
  375. package/docs/it/compat/vue-i18n.md +1 -1
  376. package/docs/it/intlayer_with_nextjs_15.md +1 -1
  377. package/docs/it/intlayer_with_nextjs_16.md +1 -1
  378. package/docs/it/intlayer_with_remix_3.md +558 -0
  379. package/docs/ja/benchmark/index.md +4 -1
  380. package/docs/ja/benchmark/nextjs.md +32 -27
  381. package/docs/ja/benchmark/solid.md +13 -10
  382. package/docs/ja/benchmark/svelte.md +12 -9
  383. package/docs/ja/benchmark/tanstack.md +29 -24
  384. package/docs/ja/benchmark/vue.md +11 -7
  385. package/docs/ja/cli/build.md +8 -1
  386. package/docs/ja/cli/configuration.md +3 -1
  387. package/docs/ja/cli/doc-review.md +8 -1
  388. package/docs/ja/cli/doc-translate.md +5 -1
  389. package/docs/ja/cli/extract.md +2 -1
  390. package/docs/ja/cli/fill.md +5 -1
  391. package/docs/ja/cli/index.md +4 -5
  392. package/docs/ja/cli/live.md +5 -1
  393. package/docs/ja/cli/login.md +2 -2
  394. package/docs/ja/cli/pull.md +5 -1
  395. package/docs/ja/cli/push.md +5 -1
  396. package/docs/ja/cli/scan.md +5 -1
  397. package/docs/ja/cli/standalone.md +5 -1
  398. package/docs/ja/cli/test.md +5 -1
  399. package/docs/ja/cli/watch.md +5 -1
  400. package/docs/ja/compat/i18n-js.md +1 -1
  401. package/docs/ja/compat/i18next.md +1 -1
  402. package/docs/ja/compat/lingui.md +1 -1
  403. package/docs/ja/compat/next-i18next.md +1 -1
  404. package/docs/ja/compat/next-intl.md +1 -1
  405. package/docs/ja/compat/next-translate.md +1 -1
  406. package/docs/ja/compat/ngx-translate.md +1 -1
  407. package/docs/ja/compat/nuxtjs-i18n.md +1 -1
  408. package/docs/ja/compat/polyglot.md +1 -1
  409. package/docs/ja/compat/react-i18next.md +1 -1
  410. package/docs/ja/compat/react-intl.md +1 -1
  411. package/docs/ja/compat/svelte-i18n.md +1 -1
  412. package/docs/ja/compat/transloco.md +1 -1
  413. package/docs/ja/compat/vue-i18n.md +1 -1
  414. package/docs/ja/intlayer_with_nextjs_15.md +1 -1
  415. package/docs/ja/intlayer_with_nextjs_16.md +1 -1
  416. package/docs/ja/intlayer_with_remix_3.md +558 -0
  417. package/docs/ko/benchmark/index.md +4 -1
  418. package/docs/ko/benchmark/nextjs.md +32 -27
  419. package/docs/ko/benchmark/solid.md +13 -10
  420. package/docs/ko/benchmark/svelte.md +12 -9
  421. package/docs/ko/benchmark/tanstack.md +29 -24
  422. package/docs/ko/benchmark/vue.md +11 -7
  423. package/docs/ko/cli/build.md +8 -1
  424. package/docs/ko/cli/configuration.md +3 -1
  425. package/docs/ko/cli/doc-review.md +8 -1
  426. package/docs/ko/cli/doc-translate.md +5 -1
  427. package/docs/ko/cli/extract.md +2 -1
  428. package/docs/ko/cli/fill.md +5 -1
  429. package/docs/ko/cli/index.md +4 -5
  430. package/docs/ko/cli/live.md +5 -1
  431. package/docs/ko/cli/login.md +2 -2
  432. package/docs/ko/cli/pull.md +5 -1
  433. package/docs/ko/cli/push.md +5 -1
  434. package/docs/ko/cli/scan.md +5 -1
  435. package/docs/ko/cli/standalone.md +5 -1
  436. package/docs/ko/cli/test.md +5 -1
  437. package/docs/ko/cli/watch.md +5 -1
  438. package/docs/ko/compat/i18n-js.md +1 -1
  439. package/docs/ko/compat/i18next.md +1 -1
  440. package/docs/ko/compat/lingui.md +1 -1
  441. package/docs/ko/compat/next-i18next.md +1 -1
  442. package/docs/ko/compat/next-intl.md +1 -1
  443. package/docs/ko/compat/next-translate.md +1 -1
  444. package/docs/ko/compat/ngx-translate.md +1 -1
  445. package/docs/ko/compat/nuxtjs-i18n.md +1 -1
  446. package/docs/ko/compat/polyglot.md +1 -1
  447. package/docs/ko/compat/react-i18next.md +1 -1
  448. package/docs/ko/compat/react-intl.md +1 -1
  449. package/docs/ko/compat/svelte-i18n.md +1 -1
  450. package/docs/ko/compat/transloco.md +1 -1
  451. package/docs/ko/compat/vue-i18n.md +1 -1
  452. package/docs/ko/intlayer_with_remix_3.md +543 -0
  453. package/docs/nl/cli/index.md +4 -5
  454. package/docs/nl/cli/scan.md +5 -1
  455. package/docs/nl/cli/standalone.md +5 -1
  456. package/docs/pl/benchmark/index.md +4 -1
  457. package/docs/pl/benchmark/nextjs.md +32 -27
  458. package/docs/pl/benchmark/solid.md +13 -10
  459. package/docs/pl/benchmark/svelte.md +12 -9
  460. package/docs/pl/benchmark/tanstack.md +29 -24
  461. package/docs/pl/benchmark/vue.md +11 -7
  462. package/docs/pl/cli/build.md +8 -1
  463. package/docs/pl/cli/configuration.md +3 -1
  464. package/docs/pl/cli/doc-review.md +8 -1
  465. package/docs/pl/cli/doc-translate.md +5 -1
  466. package/docs/pl/cli/extract.md +2 -1
  467. package/docs/pl/cli/fill.md +5 -1
  468. package/docs/pl/cli/index.md +4 -5
  469. package/docs/pl/cli/live.md +5 -1
  470. package/docs/pl/cli/login.md +2 -2
  471. package/docs/pl/cli/pull.md +5 -1
  472. package/docs/pl/cli/push.md +5 -1
  473. package/docs/pl/cli/scan.md +5 -1
  474. package/docs/pl/cli/standalone.md +5 -1
  475. package/docs/pl/cli/test.md +5 -1
  476. package/docs/pl/cli/watch.md +5 -1
  477. package/docs/pl/compat/i18n-js.md +1 -1
  478. package/docs/pl/compat/i18next.md +1 -1
  479. package/docs/pl/compat/lingui.md +1 -1
  480. package/docs/pl/compat/next-i18next.md +1 -1
  481. package/docs/pl/compat/next-intl.md +1 -1
  482. package/docs/pl/compat/next-translate.md +1 -1
  483. package/docs/pl/compat/ngx-translate.md +1 -1
  484. package/docs/pl/compat/nuxtjs-i18n.md +1 -1
  485. package/docs/pl/compat/polyglot.md +1 -1
  486. package/docs/pl/compat/react-i18next.md +1 -1
  487. package/docs/pl/compat/react-intl.md +1 -1
  488. package/docs/pl/compat/svelte-i18n.md +1 -1
  489. package/docs/pl/compat/transloco.md +1 -1
  490. package/docs/pl/compat/vue-i18n.md +1 -1
  491. package/docs/pl/intlayer_with_nextjs_15.md +1 -1
  492. package/docs/pl/intlayer_with_nextjs_16.md +1 -1
  493. package/docs/pl/intlayer_with_remix_3.md +551 -0
  494. package/docs/pt/benchmark/index.md +4 -1
  495. package/docs/pt/benchmark/nextjs.md +32 -27
  496. package/docs/pt/benchmark/solid.md +13 -10
  497. package/docs/pt/benchmark/svelte.md +12 -9
  498. package/docs/pt/benchmark/tanstack.md +29 -24
  499. package/docs/pt/benchmark/vue.md +11 -7
  500. package/docs/pt/cli/build.md +8 -1
  501. package/docs/pt/cli/configuration.md +3 -1
  502. package/docs/pt/cli/doc-review.md +8 -1
  503. package/docs/pt/cli/doc-translate.md +5 -1
  504. package/docs/pt/cli/extract.md +2 -1
  505. package/docs/pt/cli/fill.md +5 -1
  506. package/docs/pt/cli/index.md +4 -5
  507. package/docs/pt/cli/live.md +5 -1
  508. package/docs/pt/cli/login.md +2 -2
  509. package/docs/pt/cli/pull.md +5 -1
  510. package/docs/pt/cli/push.md +5 -1
  511. package/docs/pt/cli/scan.md +5 -1
  512. package/docs/pt/cli/standalone.md +5 -1
  513. package/docs/pt/cli/test.md +5 -1
  514. package/docs/pt/cli/watch.md +5 -1
  515. package/docs/pt/compat/i18n-js.md +1 -1
  516. package/docs/pt/compat/i18next.md +1 -1
  517. package/docs/pt/compat/lingui.md +1 -1
  518. package/docs/pt/compat/next-i18next.md +1 -1
  519. package/docs/pt/compat/next-intl.md +1 -1
  520. package/docs/pt/compat/next-translate.md +1 -1
  521. package/docs/pt/compat/ngx-translate.md +1 -1
  522. package/docs/pt/compat/nuxtjs-i18n.md +1 -1
  523. package/docs/pt/compat/polyglot.md +1 -1
  524. package/docs/pt/compat/react-i18next.md +1 -1
  525. package/docs/pt/compat/react-intl.md +1 -1
  526. package/docs/pt/compat/svelte-i18n.md +1 -1
  527. package/docs/pt/compat/transloco.md +1 -1
  528. package/docs/pt/compat/vue-i18n.md +1 -1
  529. package/docs/pt/intlayer_with_nextjs_15.md +1 -1
  530. package/docs/pt/intlayer_with_nextjs_16.md +1 -1
  531. package/docs/pt/intlayer_with_remix_3.md +558 -0
  532. package/docs/ru/benchmark/index.md +4 -1
  533. package/docs/ru/benchmark/nextjs.md +32 -27
  534. package/docs/ru/benchmark/solid.md +13 -10
  535. package/docs/ru/benchmark/svelte.md +12 -9
  536. package/docs/ru/benchmark/tanstack.md +29 -24
  537. package/docs/ru/benchmark/vue.md +11 -7
  538. package/docs/ru/cli/build.md +8 -1
  539. package/docs/ru/cli/configuration.md +3 -1
  540. package/docs/ru/cli/doc-review.md +8 -1
  541. package/docs/ru/cli/doc-translate.md +5 -1
  542. package/docs/ru/cli/extract.md +2 -1
  543. package/docs/ru/cli/fill.md +5 -1
  544. package/docs/ru/cli/index.md +4 -5
  545. package/docs/ru/cli/live.md +5 -1
  546. package/docs/ru/cli/login.md +2 -2
  547. package/docs/ru/cli/pull.md +5 -1
  548. package/docs/ru/cli/push.md +5 -1
  549. package/docs/ru/cli/scan.md +5 -1
  550. package/docs/ru/cli/standalone.md +5 -1
  551. package/docs/ru/cli/test.md +5 -1
  552. package/docs/ru/cli/watch.md +5 -1
  553. package/docs/ru/compat/i18n-js.md +1 -1
  554. package/docs/ru/compat/i18next.md +1 -1
  555. package/docs/ru/compat/lingui.md +1 -1
  556. package/docs/ru/compat/next-i18next.md +1 -1
  557. package/docs/ru/compat/next-intl.md +1 -1
  558. package/docs/ru/compat/next-translate.md +1 -1
  559. package/docs/ru/compat/ngx-translate.md +1 -1
  560. package/docs/ru/compat/nuxtjs-i18n.md +1 -1
  561. package/docs/ru/compat/polyglot.md +1 -1
  562. package/docs/ru/compat/react-i18next.md +1 -1
  563. package/docs/ru/compat/react-intl.md +1 -1
  564. package/docs/ru/compat/svelte-i18n.md +1 -1
  565. package/docs/ru/compat/transloco.md +1 -1
  566. package/docs/ru/compat/vue-i18n.md +1 -1
  567. package/docs/ru/intlayer_with_nextjs_15.md +1 -1
  568. package/docs/ru/intlayer_with_nextjs_16.md +1 -1
  569. package/docs/ru/intlayer_with_remix_3.md +558 -0
  570. package/docs/tr/benchmark/index.md +4 -1
  571. package/docs/tr/benchmark/nextjs.md +32 -27
  572. package/docs/tr/benchmark/solid.md +13 -10
  573. package/docs/tr/benchmark/svelte.md +12 -9
  574. package/docs/tr/benchmark/tanstack.md +29 -24
  575. package/docs/tr/benchmark/vue.md +11 -7
  576. package/docs/tr/cli/build.md +8 -1
  577. package/docs/tr/cli/configuration.md +3 -1
  578. package/docs/tr/cli/doc-review.md +8 -1
  579. package/docs/tr/cli/doc-translate.md +5 -1
  580. package/docs/tr/cli/extract.md +2 -1
  581. package/docs/tr/cli/fill.md +5 -1
  582. package/docs/tr/cli/index.md +4 -5
  583. package/docs/tr/cli/live.md +5 -1
  584. package/docs/tr/cli/login.md +2 -2
  585. package/docs/tr/cli/pull.md +5 -1
  586. package/docs/tr/cli/push.md +5 -1
  587. package/docs/tr/cli/scan.md +5 -1
  588. package/docs/tr/cli/standalone.md +5 -1
  589. package/docs/tr/cli/test.md +5 -1
  590. package/docs/tr/cli/watch.md +5 -1
  591. package/docs/tr/compat/i18n-js.md +1 -1
  592. package/docs/tr/compat/i18next.md +1 -1
  593. package/docs/tr/compat/lingui.md +1 -1
  594. package/docs/tr/compat/next-i18next.md +1 -1
  595. package/docs/tr/compat/next-intl.md +1 -1
  596. package/docs/tr/compat/next-translate.md +1 -1
  597. package/docs/tr/compat/ngx-translate.md +1 -1
  598. package/docs/tr/compat/nuxtjs-i18n.md +1 -1
  599. package/docs/tr/compat/polyglot.md +1 -1
  600. package/docs/tr/compat/react-i18next.md +1 -1
  601. package/docs/tr/compat/react-intl.md +1 -1
  602. package/docs/tr/compat/svelte-i18n.md +1 -1
  603. package/docs/tr/compat/transloco.md +1 -1
  604. package/docs/tr/compat/vue-i18n.md +1 -1
  605. package/docs/tr/intlayer_with_nextjs_15.md +1 -1
  606. package/docs/tr/intlayer_with_nextjs_16.md +1 -1
  607. package/docs/tr/intlayer_with_remix_3.md +566 -0
  608. package/docs/uk/benchmark/index.md +4 -1
  609. package/docs/uk/benchmark/nextjs.md +32 -27
  610. package/docs/uk/benchmark/solid.md +13 -10
  611. package/docs/uk/benchmark/svelte.md +12 -9
  612. package/docs/uk/benchmark/tanstack.md +29 -24
  613. package/docs/uk/benchmark/vue.md +11 -7
  614. package/docs/uk/cli/build.md +8 -1
  615. package/docs/uk/cli/configuration.md +3 -1
  616. package/docs/uk/cli/doc-review.md +8 -1
  617. package/docs/uk/cli/doc-translate.md +5 -1
  618. package/docs/uk/cli/extract.md +2 -1
  619. package/docs/uk/cli/fill.md +5 -1
  620. package/docs/uk/cli/index.md +4 -5
  621. package/docs/uk/cli/live.md +5 -1
  622. package/docs/uk/cli/login.md +2 -2
  623. package/docs/uk/cli/pull.md +5 -1
  624. package/docs/uk/cli/push.md +5 -1
  625. package/docs/uk/cli/scan.md +5 -1
  626. package/docs/uk/cli/standalone.md +5 -1
  627. package/docs/uk/cli/test.md +5 -1
  628. package/docs/uk/cli/watch.md +5 -1
  629. package/docs/uk/compat/i18n-js.md +1 -1
  630. package/docs/uk/compat/i18next.md +1 -1
  631. package/docs/uk/compat/lingui.md +1 -1
  632. package/docs/uk/compat/next-i18next.md +1 -1
  633. package/docs/uk/compat/next-intl.md +1 -1
  634. package/docs/uk/compat/next-translate.md +1 -1
  635. package/docs/uk/compat/ngx-translate.md +1 -1
  636. package/docs/uk/compat/nuxtjs-i18n.md +1 -1
  637. package/docs/uk/compat/polyglot.md +1 -1
  638. package/docs/uk/compat/react-i18next.md +1 -1
  639. package/docs/uk/compat/react-intl.md +1 -1
  640. package/docs/uk/compat/svelte-i18n.md +1 -1
  641. package/docs/uk/compat/transloco.md +1 -1
  642. package/docs/uk/compat/vue-i18n.md +1 -1
  643. package/docs/uk/intlayer_with_nextjs_15.md +1 -1
  644. package/docs/uk/intlayer_with_nextjs_16.md +1 -1
  645. package/docs/uk/intlayer_with_remix_3.md +566 -0
  646. package/docs/ur/cli/index.md +4 -5
  647. package/docs/ur/cli/scan.md +5 -1
  648. package/docs/ur/cli/standalone.md +5 -1
  649. package/docs/vi/benchmark/index.md +4 -1
  650. package/docs/vi/benchmark/nextjs.md +32 -27
  651. package/docs/vi/benchmark/solid.md +13 -10
  652. package/docs/vi/benchmark/svelte.md +12 -9
  653. package/docs/vi/benchmark/tanstack.md +29 -24
  654. package/docs/vi/benchmark/vue.md +11 -7
  655. package/docs/vi/cli/build.md +8 -1
  656. package/docs/vi/cli/configuration.md +3 -1
  657. package/docs/vi/cli/doc-review.md +8 -1
  658. package/docs/vi/cli/doc-translate.md +5 -1
  659. package/docs/vi/cli/extract.md +2 -1
  660. package/docs/vi/cli/fill.md +5 -1
  661. package/docs/vi/cli/index.md +4 -5
  662. package/docs/vi/cli/live.md +5 -1
  663. package/docs/vi/cli/login.md +2 -2
  664. package/docs/vi/cli/pull.md +5 -1
  665. package/docs/vi/cli/push.md +5 -1
  666. package/docs/vi/cli/scan.md +5 -1
  667. package/docs/vi/cli/standalone.md +5 -1
  668. package/docs/vi/cli/test.md +5 -1
  669. package/docs/vi/cli/watch.md +5 -1
  670. package/docs/vi/compat/i18n-js.md +1 -1
  671. package/docs/vi/compat/i18next.md +1 -1
  672. package/docs/vi/compat/lingui.md +1 -1
  673. package/docs/vi/compat/next-i18next.md +1 -1
  674. package/docs/vi/compat/next-intl.md +1 -1
  675. package/docs/vi/compat/next-translate.md +1 -1
  676. package/docs/vi/compat/ngx-translate.md +1 -1
  677. package/docs/vi/compat/nuxtjs-i18n.md +1 -1
  678. package/docs/vi/compat/polyglot.md +1 -1
  679. package/docs/vi/compat/react-i18next.md +1 -1
  680. package/docs/vi/compat/react-intl.md +1 -1
  681. package/docs/vi/compat/svelte-i18n.md +1 -1
  682. package/docs/vi/compat/transloco.md +1 -1
  683. package/docs/vi/compat/vue-i18n.md +1 -1
  684. package/docs/vi/intlayer_with_nextjs_15.md +1 -1
  685. package/docs/vi/intlayer_with_nextjs_16.md +1 -1
  686. package/docs/vi/intlayer_with_remix_3.md +566 -0
  687. package/docs/zh/benchmark/index.md +4 -1
  688. package/docs/zh/benchmark/nextjs.md +32 -27
  689. package/docs/zh/benchmark/solid.md +13 -10
  690. package/docs/zh/benchmark/svelte.md +12 -9
  691. package/docs/zh/benchmark/tanstack.md +29 -24
  692. package/docs/zh/benchmark/vue.md +11 -7
  693. package/docs/zh/cli/build.md +8 -1
  694. package/docs/zh/cli/configuration.md +3 -1
  695. package/docs/zh/cli/doc-review.md +8 -1
  696. package/docs/zh/cli/doc-translate.md +5 -1
  697. package/docs/zh/cli/extract.md +2 -1
  698. package/docs/zh/cli/fill.md +5 -1
  699. package/docs/zh/cli/index.md +4 -5
  700. package/docs/zh/cli/live.md +5 -1
  701. package/docs/zh/cli/login.md +2 -2
  702. package/docs/zh/cli/pull.md +5 -1
  703. package/docs/zh/cli/push.md +5 -1
  704. package/docs/zh/cli/scan.md +5 -1
  705. package/docs/zh/cli/standalone.md +5 -1
  706. package/docs/zh/cli/test.md +5 -1
  707. package/docs/zh/cli/watch.md +5 -1
  708. package/docs/zh/compat/i18n-js.md +1 -1
  709. package/docs/zh/compat/i18next.md +1 -1
  710. package/docs/zh/compat/lingui.md +1 -1
  711. package/docs/zh/compat/next-i18next.md +1 -1
  712. package/docs/zh/compat/next-intl.md +1 -1
  713. package/docs/zh/compat/next-translate.md +1 -1
  714. package/docs/zh/compat/ngx-translate.md +1 -1
  715. package/docs/zh/compat/nuxtjs-i18n.md +1 -1
  716. package/docs/zh/compat/polyglot.md +1 -1
  717. package/docs/zh/compat/react-i18next.md +1 -1
  718. package/docs/zh/compat/react-intl.md +1 -1
  719. package/docs/zh/compat/svelte-i18n.md +1 -1
  720. package/docs/zh/compat/transloco.md +1 -1
  721. package/docs/zh/compat/vue-i18n.md +1 -1
  722. package/docs/zh/intlayer_with_nextjs_15.md +1 -1
  723. package/docs/zh/intlayer_with_nextjs_16.md +1 -1
  724. package/docs/zh/intlayer_with_remix_3.md +558 -0
  725. package/package.json +7 -7
  726. package/src/generated/blog.entry.ts +20 -0
  727. package/src/generated/docs.entry.ts +20 -20
  728. package/docs/ar/cli/ci.md +0 -186
  729. package/docs/de/cli/ci.md +0 -186
  730. package/docs/en/cli/ci.md +0 -216
  731. package/docs/en-GB/cli/ci.md +0 -186
  732. package/docs/es/cli/ci.md +0 -186
  733. package/docs/fr/cli/ci.md +0 -186
  734. package/docs/hi/cli/ci.md +0 -186
  735. package/docs/id/cli/ci.md +0 -186
  736. package/docs/it/cli/ci.md +0 -186
  737. package/docs/ja/cli/ci.md +0 -186
  738. package/docs/ko/cli/ci.md +0 -186
  739. package/docs/pl/cli/ci.md +0 -186
  740. package/docs/pt/cli/ci.md +0 -186
  741. package/docs/ru/cli/ci.md +0 -186
  742. package/docs/tr/cli/ci.md +0 -186
  743. package/docs/uk/cli/ci.md +0 -186
  744. package/docs/vi/cli/ci.md +0 -186
  745. 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: La mejor solución i18n para Next.js en 2026 - Informe de Benchmark
5
5
  description: Compara librerías de internacionalización (i18n) para Next.js como next-intl, next-i18next e Intlayer. Informe detallado de rendimiento sobre tamaño del bundle, fugas y reactividad.
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: "Actualización de los resultados del benchmark"
20
23
  - version: 8.9.8
21
24
  date: 2026-05-18
22
25
  changes: "Añadir comparativa de estrellas de GitHub"
@@ -56,7 +59,7 @@ Las librerías de internacionalización tienen un gran impacto en tu aplicación
56
59
 
57
60
  A medida que tu aplicación crece, el tamaño del bundle puede aumentar exponencialmente, lo que puede perjudicar notablemente el rendimiento.
58
61
 
59
- Como ejemplo, en los peores casos, una vez internacionalizada, tu página puede terminar siendo casi 4 veces más grande.
62
+ Como ejemplo, en los peores casos, una vez internacionalizada, tu página puede terminar siendo casi 2 veces más grande.
60
63
 
61
64
  Otro impacto de las librerías i18n es la ralentización del desarrollo. Transformar componentes en contenido bilingüe o multilingüe requiere mucho tiempo.
62
65
 
@@ -68,7 +71,7 @@ Intlayer intenta optimizar en todas estas dimensiones.
68
71
 
69
72
  - **Intlayer** y **next-translate**: Las mejores opciones para el rendimiento en Next.js, ofreciendo la menor huella y el mejor soporte para renderizado estático.
70
73
  - **next-intl**: La opción más de moda pero pesada y compleja de optimizar para aplicaciones grandes.
71
- - **next-i18next**: Popular y rica en plugins, pero conlleva un peso de bundle significativo (~3× Intlayer).
74
+ - **next-i18next**: Popular y rica en plugins, pero conlleva un peso de bundle significativo (~3.5× Intlayer).
72
75
  - **Evitar**: **gt-next** y **lingo.dev** debido a graves problemas de rendimiento, bloqueo del proveedor (vendor lock-in) y errores que rompen la compilación.
73
76
 
74
77
  ## Pon a prueba tu aplicación
@@ -109,19 +112,21 @@ Finalmente, `Intlayer` aplica una optimización en tiempo de compilación (build
109
112
  Para este benchmark, comparamos las siguientes librerías:
110
113
 
111
114
  - `Base App` (Sin librería 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/es/compat/next-intl.md) (v9.5.1)
117
+ - [`@intlayer/next-i18next`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/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
- Utilicé la versión `16.2.4` de `Next.js` con el App Router.
129
+ Utilicé la versión `16.3.4` de `Next.js` con el App Router.
125
130
 
126
131
  Construí una aplicación multilingüe con **10 páginas** y **10 idiomas**.
127
132
 
@@ -175,15 +180,15 @@ Algunas soluciones, como `gt-next` o `lingo.dev`, deben evitarse claramente. Com
175
180
 
176
181
  Problemas encontrados:
177
182
 
178
- **(General Translation)** (`gt-next@6.16.5`):
183
+ **(General Translation)** (`gt-next@11.1.24`):
179
184
 
180
- - Para una aplicación de 110kb, `gt-next` añade más de 440kb extra.
185
+ - Para una aplicación de 141kb, `gt-next` añade más de 50kb extra.
181
186
  - `Quota Exceeded, please upgrade your plan` en la primerísima compilación con General Translation.
182
187
  - Las traducciones no se renderizan; obtengo el error `Error: <T> used on the client-side outside of <GTProvider>`, lo que parece ser un bug de la librería.
183
188
  - Mientras implementaba **gt-next**, también encontré un [problema](https://github.com/generaltranslation/gt/issues/1210#event-24510646961) con la librería: `does not provide an export named 'printAST' - @formatjs/icu-messageformat-parser`, que hacía que la aplicación se rompiera. Tras informar de este problema, el mantenedor lo solucionó en 24 horas.
184
189
  - La librería bloquea el renderizado estático de las páginas de 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
  - Cuota de IA excedida, bloqueando la compilación por completo, por lo que no puedes desplegar en producción sin pagar.
189
194
  - El compilador omitía casi el 40% del contenido traducido. Tuve que reescribir todos los `.map` en bloques de componentes planos para que funcionara.
@@ -192,7 +197,7 @@ Problemas encontrados:
192
197
 
193
198
  ### 2 - Soluciones experimentales
194
199
 
195
- **(Wuchale)** (`wuchale@0.22.11`):
200
+ **(Wuchale)** (`wuchale@0.26.6`):
196
201
 
197
202
  La idea detrás de `Wuchale` es interesante pero aún no es viable. Experimenté problemas de reactividad y tuve que forzar el renderizado del proveedor para que la aplicación funcionara. La documentación también es bastante confusa, lo que dificulta la adopción.
198
203
 
@@ -201,21 +206,21 @@ La idea detrás de `Wuchale` es interesante pero aún no es viable. Experimenté
201
206
  `Paraglide` ofrece un enfoque innovador y bien pensado. Aun así, en este benchmark, el tree-shaking que su empresa anuncia no funcionó para mis configuraciones de Next.js o TanStack Start. El flujo de trabajo y la DX son más complejos que otras opciones. Personalmente, no me gusta tener que regenerar archivos JS antes de cada push, lo que crea un riesgo constante de conflictos de fusión a través de las PR. La herramienta también parece más enfocada en Vite que en Next.js.
202
207
  Finalmente, en comparación con otras soluciones, Paraglide no usa un almacén (ej. contexto de React) para recuperar el idioma actual y renderizar el contenido. Por cada nodo analizado, solicita el idioma al localStorage / cookie, etc. Esto provoca la ejecución de lógica innecesaria que afecta a la reactividad del componente.
203
208
 
204
- > Nota sobre paraglide: la solución inyecta código en tu base de código para importar, como resultado la métrica 'tamaño de la lib' en el informe del benchmark es casi 0. La generación de código es algo bueno, porque la función utilizada incluirá solo la lógica necesaria (prefijo total vs sin prefijo, cookie vs almacenamiento, etc.). En comparación, Intlayer realiza este filtrado mediante inyecciones de variables de entorno en la compilación para forzar al bundler a aplicar tree-shaking al contenido según la lógica. Gracias a esto, paraglide e intlayer terminan siendo soluciones de 6 a 10 veces más ligeras que i18next o next-intl.
209
+ > Nota sobre paraglide: la solución inyecta código en tu base de código para importar, como resultado la métrica 'tamaño de la lib' en el informe del benchmark es casi 0. La generación de código es algo bueno, porque la función utilizada incluirá solo la lógica necesaria (prefijo total vs sin prefijo, cookie vs almacenamiento, etc.). En comparación, Intlayer realiza este filtrado mediante inyecciones de variables de entorno en la compilación para forzar al bundler a aplicar tree-shaking al contenido según la lógica. Gracias a esto, paraglide e intlayer terminan siendo soluciones de 3 a 8 veces más ligeras que i18next o next-intl.
205
210
 
206
211
  ### 3 - Soluciones aceptables
207
212
 
208
- **(Tolgee)** (`@tolgee/react@7.0.0`):
213
+ **(Tolgee)** (`@tolgee/react@7.2.0`):
209
214
 
210
215
  `Tolgee` aborda muchos de los problemas mencionados anteriormente. Me resultó más difícil de adoptar que herramientas similares. No proporciona seguridad de tipos (type safety), lo que también dificulta detectar claves faltantes en tiempo de compilación (build time). Tuve que envolver las funciones de Tolgee con las mías propias para añadir la detección de claves faltantes.
211
216
 
212
- **(Next Intl)** (`next-intl@4.9.1`):
217
+ **(Next Intl)** (`next-intl@4.14.2`):
213
218
 
214
- `next-intl` es la opción más de moda y la que más recomiendan los agentes de IA, pero en mi opinión, equivocadamente. Empezar es fácil. En la práctica, optimizar para limitar la fuga es complejo. Combinar carga dinámica + nombres de espacios + tipos de TypeScript ralentiza mucho el desarrollo. El paquete también es bastante pesado (~13kb para `NextIntlClientProvider` + `useTranslations`, que es más del doble de `next-intlayer`). **next-intl** solía bloquear el renderizado estático de las páginas de Next.js. Proporciona un asistente llamado `setRequestLocale()`. Eso parece haberse abordado parcialmente para archivos centralizados como `en.json` / `fr.json`, pero el renderizado estático sigue fallando cuando el contenido se divide en namespaces como `en/shared.json` / `fr/shared.json` / `es/shared.json`.
219
+ `next-intl` es la opción más de moda y la que más recomiendan los agentes de IA, pero en mi opinión, equivocadamente. Empezar es fácil. En la práctica, optimizar para limitar la fuga es complejo. Combinar carga dinámica + nombres de espacios + tipos de TypeScript ralentiza mucho el desarrollo. El paquete también es bastante pesado (~14.7kb para `NextIntlClientProvider` + `useTranslations`, que es más de 2.5 veces `next-intlayer`). **next-intl** solía bloquear el renderizado estático de las páginas de Next.js. Proporciona un asistente llamado `setRequestLocale()`. Eso parece haberse abordado parcialmente para archivos centralizados como `en.json` / `fr.json`, pero el renderizado estático sigue fallando cuando el contenido se divide en namespaces como `en/shared.json` / `fr/shared.json` / `es/shared.json`.
215
220
 
216
- **(Next I18next)** (`next-i18next@16.0.5`):
221
+ **(Next I18next)** (`next-i18next@16.3.0`):
217
222
 
218
- `next-i18next` es probablemente la opción más popular porque fue una de las primeras soluciones i18n para aplicaciones JavaScript. Tiene muchos plugins comunitarios. Comparte las mismas desventajas principales que `next-intl`. El paquete es especialmente pesado (~18kb para `I18nProvider` + `useTranslation`, casi el triple que `next-intlayer`).
223
+ `next-i18next` es probablemente la opción más popular porque fue una de las primeras soluciones i18n para aplicaciones JavaScript. Tiene muchos plugins comunitarios. Comparte las mismas desventajas principales que `next-intl`. El paquete es especialmente pesado (~19.7kb para `I18nProvider` + `useTranslation`, unas 3.5 veces `next-intlayer`).
219
224
 
220
225
  Los formatos de los mensajes también difieren: `next-intl` usa ICU MessageFormat, mientras que `i18next` usa su propio formato.
221
226
 
@@ -223,17 +228,17 @@ Los formatos de los mensajes también difieren: `next-intl` usa ICU MessageForma
223
228
 
224
229
  `next-international` también aborda los problemas anteriores, pero no difiere mucho de `next-intl` o `next-i18next`. Incluye `scopedT()` para traducciones específicas de un namespace, pero su uso apenas tiene impacto en el tamaño del bundle.
225
230
 
226
- **(Lingui)** (`@lingui/core@5.3.0`):
231
+ **(Lingui)** (`@lingui/core@6.6.0`):
227
232
 
228
233
  A menudo se elogia a `Lingui`. Personalmente, encontré el flujo de trabajo `lingui extract` / `lingui compile` más complejo que otras alternativas, sin una ventaja clara. También noté sintaxis inconsistentes que confunden a las IAs (ej. `t()`, `t''`, `i18n.t()`, `<Trans>`).
229
234
 
230
235
  ### 4 - Recomendaciones
231
236
 
232
- **(Next Translate)** (`next-translate@3.1.2`):
237
+ **(Next Translate)** (`next-translate@3.2.0`):
233
238
 
234
- `next-translate` es mi recomendación principal si te gusta una API de estilo `t()`. Es elegante a través de `next-translate-plugin`, cargando namespaces mediante `getStaticProps` con un cargador de Webpack / Turbopack. También es la opción más ligera aquí (~2.5kb). Para la segmentación por espacios de nombres, definirnamespaces por página o ruta en la configuración está bien pensado y es más fácil de mantener que las principales alternativas como **next-intl** o **next-i18next**. En la versión `3.1.2`, noté que el renderizado estático no funcionaba; Next.js recurría al renderizado dinámico.
239
+ `next-translate` es mi recomendación principal si te gusta una API de estilo `t()`. Es elegante a través de `next-translate-plugin`, cargando namespaces mediante `getStaticProps` con un cargador de Webpack / Turbopack. También es una de las opciones más ligeras aquí (~3.5kb). Para la segmentación por espacios de nombres, definirnamespaces por página o ruta en la configuración está bien pensado y es más fácil de mantener que las principales alternativas como **next-intl** o **next-i18next**. En la versión `3.1.2`, noté que el renderizado estático no funcionaba; Next.js recurría al renderizado dinámico.
235
240
 
236
- **(Intlayer)** (`next-intlayer@8.7.12`):
241
+ **(Intlayer)** (`next-intlayer@9.5.1`):
237
242
 
238
243
  No seré yo quien juzgue personalmente a `next-intlayer` por objetividad, ya que es mi propia solución.
239
244
 
@@ -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: La mejor solución i18n para Solid en 2026 - Informe de Benchmark
5
5
  description: Compara bibliotecas de internacionalización (i18n) para Solid como solid-primitives, solid-i18next e Intlayer. Informe de rendimiento detallado sobre el tamaño del bundle, fugas y reactividad.
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: "Actualización de los resultados del benchmark"
20
23
  - version: 8.9.8
21
24
  date: 2026-05-18
22
25
  changes: "Añadir comparativa de estrellas de GitHub"
@@ -62,9 +65,9 @@ El otro impacto es en la experiencia del desarrollador (DX): cómo se declara el
62
65
 
63
66
  ## TL;DR
64
67
 
65
- - **Intlayer**: Opción recomendada para aplicaciones Solid profesionales que necesitan características avanzadas y optimización (v8.7.12).
68
+ - **Intlayer**: Opción recomendada para aplicaciones Solid profesionales que necesitan características avanzadas y optimización (v9.5.0).
66
69
  - **@solid-primitives/i18n**: Excelente alternativa ligera para proyectos simples, aunque carece de características avanzadas como la carga diferida (lazy loading).
67
- - **solid-i18next**: Opción estándar pero pesada (~4.7× Intlayer) con los mismos inconvenientes que React i18next.
70
+ - **solid-i18next**: Opción estándar pero pesada (~3.5× Intlayer) con los mismos inconvenientes que React i18next.
68
71
  - **Paraglide**: Enfoque innovador pero DX compleja y problemas de tree-shaking en algunas configuraciones.
69
72
 
70
73
  ## Pruebe su aplicación
@@ -97,10 +100,10 @@ Las sintaxis construidas en torno a `t('a.b.c')` son muy convenientes pero a men
97
100
  Para este benchmark, comparamos las siguientes bibliotecas:
98
101
 
99
102
  - `Base App` (Sin biblioteca 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
  El framework es `Solid` con una aplicación multilingüe de **10 páginas** y **10 idiomas**.
106
109
 
@@ -154,11 +157,11 @@ Las estrellas de GitHub son un fuerte indicador de la popularidad de un proyecto
154
157
 
155
158
  ### 2 - Soluciones aceptables
156
159
 
157
- **(solid-i18next)** (`solid-i18next@17.0.2`):
160
+ **(solid-i18next)** (`i18next@26.0.8`):
158
161
 
159
162
  `solid-i18next` es probablemente la opción más popular porque fue una de las primeras en satisfacer las necesidades de i18n de las aplicaciones de JavaScript. También cuenta con un amplio conjunto de complementos de la comunidad para problemas específicos.
160
163
 
161
- El paquete es pesado (~14.6kb, aproximadamente 4.7 veces `solid-intlayer`).
164
+ El paquete es pesado (~14.9kb, aproximadamente 3.5 veces `solid-intlayer`).
162
165
 
163
166
  Aun así, comparte las mismas desventajas principales que las pilas construidas sobre `t('a.b.c')`: las optimizaciones son posibles pero requieren mucho tiempo, y los proyectos grandes corren el riesgo de malas prácticas (namespaces + carga dinámica + tipos).
164
167
 
@@ -167,7 +170,7 @@ Aun así, comparte las mismas desventajas principales que las pilas construidas
167
170
  Solid primitive es extremadamente ligero y eficiente. Recomiendo esa solución para proyectos ligeros, pero puede carecer rápidamente de características para soluciones profesionales que incluyan gestión de cookies, redirección de proxy, formateadores, etc.
168
171
  También carece de carga diferida (lazy loading) y segmentación de namespaces para la optimización del tamaño de la página.
169
172
 
170
- **(Paraglide)** (`@inlang/paraglide-js@2.17.0`):
173
+ **(Paraglide)** (`@inlang/paraglide-js@2.25.1`):
171
174
 
172
175
  `Paraglide` ofrece un enfoque innovador y bien pensado. Aun así, en este benchmark, el tree-shaking que su empresa publicita no funcionó para mi implementación. El flujo de trabajo y la DX también son más complejos que en otras opciones.
173
176
  Personalmente, no me gusta tener que regenerar archivos JS antes de cada push, lo que genera un riesgo constante de conflictos de fusión a través de los PR.
@@ -175,7 +178,7 @@ Finalmente, en comparación con otras soluciones, Paraglide no utiliza un almac
175
178
 
176
179
  ### 3 - Recomendaciones
177
180
 
178
- **(Intlayer)** (`solid-intlayer@8.7.12`):
181
+ **(Intlayer)** (`solid-intlayer@9.5.0`):
179
182
 
180
183
  No juzgaré personalmente `solid-intlayer` por objetividad, ya que es mi propia solución.
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: La mejor solución i18n para Svelte en 2026 - Informe de Benchmark
5
5
  description: Compara bibliotecas de internacionalización (i18n) para Svelte como svelte-i18n, Paraglide e Intlayer. Informe de rendimiento detallado sobre el tamaño del bundle, fugas y reactividad.
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: "Actualización de los resultados del benchmark"
20
23
  - version: 8.9.8
21
24
  date: 2026-05-18
22
25
  changes: "Añadir comparativa de estrellas de GitHub"
@@ -62,9 +65,9 @@ El otro impacto es en la experiencia del desarrollador (DX): cómo se declara el
62
65
 
63
66
  ## TL;DR
64
67
 
65
- - **Intlayer**: La opción más eficiente en cuanto a rendimiento (v8.7.12) con la menor huella.
68
+ - **Intlayer**: La opción más eficiente en cuanto a rendimiento (v9.5.0) con la menor huella.
66
69
  - **Paraglide**: Candidato fuerte para el tree-shaking pero tiene una experiencia de desarrollador más compleja y sobrecarga de reactividad.
67
- - **svelte-i18n**: Completo y estándar para Svelte, pero conlleva un peso de paquete mucho mayor (~7 veces Intlayer).
70
+ - **svelte-i18n**: Completo y estándar para Svelte, pero conlleva un peso de paquete mucho mayor (~4.5 veces Intlayer).
68
71
 
69
72
  ## Pruebe su aplicación
70
73
 
@@ -96,9 +99,9 @@ Las sintaxis construidas en torno a `t('a.b.c')` son muy convenientes pero a men
96
99
  Para este benchmark, comparamos las siguientes bibliotecas:
97
100
 
98
101
  - `Base App` (Sin biblioteca 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
  El framework es `Svelte` con una aplicación multilingüe de **10 páginas** y **10 idiomas**.
104
107
 
@@ -152,7 +155,7 @@ Las estrellas de GitHub son un fuerte indicador de la popularidad de un proyecto
152
155
 
153
156
  ### 2 - Soluciones aceptables
154
157
 
155
- **(Paraglide)** (`@inlang/paraglide-js@2.17.0`):
158
+ **(Paraglide)** (`@inlang/paraglide-js@2.25.1`):
156
159
 
157
160
  `Paraglide` ofrece un enfoque innovador y bien pensado. En el contexto de una aplicación Vite + Svelte, el tree-shaking que su empresa publicita funcionó como se esperaba, lo cual es excelente.
158
161
  Pero en el caso de React + TanStack Start, el tree-shaking no funcionó como se esperaba, lo mismo para Next.js. Dicho esto, valdría la pena volver a verificar el uso de Paraglide en un proyecto Svelte y TanStack Start.
@@ -162,13 +165,13 @@ Finalmente, en comparación con otras soluciones, Paraglide no utiliza un almac
162
165
 
163
166
  > Nota sobre paraglide: la solución inyecta código en su base de código para las importaciones; como resultado, la métrica 'lib size' en el informe de benchmark es casi 0. La generación de código es algo bueno, porque la función utilizada incluirá solo la lógica necesaria (prefijo en todas partes vs sin prefijo, cookie vs almacenamiento, etc.). En comparación, Intlayer realiza este filtrado mediante inyecciones de variables de entorno durante la compilación para obligar al bundler a realizar tree-shaking del contenido según la lógica. Gracias a esto, paraglide e intlayer terminan siendo soluciones de 6 a 10 veces más ligeras que i18next o next-intl.
164
167
 
165
- **(svelte-i18n)** (`svelte-i18n@3.4.0`):
168
+ **(svelte-i18n)** (`svelte-i18n@4.0.1`):
166
169
 
167
- Esta solución satisface todas las necesidades de i18n en un proyecto Svelte. Pero como es el caso de i18next u otras soluciones importantes, es un poco pesada (~15.9kb, aproximadamente 7 veces `svelte-intlayer`).
170
+ Esta solución satisface todas las necesidades de i18n en un proyecto Svelte. Pero como es el caso de i18next u otras soluciones importantes, es un poco pesada (~16.6kb, aproximadamente 4.5 veces `svelte-intlayer`).
168
171
 
169
172
  ### 3 - Recomendaciones
170
173
 
171
- **(Intlayer)** (`svelte-intlayer@8.7.12`):
174
+ **(Intlayer)** (`svelte-intlayer@9.5.0`):
172
175
 
173
176
  No juzgaré personalmente `svelte-intlayer` por objetividad, ya que es mi propia solución.
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: La mejor solución i18n para TanStack Start en 2026 - Informe de Benchmark
5
5
  description: Compara librerías de internacionalización para TanStack Start como react-i18next, use-intl e Intlayer. Informe detallado de rendimiento sobre tamaño del bundle, fugas y reactividad.
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: "Actualización de los resultados del benchmark"
20
23
  - version: 8.9.8
21
24
  date: 2026-05-18
22
25
  changes: "Añadir comparativa de estrellas de GitHub"
@@ -62,7 +65,7 @@ El otro impacto es en la experiencia del desarrollador: cómo declaras el conten
62
65
 
63
66
  ## TL;DR
64
67
 
65
- - **Intlayer**: Proporciona el mejor rendimiento y el tamaño de bundle más pequeño (v8.7.12) para TanStack Start.
68
+ - **Intlayer**: Proporciona el mejor rendimiento y el tamaño de bundle más pequeño (v9.5.1) para TanStack Start.
66
69
  - **react-i18next** & **use-intl**: Alternativas maduras con grandes ecosistemas, mas significativamente más pesadas y complejas de optimizar.
67
70
  - **Paraglide**: Idea innovadora de tree-shaking que no funciona en la práctica. DX compleja y sobrecarga de reactividad en TanStack Start.
68
71
  - **Evitar**: **General Translation (GT)** y **Lingo.dev** debido a graves problemas de rendimiento, límites de cuota de IA y bloqueo del proveedor (vendor lock-in).
@@ -97,16 +100,18 @@ Las sintaxis basadas en `const t = useTranslation()` + `t('a.b.c')` son muy cóm
97
100
  Para este benchmark, comparamos las siguientes librerías:
98
101
 
99
102
  - `Base App` (Sin librería 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/es/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
  El framework es `TanStack Start` con una aplicación multilingüe de **10 páginas** y **10 idiomas**.
112
117
 
@@ -160,15 +165,15 @@ Algunas soluciones, como `gt-react` o `lingo.dev`, son claramente opciones de la
160
165
 
161
166
  Problemas encontrados:
162
167
 
163
- **(General Translation)** (`gt-react@latest`):
168
+ **(General Translation)** (`gt-react@10.18.3`):
164
169
 
165
- - Para una app de unos 110kb, `gt-react` puede añadir más de 440kb extra (orden de magnitud visto en la implementación de Next.js en este mismo benchmark).
170
+ - Para una app de unos 111kb, `gt-react` puede añadir más de 170kb extra (orden de magnitud visto en la implementación de Next.js en este mismo benchmark).
166
171
  - `Quota Exceeded, please upgrade your plan` en la primerísima compilación con General Translation.
167
172
  - Las traducciones no se renderizan; obtengo el error `Error: <T> used on the client-side outside of <GTProvider>`, lo que parece ser un bug de la librería.
168
173
  - Mientras implementaba **gt-tanstack-start-react**, también encontré un [problema](https://github.com/generaltranslation/gt/issues/1210#event-24510646961) con la librería: `does not provide an export named 'printAST' - @formatjs/icu-messageformat-parser`, que hacía que la aplicación se rompiera. Tras informar de este problema, el mantenedor lo solucionó en 24 horas.
169
174
  - Estas librerías usan un antipatrón a través de la función `initializeGT()`, impidiendo que el bundle se limpie adecuadamente mediante tree-shaking.
170
175
 
171
- **(Lingo.dev)** (`lingo.dev@0.133.9`):
176
+ **(Lingo.dev)** (`lingo.dev@0.138.7`):
172
177
 
173
178
  - Cuota de IA excedida (o dependencia del servidor bloqueada), lo que hace que la compilación / producción sea arriesgada sin pagar.
174
179
  - El compilador omitía casi el 40% del contenido traducido. Tuve que reescribir todos los `.map` en bloques de componentes planos para que funcionara.
@@ -178,7 +183,7 @@ Problemas encontrados:
178
183
 
179
184
  ### 2 - Soluciones experimentales
180
185
 
181
- **(Wuchale)** (`wuchale@0.22.11`):
186
+ **(Wuchale)** (`wuchale@0.26.6`):
182
187
 
183
188
  La idea detrás de `Wuchale` es interesante pero todavía no es una solución viable. Experimenté problemas de reactividad con la librería y tuve que forzar el renderizado del proveedor para que la aplicación funcionara en TanStack Start. La documentación también es bastante confusa, lo que dificulta la adopción.
184
189
 
@@ -188,9 +193,9 @@ La idea detrás de `Wuchale` es interesante pero todavía no es una solución vi
188
193
 
189
194
  `Paraglide` ofrece un enfoque innovador y bien pensado. Aun así, en este benchmark, el tree-shaking que su empresa publicita no funcionó para mi implementación en Next.js ni para TanStack Start. El flujo de trabajo y la DX también son más complejos que otras opciones. Personalmente, no soy fan de tener que regenerar archivos JS antes de cada push, lo que crea un riesgo constante de conflictos de fusión para los desarrolladores a través de las PR.
190
195
 
191
- > Nota sobre paraglide: la solución inyecta código en tu base de código para las importaciones, como resultado, la métrica 'lib size' en el informe del benchmark es casi 0. La generación de código es algo bueno, porque la función utilizada incluirá solo la lógica necesaria (prefijo para todo vs sin prefijo, cookie vs almacenamiento, etc.). En comparación, Intlayer realiza este filtrado mediante inyecciones de variables de entorno en la compilación para forzar al bundler a realizar tree-shake del contenido dependiendo de la lógica. Gracias a esto, paraglide e intlayer terminan siendo soluciones entre 6 y 10 veces más ligeras que i18next o next-intl.
196
+ > Nota sobre paraglide: la solución inyecta código en tu base de código para las importaciones, como resultado, la métrica 'lib size' en el informe del benchmark es casi 0. La generación de código es algo bueno, porque la función utilizada incluirá solo la lógica necesaria (prefijo para todo vs sin prefijo, cookie vs almacenamiento, etc.). En comparación, Intlayer realiza este filtrado mediante inyecciones de variables de entorno en la compilación para forzar al bundler a realizar tree-shake del contenido dependiendo de la lógica. Gracias a esto, paraglide e intlayer terminan siendo soluciones entre 3 y 10 veces más ligeras que i18next o next-intl.
192
197
 
193
- **(Tolgee)** (`@tolgee/react@7.0.0`):
198
+ **(Tolgee)** (`@tolgee/react@7.2.0`):
194
199
 
195
200
  `Tolgee` aborda muchos de los problemas mencionados anteriormente. Me resultó más difícil empezar con ella que con otras herramientas con enfoques similares. No proporciona seguridad de tipos, lo que también dificulta mucho detectar claves faltantes en tiempo de compilación (build time). Tuve que envolver las API de Tolgee con las mías propias para añadir la detección de claves faltantes.
196
201
 
@@ -198,37 +203,37 @@ El package es bastante pesado (~11.1kb, lo que es más de 2× `react-intlayer`).
198
203
 
199
204
  En TanStack Start también tuve problemas de reactividad: al cambiar de idioma, tuve que forzar el renderizado del proveedor y suscribirme a eventos de cambio de idioma para que la carga en otro idioma se comportara correctamente.
200
205
 
201
- **(use-intl)** (`use-intl@4.9.1`):
206
+ **(use-intl)** (`use-intl@4.14.2`):
202
207
 
203
208
  `use-intl` es la pieza "intl" más de moda en el ecosistema de React (de la misma familia que `next-intl`) y a menudo la recomiendan los agentes de IA, pero en mi opinión, equivocadamente en una configuración donde el rendimiento es lo primero. Empezar es bastante sencillo. En la práctica, el proceso para optimizar y limitar la fuga es bastante complejo. Del mismo modo, combinar la carga dinámica + namespaces + tipos de TypeScript ralentiza mucho el desarrollo.
204
209
 
205
210
  En TanStack Start evitas las trampas específicas de Next.js (`setRequestLocale`, renderizado estático), pero el problema principal es el mismo: sin una disciplina estricta, el bundle transporta rápidamente demasiados mensajes y el mantenimiento de los namespaces por ruta se vuelve pesado.
206
211
 
207
- **(react-i18next)** (`react-i18next@17.0.2`):
212
+ **(react-i18next)** (`react-i18next@17.0.13`):
208
213
 
209
214
  `react-i18next` es probablemente la opción más popular porque fue una de las primeras en satisfacer las necesidades i18n de las aplicaciones JavaScript. También tiene un amplio conjunto de plugins comunitarios para problemas específicos.
210
215
 
211
216
  Aun así, comparte las mismas desventajas principales que los stacks basados en `t('a.b.c')`: las optimizaciones son posibles pero consumen mucho tiempo, y los proyectos grandes corren el riesgo de caer en malas prácticas (namespaces + carga dinámica + tipos).
212
217
 
213
- El package es especialmente pesado (~17.3kb, que es aproximadamente 3.5× `react-intlayer`).
218
+ El package es especialmente pesado (~18.4kb, que es aproximadamente 3.5× `react-intlayer`).
214
219
 
215
220
  Los formatos de los mensajes también divergen: `use-intl` usa ICU MessageFormat, mientras que `i18next` usa su propio formato, lo que complica las herramientas o las migraciones si se mezclan.
216
221
 
217
- **(Lingui)** (`@lingui/core@5.3.0`):
222
+ **(Lingui)** (`@lingui/core@6.6.0`):
218
223
 
219
224
  A menudo se elogia a `Lingui`. Personalmente, encontré el flujo de trabajo en torno a `lingui extract` / `lingui compile` más complejo que otros enfoques, sin una ventaja clara en este benchmark de TanStack Start. También noté sintaxis inconsistentes que confunden a las IAs (ej. `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` es una implementación de alto rendimiento del equipo de Format.js. La DX sigue siendo verbosa: `const intl = useIntl()` + `intl.formatMessage({ id: "xx.xx" })` añade complejidad, trabajo extra de JavaScript y vincula la instancia global de i18n a muchos nodos en el árbol de React.
224
229
 
225
- El package también es pesado (~14.4kb, lo que es aproximadamente 3× `react-intlayer`).
230
+ El package también es pesado (~15.3kb, lo que es aproximadamente 3× `react-intlayer`).
226
231
 
227
232
  ### 4 - Recomendaciones
228
233
 
229
234
  Este benchmark de TanStack Start no tiene un equivalente directo a `next-translate` (plugin de Next.js + `getStaticProps`). Para los equipos que realmente quieren una API `t()` con un ecosistema maduro, `react-i18next` y `use-intl` siguen siendo opciones "razonables", pero prepárate para invertir mucho tiempo optimizando para evitar fugas.
230
235
 
231
- **(Intlayer)** (`react-intlayer@8.7.12`):
236
+ **(Intlayer)** (`react-intlayer@9.5.1`):
232
237
 
233
238
  No seré yo quien juzgue personalmente a `react-intlayer` por objetividad, ya que es mi propia solución.
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: La mejor solución i18n para Vue en 2026 - Informe de Benchmark
5
5
  description: Compara bibliotecas de internacionalización (i18n) para Vue como vue-i18n, fluent-vue e Intlayer. Informe de rendimiento detallado sobre el tamaño del bundle, fugas y reactividad.
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: "Actualización de los resultados del benchmark"
20
23
  - version: 8.9.8
21
24
  date: 2026-05-18
22
25
  changes: "Añadir comparativa de estrellas de GitHub"
@@ -62,7 +65,7 @@ El otro impacto es en la experiencia del desarrollador (DX): cómo se declara el
62
65
 
63
66
  ## TL;DR
64
67
 
65
- - **Intlayer**: La solución más ligera (v8.7.12) con segmentación (scoping) y carga dinámica nativas.
68
+ - **Intlayer**: La solución más ligera (v9.5.0) con segmentación (scoping) y carga dinámica nativas.
66
69
  - **vue-i18n**: El estándar de la industria con un ecosistema rico, pero puede ser significativamente más pesado y difícil de optimizar para el code-splitting en aplicaciones grandes.
67
70
  - **fluent-vue**: Organización innovadora de mensajes pero carece de seguridad de tipos y resulta ser una solución extremadamente pesada.
68
71
 
@@ -96,7 +99,8 @@ Las sintaxis construidas en torno a `const { t } = useI18n()` + `t('a.b.c')` son
96
99
  Para este benchmark, comparamos las siguientes bibliotecas:
97
100
 
98
101
  - `Base App` (Sin biblioteca 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/es/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 @@ Las estrellas de GitHub son un fuerte indicador de la popularidad de un proyecto
156
160
 
157
161
  - **vue-i18n** es sin duda la biblioteca de i18n más utilizada para Vue, tiene muchas características y un ecosistema enorme. Pero bajo el capó la solución es bastante pesada. Aunque vue-i18n integra carga diferida para los mensajes, carece de una función de segmentación (scoping). En el caso de una aplicación Vue SPA clásica no hay problema, pero para una aplicación Nuxt que utiliza @nuxt/i18n, esto lleva a incluir los mensajes de todas las páginas en una sola. Para una aplicación Nuxt grande con más de 10 páginas, puede volverse realmente problemático.
158
162
 
159
- El paquete es muy pesado (~24.3kb, aproximadamente 9 veces `vue-intlayer`).
163
+ El paquete es muy pesado (~24.3kb, aproximadamente 6 veces `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** ofrece un intento de innovación a través del formato .ftl. La organización de los mensajes es excelente, más fácil de comenzar. Pero en la práctica, la falta de seguridad de tipos aumenta el riesgo de error y puede volverse rápidamente costoso de depurar. Además, esa solución carga los mensajes mediante un plugin de vite que obliga a cargar todo el contenido en todos los idiomas en cada página. Adicionalmente, es una solución extremadamente pesada (~92.7kb, aproximadamente 34 veces `vue-intlayer`).
167
+ - **fluent-vue** ofrece un intento de innovación a través del formato .ftl. La organización de los mensajes es excelente, más fácil de comenzar. Pero en la práctica, la falta de seguridad de tipos aumenta el riesgo de error y puede volverse rápidamente costoso de depurar. Además, esa solución carga los mensajes mediante un plugin de vite que obliga a cargar todo el contenido en todos los idiomas en cada página. Adicionalmente, es una solución extremadamente pesada (~29.7kb, aproximadamente 7.5 veces `vue-intlayer`).
164
168
 
165
169
  ### 3 - Recomendaciones
166
170
 
167
- **(Intlayer)** (`vue-intlayer@8.7.12`):
171
+ **(Intlayer)** (`vue-intlayer@9.5.0`):
168
172
 
169
173
  No juzgaré personalmente `vue-intlayer` por objetividad, ya que es mi propia solución.
@@ -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: Construir Diccionarios
5
5
  description: Aprende cómo construir tus diccionarios de Intlayer a partir de archivos de declaración de contenido.
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: "Añadir el flag `--ci`"
17
20
  - version: 8.1.5
18
21
  date: 2026-02-23
19
22
  changes: "Añadir opción checkTypes"
@@ -92,6 +95,10 @@ Este comando encontrará tus archivos de declaración de contenido por defecto e
92
95
 
93
96
  > Ejemplo: `npx intlayer build --no-cache`
94
97
 
98
+ - **`--ci`**: Ejecuta el comando en cada proyecto Intlayer del monorepo (o solo en el actual si se ejecuta desde un directorio de proyecto). Se pueden inyectar credenciales por proyecto mediante `INTLAYER_PROJECT_CREDENTIALS`, un objeto JSON que asocia cada ruta de proyecto a `{ "clientId", "clientSecret" }`.
99
+
100
+ > Ejemplo: `npx intlayer build --ci`
101
+
95
102
  - **`--check-types`**: Comprueba los tipos de los archivos de declaración de contenido.
96
103
 
97
104
  > Ejemplo: `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: Gestionar Configuración
5
5
  description: Aprende cómo obtener y enviar tu configuración de Intlayer al CMS.
6
6
  keywords:
@@ -51,6 +51,7 @@ bun x intlayer configuration get
51
51
  - **`--base-dir`**: Especifica el directorio base para el proyecto.
52
52
  - **`--verbose`**: Habilita el registro detallado para depuración. (por defecto en true usando CLI)
53
53
  - **`--no-cache`**: Desactiva la caché.
54
+ - **`--ci`**: Ejecuta el comando en cada proyecto Intlayer del monorepo (o solo en el actual si se ejecuta desde un directorio de proyecto). Se pueden inyectar credenciales por proyecto mediante `INTLAYER_PROJECT_CREDENTIALS`, un objeto JSON que asocia cada ruta de proyecto a `{ "clientId", "clientSecret" }`.
54
55
 
55
56
  ## Enviar Configuración
56
57
 
@@ -84,5 +85,6 @@ bun x intlayer configuration push
84
85
  - **`--base-dir`**: Especifica el directorio base para el proyecto.
85
86
  - **`--verbose`**: Habilita el registro detallado para depuración. (por defecto en true usando CLI)
86
87
  - **`--no-cache`**: Desactiva la caché.
88
+ - **`--ci`**: Ejecuta el comando en cada proyecto Intlayer del monorepo (o solo en el actual si se ejecuta desde un directorio de proyecto). Se pueden inyectar credenciales por proyecto mediante `INTLAYER_PROJECT_CREDENTIALS`, un objeto JSON que asocia cada ruta de proyecto a `{ "clientId", "clientSecret" }`.
87
89
 
88
90
  Al enviar la configuración, tu proyecto queda completamente integrado con el CMS de Intlayer, permitiendo una gestión fluida de diccionarios entre equipos.
@@ -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: Revisar Documento
5
5
  description: Aprende cómo revisar archivos de documentación para calidad, consistencia y completitud en diferentes locales.
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: "Añadir el flag `--ci`"
19
22
  - version: 9.0.0
20
23
  date: 2026-06-17
21
24
  changes: "Añadir opción --log"
@@ -142,6 +145,10 @@ Sea cual sea el modo, la ejecución finaliza con un resumen que enumera los docu
142
145
 
143
146
  > Ejemplo: `npx intlayer doc review --base-dir ./docs --env-file .env.production.local`
144
147
 
148
+ - **`--ci`**: Ejecuta el comando en cada proyecto Intlayer del monorepo (o solo en el actual si se ejecuta desde un directorio de proyecto). Se pueden inyectar credenciales por proyecto mediante `INTLAYER_PROJECT_CREDENTIALS`, un objeto JSON que asocia cada ruta de proyecto a `{ "clientId", "clientSecret" }`.
149
+
150
+ > Ejemplo: `npx intlayer doc review --ci`
151
+
145
152
  **Opciones de registro:**
146
153
 
147
154
  - **`--verbose`**: Habilita el registro detallado para depuración. (por defecto es true usando 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: Traducir Documento
5
5
  description: Aprende cómo traducir automáticamente archivos de documentación usando servicios de traducción AI.
6
6
  keywords:
@@ -113,6 +113,10 @@ bun x intlayer doc translate
113
113
 
114
114
  > Ejemplo: `npx intlayer doc translate --base-dir ./docs --env-file .env.production.local`
115
115
 
116
+ - **`--ci`**: Ejecuta el comando en cada proyecto Intlayer del monorepo (o solo en el actual si se ejecuta desde un directorio de proyecto). Se pueden inyectar credenciales por proyecto mediante `INTLAYER_PROJECT_CREDENTIALS`, un objeto JSON que asocia cada ruta de proyecto a `{ "clientId", "clientSecret" }`.
117
+
118
+ > Ejemplo: `npx intlayer doc translate --ci`
119
+
116
120
  **Opciones de registro:**
117
121
 
118
122
  - **`--verbose`**: Habilita el registro detallado para depuración. (por defecto es true usando 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: Extraer cadenas
5
5
  description: Aprende cómo extraer cadenas de tus componentes a un archivo .content ubicado cerca del componente.
6
6
  keywords:
@@ -69,6 +69,7 @@ Este comando analiza tus archivos de código para extraer cadenas de los compone
69
69
  - **`--env`**: Especificar el entorno.
70
70
  - **`--env-file`**: Proporcionar un archivo de entorno personalizado.
71
71
  - **`--verbose`**: Habilitar el registro detallado.
72
+ - **`--ci`**: Ejecuta el comando en cada proyecto Intlayer del monorepo (o solo en el actual si se ejecuta desde un directorio de proyecto). Se pueden inyectar credenciales por proyecto mediante `INTLAYER_PROJECT_CREDENTIALS`, un objeto JSON que asocia cada ruta de proyecto a `{ "clientId", "clientSecret" }`.
72
73
 
73
74
  **Plugins requeridos:**
74
75
 
@@ -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: Rellenar Diccionarios
5
5
  description: Aprende cómo rellenar, auditar y traducir tus diccionarios usando IA.
6
6
  keywords:
@@ -162,6 +162,10 @@ Affected dictionary keys for processing: app, comp-test, hello-world, lang-switc
162
162
 
163
163
  > Ejemplo: `npx intlayer build --no-cache`
164
164
 
165
+ - **`--ci`**: Ejecuta el comando en cada proyecto Intlayer del monorepo (o solo en el actual si se ejecuta desde un directorio de proyecto). Se pueden inyectar credenciales por proyecto mediante `INTLAYER_PROJECT_CREDENTIALS`, un objeto JSON que asocia cada ruta de proyecto a `{ "clientId", "clientSecret" }`.
166
+
167
+ > Ejemplo: `npx intlayer fill --ci`
168
+
165
169
  **Opciones de preparación:**
166
170
 
167
171
  - **`--build`**: Construye los diccionarios antes de hacer push para asegurar que el contenido esté actualizado. True forzará la construcción, false la omitirá, undefined permitirá usar la caché de la construcción.