@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-04-20
3
+ updatedAt: 2026-09-11
4
4
  title: Benchmark i18n libraries
5
5
  description: Learn how Intlayer compares to other i18n libraries in terms of performance and bundle size.
6
6
  keywords:
@@ -14,6 +14,9 @@ slugs:
14
14
  - doc
15
15
  - benchmark
16
16
  history:
17
+ - version: 9.5.1
18
+ date: 2026-09-11
19
+ changes: "Update benchmark results"
17
20
  - version: 8.7.5
18
21
  date: 2026-01-06
19
22
  changes: "Init benchmark"
@@ -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: Best i18n solution for Next.js in 2026 - Benchmark Report
5
5
  description: Compare Next.js internationalisation (i18n) libraries like next-intl, next-i18next, and Intlayer. Detailed performance report on bundle size, leakage, and reactivity.
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: "Update benchmark results"
20
23
  - version: 8.9.8
21
24
  date: 2026-05-18
22
25
  changes: "Add GitHub star comparative"
@@ -56,7 +59,7 @@ Internationalisation libraries have a heavy impact on your application. The main
56
59
 
57
60
  As your app grows, bundle size can grow exponentially, which can noticeably hurt performance.
58
61
 
59
- As an example, for the worst offenders, once internationalised your page can end up nearly 4× larger.
62
+ As an example, for the worst offenders, once internationalised your page can end up nearly 2× larger.
60
63
 
61
64
  Another impact of i18n libraries is slower development. Turning components into multilingual content across languages is time-consuming.
62
65
 
@@ -68,7 +71,7 @@ Intlayer tries to optimise across these dimensions.
68
71
 
69
72
  - **Intlayer** & **next-translate**: Best choices for Next.js performance, offering the smallest footprint and best static rendering support.
70
73
  - **next-intl**: The trendiest option, but heavy and complex to optimise for large applications.
71
- - **next-i18next**: Popular and plugin-rich, but carries significant bundle weight (~3× Intlayer).
74
+ - **next-i18next**: Popular and plugin-rich, but carries significant bundle weight (~3.5× Intlayer).
72
75
  - **Avoid**: **gt-next** and **lingo.dev** due to severe performance issues, vendor lock-in, and build-breaking bugs.
73
76
 
74
77
  ## Test your app
@@ -109,19 +112,21 @@ Finally, `Intlayer` applies a build-time optimisation so `useIntlayer('my-key')`
109
112
  For this benchmark, we compared the following libraries:
110
113
 
111
114
  - `Base App` (No i18n library)
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/en-GB/compat/next-intl.md) (v9.5.1)
117
+ - [`@intlayer/next-i18next`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en-GB/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
- I used `Next.js` version `16.2.4` with the App Router.
129
+ I used `Next.js` version `16.3.4` with the App Router.
125
130
 
126
131
  I built a multilingual app with **10 pages** and **10 languages**.
127
132
 
@@ -175,15 +180,15 @@ Some solutions, such as `gt-next` or `lingo.dev`, are clearly best avoided. They
175
180
 
176
181
  Issues encountered:
177
182
 
178
- **(General Translation)** (`gt-next@6.16.5`):
183
+ **(General Translation)** (`gt-next@11.1.24`):
179
184
 
180
- - For a 110kb app, `gt-next` adds more than 440kb extra.
185
+ - For a 141kb app, `gt-next` adds more than 50kb extra.
181
186
  - `Quota Exceeded, please upgrade your plan` on the very first build with General Translation.
182
187
  - Translations are not rendered; I get the error `Error: <T> used on the client-side outside of <GTProvider>`, which seems to be a bug in the library.
183
188
  - While implementing **gt-next**, I also came across an [issue](https://github.com/generaltranslation/gt/issues/1210#event-24510646961) with the library: `does not provide an export named 'printAST' - @formatjs/icu-messageformat-parser`, which was making the application break. After reporting this issue, the maintainer fixed it within 24 hours.
184
189
  - The library blocks static rendering of Next.js pages.
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 quota exceeded, blocking the build entirely, so you cannot ship to production without paying.
189
194
  - The compiler was missing almost 40% of the translated content. I had to rewrite all `.map` into flat component blocks to make it work.
@@ -192,7 +197,7 @@ Issues encountered:
192
197
 
193
198
  ### 2 - Experimental solutions
194
199
 
195
- **(Wuchale)** (`wuchale@0.22.11`):
200
+ **(Wuchale)** (`wuchale@0.26.6`):
196
201
 
197
202
  The idea behind `Wuchale` is interesting but not yet viable. I hit reactivity issues and had to force rerendering of the provider to get the app working. The documentation is also fairly unclear, which makes onboarding harder.
198
203
 
@@ -203,21 +208,21 @@ Personally I dislike having to regenerate JS files before every push, which crea
203
208
  Even if in theory the tree-shaking strategy works, it does includes all locales in the bundle anyway. Paraglide offers not way to lazy-load the content. That says your page size will grow up correlated to the number of locales you have.
204
209
  Finally, in comparison of other solutions, Paraglide does not use store (e.g. React context) to retrieve the current locale to render the content. For each node parsed, it will request the locale from the localeStorage / cookie etc. It leads to execution of unnecessary logic that impact the component reactivity.
205
210
 
206
- > Note on paraglide: the solution injects code into your codebase for import, as a result the 'lib size' metric in the benchmark report is nearly 0. Code generation is a good thing, because the function used will include only the necessary logic (all prefixes vs no prefixes, cookies vs storage, etc.). In comparison, Intlayer performs this filtering via environment variable injections in the build to force the bundler to tree-shake content depending on the logic. Thanks to this, paraglide and intlayer end up being 6 to 10 times lighter solutions than i18next or next-intl.
211
+ > Note on paraglide: the solution injects code into your codebase for import, as a result the 'lib size' metric in the benchmark report is nearly 0. Code generation is a good thing, because the function used will include only the necessary logic (all prefixes vs no prefixes, cookies vs storage, etc.). In comparison, Intlayer performs this filtering via environment variable injections in the build to force the bundler to tree-shake content depending on the logic. Thanks to this, paraglide and intlayer end up being 3 to 8 times lighter solutions than i18next or next-intl.
207
212
 
208
213
  ### 3 - Acceptable solutions
209
214
 
210
- **(Tolgee)** (`@tolgee/react@7.0.0`):
215
+ **(Tolgee)** (`@tolgee/react@7.2.0`):
211
216
 
212
217
  `Tolgee` addresses many of the issues mentioned earlier. I found it harder to adopt than similar tools. It does not provide type safety, which also makes catching missing keys at compile time harder. I had to wrap Tolgee’s functions with my own to add missing-key detection.
213
218
 
214
- **(Next Intl)** (`next-intl@4.9.1`):
219
+ **(Next Intl)** (`next-intl@4.14.2`):
215
220
 
216
- `next-intl` is the trendiest option and the one AI agents push most, but in my view wrongly so. Getting started is easy. In practice, optimising to limit leakage is complex. Combining dynamic loading + namespacing + TypeScript types slows development a lot. The package is also fairly heavy (~13kb for `NextIntlClientProvider` + `useTranslations`, which is more than 2× `next-intlayer`). **next-intl** used to block static rendering of Next.js pages. It provides a helper named `setRequestLocale()`. That seems partially addressed for centralised files like `en.json` / `fr.json`, but static rendering still breaks when content is split into namespaces such as `en/shared.json` / `fr/shared.json` / `es/shared.json`.
221
+ `next-intl` is the trendiest option and the one AI agents push most, but in my view wrongly so. Getting started is easy. In practice, optimising to limit leakage is complex. Combining dynamic loading + namespacing + TypeScript types slows development a lot. The package is also fairly heavy (~14.7kb for `NextIntlClientProvider` + `useTranslations`, which is more than 2.5× `next-intlayer`). **next-intl** used to block static rendering of Next.js pages. It provides a helper named `setRequestLocale()`. That seems partially addressed for centralised files like `en.json` / `fr.json`, but static rendering still breaks when content is split into namespaces such as `en/shared.json` / `fr/shared.json` / `es/shared.json`.
217
222
 
218
- **(Next I18next)** (`next-i18next@16.0.5`):
223
+ **(Next I18next)** (`next-i18next@16.3.0`):
219
224
 
220
- `next-i18next` is probably the most popular option because it was among the first i18n solutions for JavaScript apps. It has many community plugins. It shares the same major downsides as `next-intl`. The package is especially heavy (~18kb for `I18nProvider` + `useTranslation`, about 3× `next-intlayer`).
225
+ `next-i18next` is probably the most popular option because it was among the first i18n solutions for JavaScript apps. It has many community plugins. It shares the same major downsides as `next-intl`. The package is especially heavy (~19.7kb for `I18nProvider` + `useTranslation`, about 3.5× `next-intlayer`).
221
226
 
222
227
  Message formats also differ: `next-intl` uses ICU MessageFormat, while `i18next` uses its own format.
223
228
 
@@ -225,17 +230,17 @@ Message formats also differ: `next-intl` uses ICU MessageFormat, while `i18next`
225
230
 
226
231
  `next-international` also tackles the issues above but does not differ much from `next-intl` or `next-i18next`. It includes `scopedT()` for namespace-specific translations, but using it has essentially no impact on bundle size.
227
232
 
228
- **(Lingui)** (`@lingui/core@5.3.0`):
233
+ **(Lingui)** (`@lingui/core@6.6.0`):
229
234
 
230
235
  `Lingui` is often praised. Personally I found the `lingui extract` / `lingui compile` workflow more complex than alternatives, without a clear upside. I also noticed inconsistent syntaxes that confuse AIs (e.g. `t()`, `t''`, `i18n.t()`, `<Trans>`).
231
236
 
232
237
  ### 4 - Recommendations
233
238
 
234
- **(Next Translate)** (`next-translate@3.1.2`):
239
+ **(Next Translate)** (`next-translate@3.2.0`):
235
240
 
236
- `next-translate` is my main recommendation if you like a `t()`-style API. It is elegant via `next-translate-plugin`, loading namespaces through `getStaticProps` with a Webpack / Turbopack loader. It is also the lightest option here (~2.5kb). For namespacing, defining namespaces per page or route in config is well thought out and easier to maintain than main alternatives like **next-intl** or **next-i18next**. In version `3.1.2`, I noted that static rendering did not work; Next.js fell back to dynamic rendering.
241
+ `next-translate` is my main recommendation if you like a `t()`-style API. It is elegant via `next-translate-plugin`, loading namespaces through `getStaticProps` with a Webpack / Turbopack loader. It is also one of the lightest options here (~3.5kb). For namespacing, defining namespaces per page or route in config is well thought out and easier to maintain than main alternatives like **next-intl** or **next-i18next**. In version `3.1.2`, I noted that static rendering did not work; Next.js fell back to dynamic rendering.
237
242
 
238
- **(Intlayer)** (`next-intlayer@8.7.12`):
243
+ **(Intlayer)** (`next-intlayer@9.5.1`):
239
244
 
240
245
  I will not personally judge `next-intlayer` for objectivity’s sake, since it is my own solution.
241
246
 
@@ -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: Best i18n solution for Solid in 2026 - Benchmark Report
5
5
  description: Compare Solid internationalisation (i18n) libraries like solid-primitives, solid-i18next, and Intlayer. Detailed performance report on bundle size, leakage, and reactivity.
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: "Update benchmark results"
20
23
  - version: 8.9.8
21
24
  date: 2026-05-18
22
25
  changes: "Add GitHub star comparative"
@@ -62,9 +65,9 @@ The other impact is on developer experience: how you declare content, types, nam
62
65
 
63
66
  ## TL;DR
64
67
 
65
- - **Intlayer**: Recommended choice for professional Solid applications needing advanced features and optimisation (v8.7.12).
68
+ - **Intlayer**: Recommended choice for professional Solid applications needing advanced features and optimisation (v9.5.0).
66
69
  - **@solid-primitives/i18n**: Excellent lightweight alternative for simple projects, though lacks advanced features like lazy loading.
67
- - **solid-i18next**: Standard but heavy option (~4.7× Intlayer) with same downsides as React i18next.
70
+ - **solid-i18next**: Standard but heavy option (~3.5× Intlayer) with same downsides as React i18next.
68
71
  - **Paraglide**: Innovative approach but complex DX and tree-shaking issues in some setups.
69
72
 
70
73
  ## Test your app
@@ -97,10 +100,10 @@ Syntaxes built around `t('a.b.c')` are very convenient but often encourage keepi
97
100
  For this benchmark, we compared the following libraries:
98
101
 
99
102
  - `Base App` (No i18n library)
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
  The framework is `Solid` with a multilingual app of **10 pages** and **10 languages**.
106
109
 
@@ -154,11 +157,11 @@ GitHub stars are a strong indicator of a project's popularity, community trust,
154
157
 
155
158
  ### 2 - Acceptable solutions
156
159
 
157
- **(solid-i18next)** (`solid-i18next@17.0.2`):
160
+ **(solid-i18next)** (`i18next@26.0.8`):
158
161
 
159
162
  `solid-i18next` is probably the most popular option because it was among the first to serve JavaScript app i18n needs. It also has a wide set of community plugins for specific problems.
160
163
 
161
- The package is heavy (~14.6kb, which is about 4.7× `solid-intlayer`).
164
+ The package is heavy (~14.9kb, which is about 3.5× `solid-intlayer`).
162
165
 
163
166
  Still, it shares the same major downsides as stacks built on `t('a.b.c')`: optimisations are possible but very time-consuming, and large projects risk bad practices (namespaces + dynamic loading + types).
164
167
 
@@ -167,7 +170,7 @@ Still, it shares the same major downsides as stacks built on `t('a.b.c')`: optim
167
170
  Solid primitive is extremely light and efficient. I recommend that solution for light projects, but it can quickly become lacking features for professional solutions including cookie management, proxy redirection, formatters etc.
168
171
  It also misses lazy loading and scoping namespaces for page size optimisation.
169
172
 
170
- **(Paraglide)** (`@inlang/paraglide-js@2.17.0`):
173
+ **(Paraglide)** (`@inlang/paraglide-js@2.25.1`):
171
174
 
172
175
  `Paraglide` offers an innovative, well-thought-out approach. Even so, in this benchmark the tree-shaking their company advertises did not work for my implementation. The workflow and DX are also more complex than other options.
173
176
  Personally I dislike having to regenerate JS files before every push, which creates constant merge conflict risk via PRs.
@@ -175,7 +178,7 @@ Finally, in comparison with other solutions, Paraglide does not use a store (e.g
175
178
 
176
179
  ### 3 - Recommendations
177
180
 
178
- **(Intlayer)** (`solid-intlayer@8.7.12`):
181
+ **(Intlayer)** (`solid-intlayer@9.5.0`):
179
182
 
180
183
  I will not personally judge `solid-intlayer` for objectivity’s sake, since it is my own solution.
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: Best i18n solution for Svelte in 2026 - Benchmark Report
5
5
  description: Compare Svelte internationalisation (i18n) libraries like svelte-i18n, Paraglide, and Intlayer. Detailed performance report on bundle size, leakage, and reactivity.
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: "Update benchmark results"
20
23
  - version: 8.9.8
21
24
  date: 2026-05-18
22
25
  changes: "Add GitHub star comparative"
@@ -62,9 +65,9 @@ The other impact is on developer experience: how you declare content, types, nam
62
65
 
63
66
  ## TL;DR
64
67
 
65
- - **Intlayer**: The most performance-efficient choice (v8.7.12) with the smallest footprint.
68
+ - **Intlayer**: The most performance-efficient choice (v9.5.0) with the smallest footprint.
66
69
  - **Paraglide**: Strong contender for tree-shaking but has a more complex developer experience and reactivity overhead.
67
- - **svelte-i18n**: Comprehensive and standard for Svelte, but carries much larger bundle weight (~7× Intlayer).
70
+ - **svelte-i18n**: Comprehensive and standard for Svelte, but carries much larger bundle weight (~4.5× Intlayer).
68
71
 
69
72
  ## Test your app
70
73
 
@@ -96,9 +99,9 @@ Syntaxes built around `t('a.b.c')` are very convenient but often encourage keepi
96
99
  For this benchmark, we compared the following libraries:
97
100
 
98
101
  - `Base App` (No i18n library)
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
  The framework is `Svelte` with a multilingual app of **10 pages** and **10 languages**.
104
107
 
@@ -152,7 +155,7 @@ GitHub stars are a strong indicator of a project's popularity, community trust,
152
155
 
153
156
  ### 2 - Acceptable solutions
154
157
 
155
- **(Paraglide)** (`@inlang/paraglide-js@2.17.0`):
158
+ **(Paraglide)** (`@inlang/paraglide-js@2.25.1`):
156
159
 
157
160
  `Paraglide` offers an innovative, well-thought-out approach. In the context of a Vite + Svelte app, the tree-shaking their company advertises worked as expected, which is great.
158
161
  But in the case of React + TanStack Start, tree-shaking did not work as expected, same for Next.js. That said, Paraglide's usage in a Svelte and TanStack Start project would be worth a double check.
@@ -162,13 +165,13 @@ Finally, in comparison with other solutions, Paraglide does not use a store (e.g
162
165
 
163
166
  > Note on paraglide: the solution injects code into your codebase for imports; as a result, the 'lib size' metric in the benchmark report is almost 0. Code generation is a good thing, because the function used will include only the necessary logic (prefix everywhere vs no prefix, cookie vs storage, etc.). In comparison, Intlayer performs this filtering via environment variable injections in the build to force the bundler to tree-shake the content depending on the logic. Thanks to this, paraglide and intlayer end up being 6 to 10 times lighter solutions than i18next or next-intl.
164
167
 
165
- **(svelte-i18n)** (`svelte-i18n@3.4.0`):
168
+ **(svelte-i18n)** (`svelte-i18n@4.0.1`):
166
169
 
167
- This solution answers all i18n needs in a Svelte project. But as it is the case for i18next or other major i18n solutions, it is a bit heavy (~15.9kb, which is about 7× `svelte-intlayer`).
170
+ This solution answers all i18n needs in a Svelte project. But as it is the case for i18next or other major i18n solutions, it is a bit heavy (~16.6kb, which is about 4.5× `svelte-intlayer`).
168
171
 
169
172
  ### 3 - Recommendations
170
173
 
171
- **(Intlayer)** (`svelte-intlayer@8.7.12`):
174
+ **(Intlayer)** (`svelte-intlayer@9.5.0`):
172
175
 
173
176
  I will not personally judge `svelte-intlayer` for objectivity’s sake, since it is my own solution.
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: Best i18n solution for TanStack Start in 2026 - Benchmark Report
5
5
  description: Compare TanStack Start internationalisation libraries like react-i18next, use-intl, and Intlayer. Detailed performance report on bundle size, leakage, and reactivity.
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: "Update benchmark results"
20
23
  - version: 8.9.8
21
24
  date: 2026-05-18
22
25
  changes: "Add GitHub star comparative"
@@ -62,7 +65,7 @@ The other impact is on developer experience: how you declare content, types, nam
62
65
 
63
66
  ## TL;DR
64
67
 
65
- - **Intlayer**: Provides the best performance and smallest bundle size (v8.7.12) for TanStack Start.
68
+ - **Intlayer**: Provides the best performance and smallest bundle size (v9.5.1) for TanStack Start.
66
69
  - **react-i18next** & **use-intl**: Mature alternatives with large ecosystems, but significantly heavier and more complex to optimise.
67
70
  - **Paraglide**: Innovative tree-shaking idea that does not work in practice. Complex DX and reactivity overhead in TanStack Start.
68
71
  - **Avoid**: **General Translation (GT)** and **Lingo.dev** due to severe performance issues, AI quota limits, and vendor lock-in.
@@ -97,16 +100,18 @@ Syntaxes built around `const t = useTranslation()` + `t('a.b.c')` are very conve
97
100
  For this benchmark, we compared the following libraries:
98
101
 
99
102
  - `Base App` (No i18n library)
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/en-GB/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
  The framework is `TanStack Start` with a multilingual app of **10 pages** and **10 languages**.
112
117
 
@@ -160,15 +165,15 @@ Some solutions, such as `gt-react` or `lingo.dev`, are clearly ones to steer cle
160
165
 
161
166
  Issues encountered:
162
167
 
163
- **(General Translation)** (`gt-react@latest`):
168
+ **(General Translation)** (`gt-react@10.18.3`):
164
169
 
165
- - For an app around 110kb, `gt-react` can add more than 440kb extra (order of magnitude seen on the Next.js implementation in the same benchmark).
170
+ - For an app around 111kb, `gt-react` can add more than 170kb extra (order of magnitude seen on the Next.js implementation in the same benchmark).
166
171
  - `Quota Exceeded, please upgrade your plan` on the very first build with General Translation.
167
172
  - Translations are not rendered; I get the error `Error: <T> used on the client-side outside of <GTProvider>`, which seems to be a bug in the library.
168
173
  - While implementing **gt-tanstack-start-react**, I also came across an [issue](https://github.com/generaltranslation/gt/issues/1210#event-24510646961) with the library: `does not provide an export named 'printAST' - @formatjs/icu-messageformat-parser`, which was making the application break. After reporting this issue, the maintainer fixed it within 24 hours.
169
174
  - These libraries use an anti-pattern through the `initializeGT()` function, blocking the bundle from tree-shaking cleanly.
170
175
 
171
- **(Lingo.dev)** (`lingo.dev@0.133.9`):
176
+ **(Lingo.dev)** (`lingo.dev@0.138.7`):
172
177
 
173
178
  - AI quota exceeded (or blocking server dependency), making build / production risky without paying.
174
179
  - The compiler was missing almost 40% of the translated content. I had to rewrite all `.map` into flat component blocks to make it work.
@@ -178,7 +183,7 @@ Issues encountered:
178
183
 
179
184
  ### 2 - Experimental solutions
180
185
 
181
- **(Wuchale)** (`wuchale@0.22.11`):
186
+ **(Wuchale)** (`wuchale@0.26.6`):
182
187
 
183
188
  The idea behind `Wuchale` is interesting but not yet a viable solution. I hit reactivity issues with the library and had to force rerendering of the provider to get the app working on TanStack Start. The documentation is also fairly unclear, which makes onboarding harder.
184
189
 
@@ -188,9 +193,9 @@ The idea behind `Wuchale` is interesting but not yet a viable solution. I hit re
188
193
 
189
194
  `Paraglide` offers an innovative, well-thought-out approach. Even so, in this benchmark the tree-shaking their company advertises did not work for my Next.js implementation or for TanStack Start. The workflow and DX are also more complex than other options. Personally I am not a fan of having to regenerate JS files before every push, which creates constant merge conflict risk for developers via PRs.
190
195
 
191
- > Note on paraglide: the solution injects code into your codebase for imports; as a result, the 'lib size' metric in the benchmark report is almost 0. Code generation is a good thing, because the function used will include only the necessary logic (prefix everywhere vs no prefix, cookie vs storage, etc.). In comparison, Intlayer performs this filtering via environment variable injections in the build to force the bundler to tree-shake the content depending on the logic. Thanks to this, paraglide and intlayer end up being 6 to 10 times lighter solutions than i18next or next-intl.
196
+ > Note on paraglide: the solution injects code into your codebase for imports; as a result, the 'lib size' metric in the benchmark report is almost 0. Code generation is a good thing, because the function used will include only the necessary logic (prefix everywhere vs no prefix, cookie vs storage, etc.). In comparison, Intlayer performs this filtering via environment variable injections in the build to force the bundler to tree-shake the content depending on the logic. Thanks to this, paraglide and intlayer end up being 3 to 10 times lighter solutions than i18next or next-intl.
192
197
 
193
- **(Tolgee)** (`@tolgee/react@7.0.0`):
198
+ **(Tolgee)** (`@tolgee/react@7.2.0`):
194
199
 
195
200
  `Tolgee` addresses many of the issues mentioned earlier. I found it harder to get started with than other tools with similar approaches. It does not provide type safety, which also makes catching missing keys at compile time much harder. I had to wrap Tolgee’s APIs with my own to add missing-key detection.
196
201
 
@@ -198,37 +203,37 @@ The package is fairly heavy (~11.1kb, which is more than 2× `react-intlayer`).
198
203
 
199
204
  On TanStack Start I also had reactivity problems: on locale change I had to force the provider to rerender and subscribe to locale-change events so loading in another language behaved correctly.
200
205
 
201
- **(use-intl)** (`use-intl@4.9.1`):
206
+ **(use-intl)** (`use-intl@4.14.2`):
202
207
 
203
208
  `use-intl` is the most fashionable “intl” piece in the React ecosystem (same family as `next-intl`) and is often pushed by AI agents, but in my view wrongly so in a performance-first setting. Getting started is fairly simple. In practice, the process to optimise and limit leakage is quite complex. Likewise, combining dynamic loading + namespacing + TypeScript types slows development a lot.
204
209
 
205
210
  On TanStack Start you avoid Next.js-specific traps (`setRequestLocale`, static rendering), but the core issue is the same: without strict discipline, the bundle quickly carries too many messages and per-route namespace maintenance becomes painful.
206
211
 
207
- **(react-i18next)** (`react-i18next@17.0.2`):
212
+ **(react-i18next)** (`react-i18next@17.0.13`):
208
213
 
209
214
  `react-i18next` is probably the most popular option because it was among the first to serve JavaScript app i18n needs. It also has a wide set of community plugins for specific problems.
210
215
 
211
216
  Still, it shares the same major downsides as stacks built on `t('a.b.c')`: optimisations are possible but very time-consuming, and large projects risk bad practices (namespaces + dynamic loading + types).
212
217
 
213
- The package is especially heavy (~17.3kb, which is about 3.5× `react-intlayer`).
218
+ The package is especially heavy (~18.4kb, which is about 3.5× `react-intlayer`).
214
219
 
215
220
  Message formats also diverge: `use-intl` uses ICU MessageFormat, while `i18next` uses its own format-which complicates tooling or migrations if you mix them.
216
221
 
217
- **(Lingui)** (`@lingui/core@5.3.0`):
222
+ **(Lingui)** (`@lingui/core@6.6.0`):
218
223
 
219
224
  `Lingui` is often praised. Personally I found the workflow around `lingui extract` / `lingui compile` more complex than other approaches, without a clear upside in this TanStack Start benchmark. I also noticed inconsistent syntaxes that confuse AIs (e.g. `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` is a performant implementation from the Format.js team. The DX stays verbose: `const intl = useIntl()` + `intl.formatMessage({ id: "xx.xx" })` adds complexity, extra JavaScript work, and ties the global i18n instance to many nodes in the React tree.
224
229
 
225
- The package is also heavy (~14.4kb, which is about 3× `react-intlayer`).
230
+ The package is also heavy (~15.3kb, which is about 3× `react-intlayer`).
226
231
 
227
232
  ### 4 - Recommendations
228
233
 
229
234
  This TanStack Start benchmark has no direct equivalent to `next-translate` (Next.js plugin + `getStaticProps`). For teams that really want a `t()` API with a mature ecosystem, `react-i18next` and `use-intl` remain “reasonable” choices, but expect to invest a lot of time optimising to avoid leakage.
230
235
 
231
- **(Intlayer)** (`react-intlayer@8.7.12`):
236
+ **(Intlayer)** (`react-intlayer@9.5.1`):
232
237
 
233
238
  I will not personally judge `react-intlayer` for objectivity’s sake, since it is my own solution.
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: Best i18n solution for Vue in 2026 - Benchmark Report
5
5
  description: Compare Vue internationalisation (i18n) libraries like vue-i18n, fluent-vue, and Intlayer. Detailed performance report on bundle size, leakage, and reactivity.
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: "Update benchmark results"
20
23
  - version: 8.9.8
21
24
  date: 2026-05-18
22
25
  changes: "Add GitHub star comparative"
@@ -62,7 +65,7 @@ The other impact is on developer experience: how you declare content, types, nam
62
65
 
63
66
  ## TL;DR
64
67
 
65
- - **Intlayer**: The lightest solution (v8.7.12) with built-in scoping and dynamic loading.
68
+ - **Intlayer**: The lightest solution (v9.5.0) with built-in scoping and dynamic loading.
66
69
  - **vue-i18n**: The industry standard with a rich ecosystem, but can become significantly heavier and harder to optimise for code-splitting in large applications.
67
70
  - **fluent-vue**: Innovative message organisation but lacks type-safety and turns out to be an extremely heavy solution.
68
71
 
@@ -96,7 +99,8 @@ Syntaxes built around `const { t } = useI18n()` + `t('a.b.c')` are very convenie
96
99
  For this benchmark, we compared the following libraries:
97
100
 
98
101
  - `Base App` (No i18n library)
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/en-GB/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 @@ GitHub stars are a strong indicator of a project's popularity, community trust,
156
160
 
157
161
  - **vue-i18n** is without contestation the most used i18n library for vue, it has a lot of features and a huge ecosystem. But under the hood the solution is quite heavy. Even if vue-i18n integrates lazy loading for messages, it misses a scoping feature. In the case of a classic Vue SPA app there is no issue, but for a nuxt app, using @nuxt/i18n, it leads to including the messages from all pages into a single one. For a big nuxt app including more than 10 pages, it can become really problematic.
158
162
 
159
- The package is very heavy (~24.3kb, which is about 9× `vue-intlayer`).
163
+ The package is very heavy (~24.3kb, which is about 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** offer one innovation attempt through the .ftl format. The message organisation is great, easier to get started. But in practice, the lack of typesafety increases the risk of error and can quickly become time consuming to debug. Moreover, that solution load the messages using a vite plugin that force the loading of all the content in all languages into each page. Additionally this is an extremely heavy solution (~92.7kb, which is about 34× `vue-intlayer`).
167
+ - **fluent-vue** offer one innovation attempt through the .ftl format. The message organisation is great, easier to get started. But in practice, the lack of typesafety increases the risk of error and can quickly become time consuming to debug. Moreover, that solution load the messages using a vite plugin that force the loading of all the content in all languages into each page. Additionally this is an extremely heavy solution (~29.7kb, which is about 7.5× `vue-intlayer`).
164
168
 
165
169
  ### 3 - Recommendations
166
170
 
167
- **(Intlayer)** (`vue-intlayer@8.7.12`):
171
+ **(Intlayer)** (`vue-intlayer@9.5.0`):
168
172
 
169
173
  I will not personally judge `vue-intlayer` for objectivity’s sake, since it is my own solution.
@@ -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: Build Dictionaries
5
5
  description: Learn how to build your Intlayer dictionaries from content declaration files.
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: "Add `--ci` flag"
17
20
  - version: 8.1.5
18
21
  date: 2026-02-23
19
22
  changes: "Add checkTypes option"
@@ -92,6 +95,10 @@ This command will find your declaration content files by default at `./src/**/*.
92
95
 
93
96
  > Example: `npx intlayer build --no-cache`
94
97
 
98
+ - **`--ci`**: Run the command in every Intlayer project of the monorepo (or only the current one when run from a project directory). Per-project credentials can be injected via `INTLAYER_PROJECT_CREDENTIALS`, a JSON map of project path to `{ "clientId", "clientSecret" }`.
99
+
100
+ > Example: `npx intlayer build --ci`
101
+
95
102
  - **`--check-types`**: Check types of the content declaration files.
96
103
 
97
104
  > Example: `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: Manage Configuration
5
5
  description: Learn how to get and push your Intlayer configuration to the CMS.
6
6
  keywords:
@@ -51,6 +51,7 @@ bun x intlayer configuration get
51
51
  - **`--base-dir`**: Specify the base directory for the project.
52
52
  - **`--verbose`**: Enable verbose logging for debugging. (default to true using CLI)
53
53
  - **`--no-cache`**: Disable the cache.
54
+ - **`--ci`**: Run the command in every Intlayer project of the monorepo (or only the current one when run from a project directory). Per-project credentials can be injected via `INTLAYER_PROJECT_CREDENTIALS`, a JSON map of project path to `{ "clientId", "clientSecret" }`.
54
55
 
55
56
  ## Push Configuration
56
57
 
@@ -84,5 +85,6 @@ bun x intlayer configuration push
84
85
  - **`--base-dir`**: Specify the base directory for the project.
85
86
  - **`--verbose`**: Enable verbose logging for debugging. (default to true using CLI)
86
87
  - **`--no-cache`**: Disable the cache.
88
+ - **`--ci`**: Run the command in every Intlayer project of the monorepo (or only the current one when run from a project directory). Per-project credentials can be injected via `INTLAYER_PROJECT_CREDENTIALS`, a JSON map of project path to `{ "clientId", "clientSecret" }`.
87
89
 
88
90
  By pushing the configuration, your project is fully integrated with the Intlayer CMS, enabling seamless dictionary management across teams.
@@ -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: Review Document
5
5
  description: Learn how to review documentation files for quality, consistency, and completeness across different 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: "Add `--ci` flag"
19
22
  - version: 9.0.0
20
23
  date: 2026-06-17
21
24
  changes: "Add --log option"
@@ -136,6 +139,10 @@ Whatever the mode, the run ends with a synthesis listing the documents that are
136
139
 
137
140
  > Example: `npx intlayer doc review --base-dir ./docs --env-file .env.production.local`
138
141
 
142
+ - **`--ci`**: Run the command in every Intlayer project of the monorepo (or only the current one when run from a project directory). Per-project credentials can be injected via `INTLAYER_PROJECT_CREDENTIALS`, a JSON map of project path to `{ "clientId", "clientSecret" }`.
143
+
144
+ > Example: `npx intlayer doc review --ci`
145
+
139
146
  **Log options:**
140
147
 
141
148
  - **`--verbose`**: Enable verbose logging for debugging. (defaults to true when using 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: Translate Document
5
5
  description: Learn how to automatically translate documentation files using AI translation services.
6
6
  keywords:
@@ -113,6 +113,10 @@ bun x intlayer doc translate
113
113
 
114
114
  > Example: `npx intlayer doc translate --base-dir ./docs --env-file .env.production.local`
115
115
 
116
+ - **`--ci`**: Run the command in every Intlayer project of the monorepo (or only the current one when run from a project directory). Per-project credentials can be injected via `INTLAYER_PROJECT_CREDENTIALS`, a JSON map of project path to `{ "clientId", "clientSecret" }`.
117
+
118
+ > Example: `npx intlayer doc translate --ci`
119
+
116
120
  **Log options:**
117
121
 
118
122
  - **`--verbose`**: Enable verbose logging for debugging. (defaults to true when using 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: Extract strings
5
5
  description: Learn how to extract strings from your components into a .content file adjacent to the component.
6
6
  keywords:
@@ -69,6 +69,7 @@ This command analyses your code files to extract strings from components into a
69
69
  - **`--env`**: Specify the environment.
70
70
  - **`--env-file`**: Provide a custom environment file.
71
71
  - **`--verbose`**: Enable verbose logging.
72
+ - **`--ci`**: Run the command in every Intlayer project of the monorepo (or only the current one when run from a project directory). Per-project credentials can be injected via `INTLAYER_PROJECT_CREDENTIALS`, a JSON map of project path to `{ "clientId", "clientSecret" }`.
72
73
 
73
74
  **Required plugins:**
74
75