@intlayer/docs 9.5.6 → 9.5.7

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 (601) hide show
  1. package/blog/ar/i18next_vs_intlayer-i18next.md +122 -15
  2. package/blog/ar/i18next_vs_intlayer.md +130 -16
  3. package/blog/ar/lingui_vs_intlayer.md +122 -15
  4. package/blog/ar/next-intl_vs_intlayer-next-intl.md +124 -15
  5. package/blog/ar/next-intl_vs_intlayer.md +136 -20
  6. package/blog/ar/vue-i18n_vs_intlayer-vue-i18n.md +119 -17
  7. package/blog/ar/vue-i18n_vs_intlayer.md +193 -31
  8. package/blog/ar/vue-i18n_vs_intlayer_benchmark.md +361 -0
  9. package/blog/de/i18next_vs_intlayer-i18next.md +122 -15
  10. package/blog/de/i18next_vs_intlayer.md +128 -14
  11. package/blog/de/lingui_vs_intlayer.md +122 -15
  12. package/blog/de/next-intl_vs_intlayer-next-intl.md +124 -15
  13. package/blog/de/next-intl_vs_intlayer.md +125 -15
  14. package/blog/de/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  15. package/blog/de/vue-i18n_vs_intlayer.md +193 -31
  16. package/blog/en/i18next_vs_intlayer-i18next.md +121 -14
  17. package/blog/en/i18next_vs_intlayer.md +128 -14
  18. package/blog/en/lingui_vs_intlayer.md +124 -15
  19. package/blog/en/next-intl_vs_intlayer-next-intl.md +123 -14
  20. package/blog/en/next-intl_vs_intlayer.md +125 -13
  21. package/blog/en/vue-i18n_vs_intlayer-vue-i18n.md +115 -15
  22. package/blog/en/vue-i18n_vs_intlayer.md +188 -27
  23. package/blog/en-GB/i18next_vs_intlayer-i18next.md +121 -14
  24. package/blog/en-GB/i18next_vs_intlayer.md +128 -14
  25. package/blog/en-GB/lingui_vs_intlayer.md +122 -15
  26. package/blog/en-GB/next-intl_vs_intlayer-next-intl.md +124 -15
  27. package/blog/en-GB/next-intl_vs_intlayer.md +125 -15
  28. package/blog/en-GB/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  29. package/blog/en-GB/vue-i18n_vs_intlayer.md +187 -25
  30. package/blog/en-GB/vue-i18n_vs_intlayer_benchmark.md +116 -0
  31. package/blog/es/i18next_vs_intlayer-i18next.md +122 -15
  32. package/blog/es/i18next_vs_intlayer.md +128 -14
  33. package/blog/es/lingui_vs_intlayer.md +122 -15
  34. package/blog/es/next-intl_vs_intlayer-next-intl.md +124 -15
  35. package/blog/es/next-intl_vs_intlayer.md +125 -15
  36. package/blog/es/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  37. package/blog/es/vue-i18n_vs_intlayer.md +193 -31
  38. package/blog/fr/i18next_vs_intlayer-i18next.md +122 -15
  39. package/blog/fr/i18next_vs_intlayer.md +128 -14
  40. package/blog/fr/lingui_vs_intlayer.md +122 -15
  41. package/blog/fr/next-intl_vs_intlayer-next-intl.md +124 -15
  42. package/blog/fr/next-intl_vs_intlayer.md +127 -15
  43. package/blog/fr/vue-i18n_vs_intlayer-vue-i18n.md +118 -17
  44. package/blog/fr/vue-i18n_vs_intlayer.md +192 -31
  45. package/blog/fr/vue-i18n_vs_intlayer_benchmark.md +329 -7
  46. package/blog/hi/i18next_vs_intlayer-i18next.md +122 -15
  47. package/blog/hi/i18next_vs_intlayer.md +130 -16
  48. package/blog/hi/lingui_vs_intlayer.md +122 -15
  49. package/blog/hi/next-intl_vs_intlayer-next-intl.md +124 -15
  50. package/blog/hi/next-intl_vs_intlayer.md +135 -19
  51. package/blog/hi/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  52. package/blog/hi/vue-i18n_vs_intlayer.md +193 -31
  53. package/blog/hi/vue-i18n_vs_intlayer_benchmark.md +361 -0
  54. package/blog/id/i18next_vs_intlayer-i18next.md +122 -15
  55. package/blog/id/i18next_vs_intlayer.md +128 -14
  56. package/blog/id/lingui_vs_intlayer.md +122 -15
  57. package/blog/id/next-intl_vs_intlayer-next-intl.md +124 -15
  58. package/blog/id/next-intl_vs_intlayer.md +135 -19
  59. package/blog/id/vue-i18n_vs_intlayer-vue-i18n.md +354 -2
  60. package/blog/id/vue-i18n_vs_intlayer.md +188 -26
  61. package/blog/id/vue-i18n_vs_intlayer_benchmark.md +327 -7
  62. package/blog/it/i18next_vs_intlayer-i18next.md +122 -15
  63. package/blog/it/i18next_vs_intlayer.md +128 -14
  64. package/blog/it/lingui_vs_intlayer.md +122 -15
  65. package/blog/it/next-intl_vs_intlayer-next-intl.md +124 -15
  66. package/blog/it/next-intl_vs_intlayer.md +125 -15
  67. package/blog/it/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  68. package/blog/it/vue-i18n_vs_intlayer.md +191 -31
  69. package/blog/it/vue-i18n_vs_intlayer_benchmark.md +332 -5
  70. package/blog/ja/i18next_vs_intlayer-i18next.md +122 -15
  71. package/blog/ja/i18next_vs_intlayer.md +129 -17
  72. package/blog/ja/lingui_vs_intlayer.md +122 -15
  73. package/blog/ja/next-intl_vs_intlayer-next-intl.md +124 -15
  74. package/blog/ja/next-intl_vs_intlayer.md +124 -14
  75. package/blog/ja/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  76. package/blog/ja/vue-i18n_vs_intlayer.md +193 -31
  77. package/blog/ja/vue-i18n_vs_intlayer_benchmark.md +361 -0
  78. package/blog/ko/i18next_vs_intlayer-i18next.md +122 -15
  79. package/blog/ko/i18next_vs_intlayer.md +129 -17
  80. package/blog/ko/lingui_vs_intlayer.md +122 -15
  81. package/blog/ko/next-intl_vs_intlayer-next-intl.md +124 -15
  82. package/blog/ko/next-intl_vs_intlayer.md +134 -18
  83. package/blog/ko/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  84. package/blog/ko/vue-i18n_vs_intlayer.md +193 -31
  85. package/blog/pl/i18next_vs_intlayer-i18next.md +122 -15
  86. package/blog/pl/i18next_vs_intlayer.md +128 -14
  87. package/blog/pl/lingui_vs_intlayer.md +122 -15
  88. package/blog/pl/next-intl_vs_intlayer-next-intl.md +124 -15
  89. package/blog/pl/next-intl_vs_intlayer.md +134 -18
  90. package/blog/pl/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  91. package/blog/pl/vue-i18n_vs_intlayer.md +188 -26
  92. package/blog/pl/vue-i18n_vs_intlayer_benchmark.md +361 -0
  93. package/blog/pt/i18next_vs_intlayer-i18next.md +122 -15
  94. package/blog/pt/i18next_vs_intlayer.md +128 -14
  95. package/blog/pt/lingui_vs_intlayer.md +122 -15
  96. package/blog/pt/next-intl_vs_intlayer-next-intl.md +124 -15
  97. package/blog/pt/next-intl_vs_intlayer.md +131 -15
  98. package/blog/pt/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  99. package/blog/pt/vue-i18n_vs_intlayer.md +193 -31
  100. package/blog/pt/vue-i18n_vs_intlayer_benchmark.md +361 -0
  101. package/blog/ru/i18next_vs_intlayer-i18next.md +122 -15
  102. package/blog/ru/i18next_vs_intlayer.md +130 -16
  103. package/blog/ru/lingui_vs_intlayer.md +122 -15
  104. package/blog/ru/next-intl_vs_intlayer-next-intl.md +125 -16
  105. package/blog/ru/next-intl_vs_intlayer.md +123 -13
  106. package/blog/ru/vue-i18n_vs_intlayer-vue-i18n.md +127 -27
  107. package/blog/ru/vue-i18n_vs_intlayer.md +193 -31
  108. package/blog/ru/vue-i18n_vs_intlayer_benchmark.md +326 -19
  109. package/blog/tr/i18next_vs_intlayer-i18next.md +122 -15
  110. package/blog/tr/i18next_vs_intlayer.md +128 -14
  111. package/blog/tr/lingui_vs_intlayer.md +122 -15
  112. package/blog/tr/next-intl_vs_intlayer-next-intl.md +124 -15
  113. package/blog/tr/next-intl_vs_intlayer.md +136 -20
  114. package/blog/tr/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  115. package/blog/tr/vue-i18n_vs_intlayer.md +188 -26
  116. package/blog/tr/vue-i18n_vs_intlayer_benchmark.md +361 -0
  117. package/blog/uk/i18next_vs_intlayer-i18next.md +122 -15
  118. package/blog/uk/i18next_vs_intlayer.md +130 -16
  119. package/blog/uk/lingui_vs_intlayer.md +122 -15
  120. package/blog/uk/next-intl_vs_intlayer-next-intl.md +124 -15
  121. package/blog/uk/next-intl_vs_intlayer.md +135 -19
  122. package/blog/uk/vue-i18n_vs_intlayer-vue-i18n.md +135 -17
  123. package/blog/uk/vue-i18n_vs_intlayer.md +188 -27
  124. package/blog/uk/vue-i18n_vs_intlayer_benchmark.md +361 -0
  125. package/blog/vi/i18next_vs_intlayer-i18next.md +122 -15
  126. package/blog/vi/i18next_vs_intlayer.md +128 -14
  127. package/blog/vi/lingui_vs_intlayer.md +122 -15
  128. package/blog/vi/next-intl_vs_intlayer-next-intl.md +124 -15
  129. package/blog/vi/next-intl_vs_intlayer.md +135 -19
  130. package/blog/vi/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  131. package/blog/vi/vue-i18n_vs_intlayer.md +188 -26
  132. package/blog/vi/vue-i18n_vs_intlayer_benchmark.md +361 -0
  133. package/blog/zh/i18next_vs_intlayer-i18next.md +122 -15
  134. package/blog/zh/i18next_vs_intlayer.md +128 -14
  135. package/blog/zh/lingui_vs_intlayer.md +122 -15
  136. package/blog/zh/next-intl_vs_intlayer-next-intl.md +124 -15
  137. package/blog/zh/next-intl_vs_intlayer.md +125 -15
  138. package/blog/zh/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  139. package/blog/zh/vue-i18n_vs_intlayer.md +192 -31
  140. package/blog/zh/vue-i18n_vs_intlayer_benchmark.md +340 -9
  141. package/dist/cjs/generated/docs.entry.cjs +40 -40
  142. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  143. package/dist/cjs/index.cjs +2 -2
  144. package/dist/esm/generated/docs.entry.mjs +40 -40
  145. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  146. package/dist/esm/index.mjs +2 -2
  147. package/dist/types/generated/docs.entry.d.ts +2 -2
  148. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  149. package/docs/ar/benchmark/nextjs.md +13 -13
  150. package/docs/ar/benchmark/solid.md +5 -5
  151. package/docs/ar/benchmark/svelte.md +4 -4
  152. package/docs/ar/benchmark/tanstack.md +14 -13
  153. package/docs/ar/benchmark/vue.md +5 -5
  154. package/docs/ar/chrome_extension.md +130 -0
  155. package/docs/ar/cli/index.md +6 -1
  156. package/docs/ar/cli/infra.md +162 -0
  157. package/docs/ar/cli/init.md +24 -1
  158. package/docs/ar/dictionary/html.md +173 -5
  159. package/docs/ar/dictionary/markdown.md +263 -1
  160. package/docs/ar/intlayer_with_analog.md +23 -1
  161. package/docs/ar/intlayer_with_angular_19.md +24 -1
  162. package/docs/ar/intlayer_with_angular_21.md +24 -1
  163. package/docs/ar/intlayer_with_astro.md +24 -1
  164. package/docs/ar/intlayer_with_astro_lit.md +25 -1
  165. package/docs/ar/intlayer_with_astro_preact.md +26 -1
  166. package/docs/ar/intlayer_with_astro_react.md +26 -1
  167. package/docs/ar/intlayer_with_astro_solid.md +26 -1
  168. package/docs/ar/intlayer_with_astro_svelte.md +25 -1
  169. package/docs/ar/intlayer_with_astro_vue.md +25 -1
  170. package/docs/ar/intlayer_with_remix_3.md +22 -1
  171. package/docs/ar/self_hosting.md +406 -231
  172. package/docs/de/benchmark/nextjs.md +13 -13
  173. package/docs/de/benchmark/solid.md +5 -5
  174. package/docs/de/benchmark/svelte.md +4 -4
  175. package/docs/de/benchmark/tanstack.md +14 -13
  176. package/docs/de/benchmark/vue.md +5 -5
  177. package/docs/de/chrome_extension.md +130 -0
  178. package/docs/de/cli/index.md +6 -1
  179. package/docs/de/cli/infra.md +162 -0
  180. package/docs/de/cli/init.md +24 -1
  181. package/docs/de/dictionary/html.md +173 -5
  182. package/docs/de/dictionary/markdown.md +263 -1
  183. package/docs/de/intlayer_with_analog.md +23 -1
  184. package/docs/de/intlayer_with_angular_19.md +24 -1
  185. package/docs/de/intlayer_with_angular_21.md +24 -1
  186. package/docs/de/intlayer_with_astro.md +24 -1
  187. package/docs/de/intlayer_with_astro_lit.md +25 -1
  188. package/docs/de/intlayer_with_astro_preact.md +26 -1
  189. package/docs/de/intlayer_with_astro_react.md +26 -1
  190. package/docs/de/intlayer_with_astro_solid.md +26 -1
  191. package/docs/de/intlayer_with_astro_svelte.md +25 -1
  192. package/docs/de/intlayer_with_astro_vue.md +25 -1
  193. package/docs/de/intlayer_with_remix_3.md +22 -1
  194. package/docs/de/self_hosting.md +404 -227
  195. package/docs/en/benchmark/nextjs.md +13 -13
  196. package/docs/en/benchmark/solid.md +5 -5
  197. package/docs/en/benchmark/svelte.md +4 -4
  198. package/docs/en/benchmark/tanstack.md +14 -13
  199. package/docs/en/benchmark/vue.md +5 -5
  200. package/docs/en/chrome_extension.md +130 -0
  201. package/docs/en/cli/index.md +6 -1
  202. package/docs/en/cli/infra.md +175 -0
  203. package/docs/en/cli/init.md +25 -1
  204. package/docs/en/dictionary/html.md +173 -5
  205. package/docs/en/dictionary/markdown.md +263 -1
  206. package/docs/en/intlayer_with_analog.md +23 -1
  207. package/docs/en/intlayer_with_angular_19.md +24 -1
  208. package/docs/en/intlayer_with_angular_21.md +24 -1
  209. package/docs/en/intlayer_with_astro.md +24 -1
  210. package/docs/en/intlayer_with_astro_lit.md +25 -1
  211. package/docs/en/intlayer_with_astro_preact.md +26 -1
  212. package/docs/en/intlayer_with_astro_react.md +26 -1
  213. package/docs/en/intlayer_with_astro_solid.md +26 -1
  214. package/docs/en/intlayer_with_astro_svelte.md +25 -1
  215. package/docs/en/intlayer_with_astro_vue.md +25 -1
  216. package/docs/en/intlayer_with_remix_3.md +22 -1
  217. package/docs/en/self_hosting.md +418 -176
  218. package/docs/en-GB/benchmark/nextjs.md +13 -13
  219. package/docs/en-GB/benchmark/solid.md +5 -5
  220. package/docs/en-GB/benchmark/svelte.md +4 -4
  221. package/docs/en-GB/benchmark/tanstack.md +14 -13
  222. package/docs/en-GB/benchmark/vue.md +5 -5
  223. package/docs/en-GB/chrome_extension.md +130 -0
  224. package/docs/en-GB/cli/index.md +6 -1
  225. package/docs/en-GB/cli/infra.md +162 -0
  226. package/docs/en-GB/cli/init.md +24 -1
  227. package/docs/en-GB/dictionary/html.md +173 -5
  228. package/docs/en-GB/dictionary/markdown.md +263 -1
  229. package/docs/en-GB/intlayer_with_analog.md +23 -1
  230. package/docs/en-GB/intlayer_with_angular_19.md +24 -1
  231. package/docs/en-GB/intlayer_with_angular_21.md +24 -1
  232. package/docs/en-GB/intlayer_with_astro.md +24 -1
  233. package/docs/en-GB/intlayer_with_astro_lit.md +25 -1
  234. package/docs/en-GB/intlayer_with_astro_preact.md +26 -1
  235. package/docs/en-GB/intlayer_with_astro_react.md +26 -1
  236. package/docs/en-GB/intlayer_with_astro_solid.md +26 -1
  237. package/docs/en-GB/intlayer_with_astro_svelte.md +25 -1
  238. package/docs/en-GB/intlayer_with_astro_vue.md +25 -1
  239. package/docs/en-GB/intlayer_with_remix_3.md +22 -1
  240. package/docs/en-GB/self_hosting.md +381 -206
  241. package/docs/es/benchmark/nextjs.md +13 -13
  242. package/docs/es/benchmark/solid.md +5 -5
  243. package/docs/es/benchmark/svelte.md +4 -4
  244. package/docs/es/benchmark/tanstack.md +14 -13
  245. package/docs/es/benchmark/vue.md +5 -5
  246. package/docs/es/chrome_extension.md +130 -0
  247. package/docs/es/cli/index.md +6 -1
  248. package/docs/es/cli/infra.md +162 -0
  249. package/docs/es/cli/init.md +24 -1
  250. package/docs/es/dictionary/html.md +173 -5
  251. package/docs/es/dictionary/markdown.md +263 -1
  252. package/docs/es/intlayer_with_analog.md +23 -1
  253. package/docs/es/intlayer_with_angular_19.md +24 -1
  254. package/docs/es/intlayer_with_angular_21.md +24 -1
  255. package/docs/es/intlayer_with_astro.md +24 -1
  256. package/docs/es/intlayer_with_astro_lit.md +25 -1
  257. package/docs/es/intlayer_with_astro_preact.md +26 -1
  258. package/docs/es/intlayer_with_astro_react.md +26 -1
  259. package/docs/es/intlayer_with_astro_solid.md +26 -1
  260. package/docs/es/intlayer_with_astro_svelte.md +25 -1
  261. package/docs/es/intlayer_with_astro_vue.md +25 -1
  262. package/docs/es/intlayer_with_remix_3.md +22 -1
  263. package/docs/es/self_hosting.md +400 -223
  264. package/docs/fr/benchmark/nextjs.md +13 -13
  265. package/docs/fr/benchmark/solid.md +5 -5
  266. package/docs/fr/benchmark/svelte.md +4 -4
  267. package/docs/fr/benchmark/tanstack.md +14 -13
  268. package/docs/fr/benchmark/vue.md +5 -5
  269. package/docs/fr/chrome_extension.md +130 -0
  270. package/docs/fr/cli/index.md +6 -1
  271. package/docs/fr/cli/infra.md +162 -0
  272. package/docs/fr/cli/init.md +24 -1
  273. package/docs/fr/dictionary/html.md +173 -5
  274. package/docs/fr/dictionary/markdown.md +265 -4
  275. package/docs/fr/intlayer_with_analog.md +23 -1
  276. package/docs/fr/intlayer_with_angular_19.md +24 -1
  277. package/docs/fr/intlayer_with_angular_21.md +24 -1
  278. package/docs/fr/intlayer_with_astro.md +24 -1
  279. package/docs/fr/intlayer_with_astro_lit.md +25 -1
  280. package/docs/fr/intlayer_with_astro_preact.md +26 -1
  281. package/docs/fr/intlayer_with_astro_react.md +26 -1
  282. package/docs/fr/intlayer_with_astro_solid.md +26 -1
  283. package/docs/fr/intlayer_with_astro_svelte.md +25 -1
  284. package/docs/fr/intlayer_with_astro_vue.md +25 -1
  285. package/docs/fr/intlayer_with_remix_3.md +22 -1
  286. package/docs/fr/self_hosting.md +401 -224
  287. package/docs/hi/benchmark/nextjs.md +13 -13
  288. package/docs/hi/benchmark/solid.md +5 -5
  289. package/docs/hi/benchmark/svelte.md +4 -4
  290. package/docs/hi/benchmark/tanstack.md +14 -13
  291. package/docs/hi/benchmark/vue.md +5 -5
  292. package/docs/hi/chrome_extension.md +130 -0
  293. package/docs/hi/cli/index.md +6 -1
  294. package/docs/hi/cli/infra.md +162 -0
  295. package/docs/hi/cli/init.md +24 -1
  296. package/docs/hi/dictionary/html.md +173 -5
  297. package/docs/hi/dictionary/markdown.md +263 -1
  298. package/docs/hi/intlayer_with_analog.md +23 -1
  299. package/docs/hi/intlayer_with_angular_19.md +24 -1
  300. package/docs/hi/intlayer_with_angular_21.md +24 -1
  301. package/docs/hi/intlayer_with_astro.md +24 -1
  302. package/docs/hi/intlayer_with_astro_lit.md +25 -1
  303. package/docs/hi/intlayer_with_astro_preact.md +26 -1
  304. package/docs/hi/intlayer_with_astro_react.md +26 -1
  305. package/docs/hi/intlayer_with_astro_solid.md +26 -1
  306. package/docs/hi/intlayer_with_astro_svelte.md +25 -1
  307. package/docs/hi/intlayer_with_astro_vue.md +25 -1
  308. package/docs/hi/intlayer_with_remix_3.md +22 -1
  309. package/docs/hi/self_hosting.md +409 -235
  310. package/docs/id/benchmark/nextjs.md +13 -13
  311. package/docs/id/benchmark/solid.md +5 -5
  312. package/docs/id/benchmark/svelte.md +4 -4
  313. package/docs/id/benchmark/tanstack.md +14 -13
  314. package/docs/id/benchmark/vue.md +5 -5
  315. package/docs/id/chrome_extension.md +130 -0
  316. package/docs/id/cli/index.md +6 -1
  317. package/docs/id/cli/infra.md +162 -0
  318. package/docs/id/cli/init.md +24 -1
  319. package/docs/id/dictionary/html.md +173 -5
  320. package/docs/id/dictionary/markdown.md +263 -1
  321. package/docs/id/intlayer_with_analog.md +23 -1
  322. package/docs/id/intlayer_with_angular_19.md +24 -1
  323. package/docs/id/intlayer_with_angular_21.md +24 -1
  324. package/docs/id/intlayer_with_astro.md +24 -1
  325. package/docs/id/intlayer_with_astro_lit.md +25 -1
  326. package/docs/id/intlayer_with_astro_preact.md +26 -1
  327. package/docs/id/intlayer_with_astro_react.md +26 -1
  328. package/docs/id/intlayer_with_astro_solid.md +26 -1
  329. package/docs/id/intlayer_with_astro_svelte.md +25 -1
  330. package/docs/id/intlayer_with_astro_vue.md +25 -1
  331. package/docs/id/intlayer_with_remix_3.md +22 -1
  332. package/docs/id/self_hosting.md +416 -243
  333. package/docs/it/benchmark/nextjs.md +13 -13
  334. package/docs/it/benchmark/solid.md +5 -5
  335. package/docs/it/benchmark/svelte.md +4 -4
  336. package/docs/it/benchmark/tanstack.md +14 -13
  337. package/docs/it/benchmark/vue.md +5 -5
  338. package/docs/it/chrome_extension.md +130 -0
  339. package/docs/it/cli/index.md +6 -1
  340. package/docs/it/cli/infra.md +162 -0
  341. package/docs/it/cli/init.md +24 -1
  342. package/docs/it/dictionary/html.md +173 -5
  343. package/docs/it/dictionary/markdown.md +263 -1
  344. package/docs/it/intlayer_with_analog.md +23 -1
  345. package/docs/it/intlayer_with_angular_19.md +24 -1
  346. package/docs/it/intlayer_with_angular_21.md +24 -1
  347. package/docs/it/intlayer_with_astro.md +24 -1
  348. package/docs/it/intlayer_with_astro_lit.md +25 -1
  349. package/docs/it/intlayer_with_astro_preact.md +26 -1
  350. package/docs/it/intlayer_with_astro_react.md +26 -1
  351. package/docs/it/intlayer_with_astro_solid.md +26 -1
  352. package/docs/it/intlayer_with_astro_svelte.md +25 -1
  353. package/docs/it/intlayer_with_astro_vue.md +25 -1
  354. package/docs/it/intlayer_with_remix_3.md +22 -1
  355. package/docs/it/self_hosting.md +412 -237
  356. package/docs/ja/benchmark/nextjs.md +13 -13
  357. package/docs/ja/benchmark/solid.md +5 -5
  358. package/docs/ja/benchmark/svelte.md +4 -4
  359. package/docs/ja/benchmark/tanstack.md +13 -12
  360. package/docs/ja/benchmark/vue.md +5 -5
  361. package/docs/ja/chrome_extension.md +130 -0
  362. package/docs/ja/cli/index.md +6 -1
  363. package/docs/ja/cli/infra.md +162 -0
  364. package/docs/ja/cli/init.md +24 -1
  365. package/docs/ja/dictionary/html.md +173 -5
  366. package/docs/ja/dictionary/markdown.md +263 -1
  367. package/docs/ja/intlayer_with_analog.md +23 -1
  368. package/docs/ja/intlayer_with_angular_19.md +24 -1
  369. package/docs/ja/intlayer_with_angular_21.md +24 -1
  370. package/docs/ja/intlayer_with_astro.md +24 -1
  371. package/docs/ja/intlayer_with_astro_lit.md +25 -1
  372. package/docs/ja/intlayer_with_astro_preact.md +26 -1
  373. package/docs/ja/intlayer_with_astro_react.md +26 -1
  374. package/docs/ja/intlayer_with_astro_solid.md +26 -1
  375. package/docs/ja/intlayer_with_astro_svelte.md +25 -1
  376. package/docs/ja/intlayer_with_astro_vue.md +25 -1
  377. package/docs/ja/intlayer_with_remix_3.md +22 -1
  378. package/docs/ja/self_hosting.md +398 -223
  379. package/docs/ko/benchmark/nextjs.md +13 -13
  380. package/docs/ko/benchmark/solid.md +5 -5
  381. package/docs/ko/benchmark/svelte.md +4 -4
  382. package/docs/ko/benchmark/tanstack.md +14 -13
  383. package/docs/ko/benchmark/vue.md +5 -5
  384. package/docs/ko/chrome_extension.md +130 -0
  385. package/docs/ko/cli/index.md +6 -1
  386. package/docs/ko/cli/infra.md +162 -0
  387. package/docs/ko/cli/init.md +24 -1
  388. package/docs/ko/dictionary/html.md +173 -5
  389. package/docs/ko/dictionary/markdown.md +263 -1
  390. package/docs/ko/intlayer_with_analog.md +23 -1
  391. package/docs/ko/intlayer_with_angular_19.md +24 -1
  392. package/docs/ko/intlayer_with_angular_21.md +24 -1
  393. package/docs/ko/intlayer_with_astro.md +24 -1
  394. package/docs/ko/intlayer_with_astro_lit.md +25 -1
  395. package/docs/ko/intlayer_with_astro_preact.md +26 -1
  396. package/docs/ko/intlayer_with_astro_react.md +26 -1
  397. package/docs/ko/intlayer_with_astro_solid.md +26 -1
  398. package/docs/ko/intlayer_with_astro_svelte.md +25 -1
  399. package/docs/ko/intlayer_with_astro_vue.md +25 -1
  400. package/docs/ko/intlayer_with_remix_3.md +22 -1
  401. package/docs/ko/self_hosting.md +411 -238
  402. package/docs/pl/benchmark/nextjs.md +13 -13
  403. package/docs/pl/benchmark/solid.md +5 -5
  404. package/docs/pl/benchmark/svelte.md +4 -4
  405. package/docs/pl/benchmark/tanstack.md +14 -13
  406. package/docs/pl/benchmark/vue.md +5 -5
  407. package/docs/pl/chrome_extension.md +130 -0
  408. package/docs/pl/cli/index.md +6 -1
  409. package/docs/pl/cli/infra.md +162 -0
  410. package/docs/pl/cli/init.md +24 -1
  411. package/docs/pl/dictionary/html.md +173 -5
  412. package/docs/pl/dictionary/markdown.md +263 -1
  413. package/docs/pl/intlayer_with_analog.md +23 -1
  414. package/docs/pl/intlayer_with_angular_19.md +24 -1
  415. package/docs/pl/intlayer_with_angular_21.md +24 -1
  416. package/docs/pl/intlayer_with_astro.md +24 -1
  417. package/docs/pl/intlayer_with_astro_lit.md +25 -1
  418. package/docs/pl/intlayer_with_astro_preact.md +26 -1
  419. package/docs/pl/intlayer_with_astro_react.md +26 -1
  420. package/docs/pl/intlayer_with_astro_solid.md +26 -1
  421. package/docs/pl/intlayer_with_astro_svelte.md +25 -1
  422. package/docs/pl/intlayer_with_astro_vue.md +25 -1
  423. package/docs/pl/intlayer_with_remix_3.md +22 -1
  424. package/docs/pl/self_hosting.md +408 -233
  425. package/docs/pt/benchmark/nextjs.md +13 -13
  426. package/docs/pt/benchmark/solid.md +5 -5
  427. package/docs/pt/benchmark/svelte.md +4 -4
  428. package/docs/pt/benchmark/tanstack.md +14 -13
  429. package/docs/pt/benchmark/vue.md +5 -5
  430. package/docs/pt/chrome_extension.md +130 -0
  431. package/docs/pt/cli/index.md +6 -1
  432. package/docs/pt/cli/infra.md +162 -0
  433. package/docs/pt/cli/init.md +24 -1
  434. package/docs/pt/dictionary/html.md +173 -5
  435. package/docs/pt/dictionary/markdown.md +263 -1
  436. package/docs/pt/intlayer_with_analog.md +23 -1
  437. package/docs/pt/intlayer_with_angular_19.md +24 -1
  438. package/docs/pt/intlayer_with_angular_21.md +24 -1
  439. package/docs/pt/intlayer_with_astro.md +24 -1
  440. package/docs/pt/intlayer_with_astro_lit.md +25 -1
  441. package/docs/pt/intlayer_with_astro_preact.md +26 -1
  442. package/docs/pt/intlayer_with_astro_react.md +26 -1
  443. package/docs/pt/intlayer_with_astro_solid.md +26 -1
  444. package/docs/pt/intlayer_with_astro_svelte.md +25 -1
  445. package/docs/pt/intlayer_with_astro_vue.md +25 -1
  446. package/docs/pt/intlayer_with_remix_3.md +22 -1
  447. package/docs/pt/self_hosting.md +399 -224
  448. package/docs/ru/benchmark/nextjs.md +13 -13
  449. package/docs/ru/benchmark/solid.md +5 -5
  450. package/docs/ru/benchmark/svelte.md +4 -4
  451. package/docs/ru/benchmark/tanstack.md +14 -13
  452. package/docs/ru/benchmark/vue.md +5 -5
  453. package/docs/ru/chrome_extension.md +130 -0
  454. package/docs/ru/cli/index.md +6 -1
  455. package/docs/ru/cli/infra.md +162 -0
  456. package/docs/ru/cli/init.md +24 -1
  457. package/docs/ru/dictionary/html.md +173 -5
  458. package/docs/ru/dictionary/markdown.md +263 -1
  459. package/docs/ru/intlayer_with_analog.md +23 -1
  460. package/docs/ru/intlayer_with_angular_19.md +24 -1
  461. package/docs/ru/intlayer_with_angular_21.md +24 -1
  462. package/docs/ru/intlayer_with_astro.md +24 -1
  463. package/docs/ru/intlayer_with_astro_lit.md +25 -1
  464. package/docs/ru/intlayer_with_astro_preact.md +26 -1
  465. package/docs/ru/intlayer_with_astro_react.md +26 -1
  466. package/docs/ru/intlayer_with_astro_solid.md +26 -1
  467. package/docs/ru/intlayer_with_astro_svelte.md +25 -1
  468. package/docs/ru/intlayer_with_astro_vue.md +25 -1
  469. package/docs/ru/intlayer_with_remix_3.md +22 -1
  470. package/docs/ru/self_hosting.md +403 -228
  471. package/docs/tr/benchmark/nextjs.md +13 -13
  472. package/docs/tr/benchmark/solid.md +5 -5
  473. package/docs/tr/benchmark/svelte.md +4 -4
  474. package/docs/tr/benchmark/tanstack.md +14 -13
  475. package/docs/tr/benchmark/vue.md +5 -5
  476. package/docs/tr/chrome_extension.md +130 -0
  477. package/docs/tr/cli/index.md +6 -1
  478. package/docs/tr/cli/infra.md +162 -0
  479. package/docs/tr/cli/init.md +24 -1
  480. package/docs/tr/dictionary/html.md +173 -5
  481. package/docs/tr/dictionary/markdown.md +263 -1
  482. package/docs/tr/intlayer_with_analog.md +23 -1
  483. package/docs/tr/intlayer_with_angular_19.md +24 -1
  484. package/docs/tr/intlayer_with_angular_21.md +24 -1
  485. package/docs/tr/intlayer_with_astro.md +24 -1
  486. package/docs/tr/intlayer_with_astro_lit.md +25 -1
  487. package/docs/tr/intlayer_with_astro_preact.md +26 -1
  488. package/docs/tr/intlayer_with_astro_react.md +26 -1
  489. package/docs/tr/intlayer_with_astro_solid.md +26 -1
  490. package/docs/tr/intlayer_with_astro_svelte.md +25 -1
  491. package/docs/tr/intlayer_with_astro_vue.md +25 -1
  492. package/docs/tr/intlayer_with_remix_3.md +22 -1
  493. package/docs/tr/self_hosting.md +410 -234
  494. package/docs/uk/benchmark/nextjs.md +13 -13
  495. package/docs/uk/benchmark/solid.md +5 -5
  496. package/docs/uk/benchmark/svelte.md +4 -4
  497. package/docs/uk/benchmark/tanstack.md +14 -13
  498. package/docs/uk/benchmark/vue.md +5 -5
  499. package/docs/uk/chrome_extension.md +130 -0
  500. package/docs/uk/cli/index.md +6 -1
  501. package/docs/uk/cli/infra.md +162 -0
  502. package/docs/uk/cli/init.md +24 -1
  503. package/docs/uk/dictionary/html.md +173 -5
  504. package/docs/uk/dictionary/markdown.md +263 -1
  505. package/docs/uk/intlayer_with_analog.md +23 -1
  506. package/docs/uk/intlayer_with_angular_19.md +24 -1
  507. package/docs/uk/intlayer_with_angular_21.md +24 -1
  508. package/docs/uk/intlayer_with_astro.md +24 -1
  509. package/docs/uk/intlayer_with_astro_lit.md +25 -1
  510. package/docs/uk/intlayer_with_astro_preact.md +26 -1
  511. package/docs/uk/intlayer_with_astro_react.md +26 -1
  512. package/docs/uk/intlayer_with_astro_solid.md +26 -1
  513. package/docs/uk/intlayer_with_astro_svelte.md +25 -1
  514. package/docs/uk/intlayer_with_astro_vue.md +25 -1
  515. package/docs/uk/intlayer_with_remix_3.md +22 -1
  516. package/docs/uk/self_hosting.md +413 -238
  517. package/docs/vi/benchmark/nextjs.md +13 -13
  518. package/docs/vi/benchmark/solid.md +5 -5
  519. package/docs/vi/benchmark/svelte.md +4 -4
  520. package/docs/vi/benchmark/tanstack.md +14 -13
  521. package/docs/vi/benchmark/vue.md +5 -5
  522. package/docs/vi/chrome_extension.md +130 -0
  523. package/docs/vi/cli/index.md +6 -1
  524. package/docs/vi/cli/infra.md +162 -0
  525. package/docs/vi/cli/init.md +24 -1
  526. package/docs/vi/dictionary/html.md +173 -5
  527. package/docs/vi/dictionary/markdown.md +263 -1
  528. package/docs/vi/intlayer_with_analog.md +23 -1
  529. package/docs/vi/intlayer_with_angular_19.md +24 -1
  530. package/docs/vi/intlayer_with_angular_21.md +24 -1
  531. package/docs/vi/intlayer_with_astro.md +24 -1
  532. package/docs/vi/intlayer_with_astro_lit.md +25 -1
  533. package/docs/vi/intlayer_with_astro_preact.md +26 -1
  534. package/docs/vi/intlayer_with_astro_react.md +26 -1
  535. package/docs/vi/intlayer_with_astro_solid.md +26 -1
  536. package/docs/vi/intlayer_with_astro_svelte.md +25 -1
  537. package/docs/vi/intlayer_with_astro_vue.md +25 -1
  538. package/docs/vi/intlayer_with_remix_3.md +22 -1
  539. package/docs/vi/self_hosting.md +408 -234
  540. package/docs/zh/benchmark/nextjs.md +13 -13
  541. package/docs/zh/benchmark/solid.md +5 -5
  542. package/docs/zh/benchmark/svelte.md +4 -4
  543. package/docs/zh/benchmark/tanstack.md +14 -13
  544. package/docs/zh/benchmark/vue.md +5 -5
  545. package/docs/zh/chrome_extension.md +130 -0
  546. package/docs/zh/cli/index.md +6 -1
  547. package/docs/zh/cli/infra.md +162 -0
  548. package/docs/zh/cli/init.md +24 -1
  549. package/docs/zh/dictionary/html.md +172 -5
  550. package/docs/zh/dictionary/markdown.md +262 -1
  551. package/docs/zh/intlayer_with_analog.md +23 -1
  552. package/docs/zh/intlayer_with_angular_19.md +24 -1
  553. package/docs/zh/intlayer_with_angular_21.md +24 -1
  554. package/docs/zh/intlayer_with_astro.md +24 -1
  555. package/docs/zh/intlayer_with_astro_lit.md +25 -1
  556. package/docs/zh/intlayer_with_astro_preact.md +26 -1
  557. package/docs/zh/intlayer_with_astro_react.md +26 -1
  558. package/docs/zh/intlayer_with_astro_solid.md +26 -1
  559. package/docs/zh/intlayer_with_astro_svelte.md +25 -1
  560. package/docs/zh/intlayer_with_astro_vue.md +25 -1
  561. package/docs/zh/intlayer_with_remix_3.md +22 -1
  562. package/docs/zh/self_hosting.md +410 -237
  563. package/legal/ar/privacy_notice.md +9 -3
  564. package/legal/de/privacy_notice.md +9 -3
  565. package/legal/en/privacy_notice.md +10 -3
  566. package/legal/en-GB/privacy_notice.md +9 -3
  567. package/legal/es/privacy_notice.md +9 -3
  568. package/legal/fr/privacy_notice.md +9 -3
  569. package/legal/hi/privacy_notice.md +9 -3
  570. package/legal/id/privacy_notice.md +9 -3
  571. package/legal/it/privacy_notice.md +9 -3
  572. package/legal/ja/privacy_notice.md +9 -3
  573. package/legal/ko/privacy_notice.md +9 -3
  574. package/legal/pl/privacy_notice.md +9 -3
  575. package/legal/pt/privacy_notice.md +9 -3
  576. package/legal/ru/privacy_notice.md +9 -3
  577. package/legal/tr/privacy_notice.md +9 -3
  578. package/legal/uk/privacy_notice.md +9 -3
  579. package/legal/vi/privacy_notice.md +9 -3
  580. package/legal/zh/privacy_notice.md +9 -3
  581. package/package.json +1 -1
  582. package/src/generated/docs.entry.ts +40 -40
  583. package/docs/ar/roadmap.md +0 -321
  584. package/docs/de/roadmap.md +0 -322
  585. package/docs/en/intlayer_with_astro_vanilla.md +0 -713
  586. package/docs/en/roadmap.md +0 -325
  587. package/docs/en-GB/roadmap.md +0 -322
  588. package/docs/es/roadmap.md +0 -322
  589. package/docs/fr/roadmap.md +0 -322
  590. package/docs/hi/roadmap.md +0 -322
  591. package/docs/id/roadmap.md +0 -325
  592. package/docs/it/roadmap.md +0 -322
  593. package/docs/ja/roadmap.md +0 -322
  594. package/docs/ko/roadmap.md +0 -322
  595. package/docs/pl/roadmap.md +0 -325
  596. package/docs/pt/roadmap.md +0 -322
  597. package/docs/ru/roadmap.md +0 -322
  598. package/docs/tr/roadmap.md +0 -325
  599. package/docs/uk/roadmap.md +0 -325
  600. package/docs/vi/roadmap.md +0 -325
  601. package/docs/zh/roadmap.md +0 -322
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-09-13
3
- updatedAt: 2026-09-13
3
+ updatedAt: 2026-09-22
4
4
  title: "i18next vs Intlayer: Benchmark & Comparatif 2026"
5
5
  description: "react-i18next et next-i18next mesurés face à Intlayer sur Next.js et TanStack Start. Taille de bundle, fuites de contenu, réactivité au changement de langue et expérience développeur."
6
6
  keywords:
@@ -25,6 +25,8 @@ author: aymericzip
25
25
 
26
26
  # i18next VS Intlayer | Benchmark d'internationalisation (i18n) React & Next.js
27
27
 
28
+ ![i18next VS Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/assets/i18next-next-intl-intlayer.webp?raw=true)
29
+
28
30
  `i18next` est le framework d'i18n le plus utilisé de l'écosystème JavaScript. À travers `react-i18next` et `next-i18next`, il alimente une grande partie des applications React et Next.js. Intlayer est une alternative basée sur un compilateur, découpée par composant.
29
31
 
30
32
  Cet article les compare sur des mesures concrètes plutôt que sur des listes de fonctionnalités. Les chiffres proviennent de [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom), une suite open source qui compile la même application avec chaque bibliothèque et enregistre ce que le navigateur télécharge réellement.
@@ -99,6 +101,10 @@ Pour chaque build, la suite enregistre:
99
101
 
100
102
  ### Résultats sur Next.js (`next-i18next`)
101
103
 
104
+ Sélectionnez les métriques et les bibliothèques qui vous intéressent :
105
+
106
+ <I18nBenchmark framework="nextjs" vertical/>
107
+
102
108
  | Bibliothèque | Stratégie | Lib size (gz) | Page JS avg (gz) | Locale leak | Page leak | Component avg (gz) | Réactivité E2E | Hydratation |
103
109
  | --------------------------------- | -------------- | ------------: | ---------------: | ----------: | --------: | -----------------: | -------------: | ----------: |
104
110
  | **base** (sans i18n) | - | 0.0 KB | 141.0 KB | 0.0% | 0.0% | 0.9 KB | 13.4 ms | 11.8 ms |
@@ -119,6 +125,15 @@ Pour chaque build, la suite enregistre:
119
125
  - **Taille des composants.** Un composant utilisant `useTranslation()` pèse entre 26 et 79 KB selon la configuration; le même composant avec `useIntlayer()` ne pèse que 6.9 KB.
120
126
  - **L'hydratation** monte à 27.7 ms dans la configuration `dynamic`: l'instance i18next s'initialise et résout son backend côté client avant que React ne puisse hydrater la page.
121
127
 
128
+ <ClickToOpenIframe
129
+ src="https://intlayer.org/markdown?url=https%3A%2F%2Fraw.githubusercontent.com%2Fintlayer-org%2Fbenchmark-i18n%2Fmain%2Freport%2Fscripts%2Fsummarize-nextjs.md"
130
+ width="100%"
131
+ height="600px"
132
+ style="border:none;"
133
+ />
134
+
135
+ > Tableau complet, chaque bibliothèque et chaque stratégie, dans le [rapport de benchmark Next.js](https://intlayer.org/fr/doc/benchmark/nextjs).
136
+
122
137
  ### Résultats sur TanStack Start (`react-i18next`)
123
138
 
124
139
  La même application de test sur TanStack Start avec `react-i18next` pur, ce qui isole les dépendances propres à Next.js.
@@ -141,8 +156,19 @@ La même application de test sur TanStack Start avec `react-i18next` pur, ce qui
141
156
  - La ligne `static` d'Intlayer présente déjà **0% de fuite de page** car seuls les dictionnaires importés par les composants de la page sont inclus dans le bundle. Activer `importMode: 'dynamic'` supprime également la fuite de locale.
142
157
  - **Taille des composants**: 24 à 27 KB par composant avec `react-i18next` contre 6 à 8 KB avec Intlayer. `useTranslation()` lie chaque composant à l'instance globale d'i18next.
143
158
 
159
+ <ClickToOpenIframe
160
+ src="https://intlayer.org/markdown?url=https%3A%2F%2Fraw.githubusercontent.com%2Fintlayer-org%2Fbenchmark-i18n%2Fmain%2Freport%2Fscripts%2Fsummarize-tanstack.md"
161
+ width="100%"
162
+ height="600px"
163
+ style="border:none;"
164
+ />
165
+
166
+ > Tableau complet dans le [rapport de benchmark TanStack Start](https://intlayer.org/fr/doc/benchmark/tanstack).
167
+
144
168
  ## Pourquoi un tel écart? Instance globale vs dictionnaires compilés
145
169
 
170
+ ![Centralized catalogs versus per-component dictionaries](https://github.com/aymericzip/intlayer/blob/main/docs/assets/project_stucture_18n_vs_intlayer.png?raw=true)
171
+
146
172
  `i18next` a été pensé en 2012 comme un runtime: une instance globale conserve un dépôt de ressources, des plugins l'enrichissent, et `t()` résout les clés au rendu. C'est ce qui le rend si flexible (n'importe quel framework, backend ou format) et également ce qui le rend lourd:
147
173
 
148
174
  ```bash
@@ -166,7 +192,13 @@ La même application de test sur TanStack Start avec `react-i18next` pur, ce qui
166
192
  └── page.tsx # doit savoir qu'elle requiert ["common", "about"]
167
193
  ```
168
194
 
169
- L'instance ne peut pas anticiper les clés qu'un composant demandera, elle conserve donc tous les namespaces que vous lui demandez de charger. Optimiser signifie que **vous** devez découper les catalogues en namespaces, **vous** devez lister les namespaces nécessaires à chaque page, et **vous** devez maintenir cette liste à jour quand les composants se déplacent. Comme le soulignent les [notes du benchmark](https://github.com/intlayer-org/benchmark-bloom/blob/main/report/NOTE.md): "maintenir la sécurité des types et savoir exactement quel namespace inclure sur quelle page est un cauchemar".
195
+ L'instance ne peut pas anticiper les clés qu'un composant demandera, elle conserve donc tous les namespaces que vous lui demandez de charger. Optimiser signifie que **vous** devez découper les catalogues en namespaces, **vous** devez lister les namespaces nécessaires à chaque page, et **vous** devez maintenir cette liste à jour quand les composants se déplacent.
196
+
197
+ La facture augmente sur deux axes à la fois, les pages et les locales :
198
+
199
+ ![Theoretical content leakage by architecture](https://github.com/aymericzip/intlayer/blob/main/docs/assets/theorical_content_leakage.webp?raw=true)
200
+
201
+ Comme le soulignent les [notes du benchmark](https://github.com/intlayer-org/benchmark-bloom/blob/main/report/NOTE.md): "maintenir la sécurité des types et savoir exactement quel namespace inclure sur quelle page est un cauchemar".
170
202
 
171
203
  Intlayer élimine l'instance. Le contenu est déclaré à côté du composant, et le compilateur résout le graphe de dépendances au build:
172
204
 
@@ -193,7 +225,8 @@ Intlayer élimine l'instance. Le contenu est déclaré à côté du composant, e
193
225
 
194
226
  ### Configuration
195
227
 
196
- **next-i18next (App Router)**
228
+ <Tabs defaultTab="intlayer" group="techno">
229
+ <Tab label="next-i18next" value="i18next">
197
230
 
198
231
  ```ts fileName="src/app/i18n/server.ts"
199
232
  import { createInstance } from "i18next";
@@ -228,7 +261,8 @@ export const initI18next = async (
228
261
 
229
262
  Il faut y ajouter un `I18nProvider` côté client qui recrée l'instance avec les mêmes options, un `generateStaticParams`, et une liste de `namespaces` sur chaque page.
230
263
 
231
- **Intlayer**
264
+ </Tab>
265
+ <Tab label="Intlayer" value="intlayer">
232
266
 
233
267
  ```ts fileName="intlayer.config.ts"
234
268
  import { type IntlayerConfig, Locales } from "intlayer";
@@ -264,9 +298,13 @@ const LocaleLayout: NextLayoutIntlayer = async ({ children, params }) => {
264
298
  export default LocaleLayout;
265
299
  ```
266
300
 
301
+ </Tab>
302
+ </Tabs>
303
+
267
304
  ### Composant client
268
305
 
269
- **react-i18next**
306
+ <Tabs defaultTab="intlayer" group="techno">
307
+ <Tab label="react-i18next" value="i18next">
270
308
 
271
309
  ```json fileName="src/locales/en/about.json"
272
310
  {
@@ -304,7 +342,8 @@ export const Counter = () => {
304
342
 
305
343
  > La page affichant ce composant doit charger le namespace `about`, et `t("counter.label")` reste une simple chaîne de caractères non typée à moins d'étendre `CustomTypeOptions`.
306
344
 
307
- **Intlayer**
345
+ </Tab>
346
+ <Tab label="Intlayer" value="intlayer">
308
347
 
309
348
  ```ts fileName="src/components/Counter/index.content.ts"
310
349
  import { t, type Dictionary } from "intlayer";
@@ -345,9 +384,13 @@ export const Counter = () => {
345
384
 
346
385
  `label` et `increment` sont strictement typés; une faute de frappe déclenche une erreur TypeScript, et une valeur française manquante génère une erreur au build.
347
386
 
387
+ </Tab>
388
+ </Tabs>
389
+
348
390
  ### Composant serveur synchrone
349
391
 
350
- **next-i18next**
392
+ <Tabs defaultTab="intlayer" group="techno">
393
+ <Tab label="next-i18next" value="i18next">
351
394
 
352
395
  ```tsx fileName="src/components/ServerCounter.tsx"
353
396
  type ServerCounterProps = {
@@ -366,7 +409,8 @@ export const ServerCounter = ({ t, locale, count }: ServerCounterProps) => (
366
409
 
367
410
  La page appelle `i18n.getFixedT(locale, "about")` et fait descendre `t` et `locale` en tant que props.
368
411
 
369
- **Intlayer**
412
+ </Tab>
413
+ <Tab label="Intlayer" value="intlayer">
370
414
 
371
415
  ```tsx fileName="src/components/ServerCounter.tsx"
372
416
  import { useIntlayer } from "next-intlayer/server";
@@ -385,6 +429,9 @@ export const ServerCounter = ({ count }: { count: number }) => {
385
429
  };
386
430
  ```
387
431
 
432
+ </Tab>
433
+ </Tabs>
434
+
388
435
  ## Gardez l'API d'i18next, profitez des performances d'Intlayer
389
436
 
390
437
  Il n'est pas nécessaire de réécrire vos composants pour bénéficier des résultats du benchmark ci-dessus. `@intlayer/i18next`, `@intlayer/react-i18next` et `@intlayer/next-i18next` sont des adaptateurs prêts à l'emploi: `useTranslation`, `t()`, `<Trans>`, `{{interpolation}}`, pluriels `_one` / `_other`, suffixes de contexte et `returnObjects` continuent de fonctionner, alimentés par les dictionnaires Intlayer compilés.
@@ -415,18 +462,85 @@ Consultez les guides de migration: [i18next](https://intlayer.org/fr/doc/migrati
415
462
 
416
463
  ## Quand choisir quelle solution?
417
464
 
418
- - **Choisissez i18next** si vous avez besoin de son écosystème de plugins (détecteurs, backends, ICU, Locize), si vous traduisez aussi en dehors de React (services Node, vanilla JS, autres frameworks), si votre équipe le maîtrise déjà, ou si une plateforme de traduction externe exige `locales/{lng}/{ns}.json`. Prévoyez le temps de découper vos catalogues en namespaces, de configurer un backend et de maintenir la table routes-namespaces si la performance compte.
419
- - **Choisissez Intlayer** si vous voulez **du contenu découpé par composant**, **un typage TypeScript strict**, **des erreurs au build en cas de clé manquante**, **du tree-shaking et lazy loading sans effort**, un changement de langue instantané, des composants serveur synchrones et des outils éditoriaux intégrés (Éditeur Visuel, CMS, traduction IA, serveur MCP). Particulièrement pertinent pour les codebases modulaires et les design systems.
420
- - **Choisissez les adaptateurs `@intlayer/*-i18next`** si vous utilisez déjà i18next et souhaitez obtenir les gains de bundle et de réactivité sans refactoriser vos composants.
465
+ <AccordionGroup>
466
+ <Accordion header="Choisir i18next">
467
+
468
+ Si vous avez besoin de son écosystème de plugins (détecteurs, backends, ICU, Locize), si vous traduisez aussi en dehors de React (services Node, vanilla JS, autres frameworks), si votre équipe le maîtrise déjà, ou si une plateforme de traduction externe exige `locales/{lng}/{ns}.json`. Prévoyez le temps de découper vos catalogues en namespaces, de configurer un backend et de maintenir la table routes-namespaces si la performance compte.
469
+
470
+ </Accordion>
471
+ <Accordion header="Choisir Intlayer">
472
+
473
+ Vous voulez **du contenu découpé par composant**, **un typage TypeScript strict**, **des erreurs au build en cas de clé manquante**, **du tree-shaking et lazy loading sans effort**, un changement de langue instantané, des composants serveur synchrones et des outils éditoriaux intégrés ([Éditeur Visuel](https://intlayer.org/fr/doc/concept/editor), [CMS](https://intlayer.org/fr/doc/concept/cms), [traduction IA](https://intlayer.org/fr/doc/concept/auto-fill), [serveur MCP](https://intlayer.org/fr/doc/mcp-server)). Particulièrement pertinent pour les codebases modulaires et les design systems.
474
+
475
+ </Accordion>
476
+ <Accordion header="Choisir les adaptateurs @intlayer/*-i18next">
477
+
478
+ Vous utilisez déjà i18next et souhaitez obtenir les gains de bundle et de réactivité sans refactoriser vos composants. Vos fichiers `locales/{lng}/{ns}.json` restent la source de vérité. Mesuré côte à côte dans [i18next vs @intlayer/i18next](https://intlayer.org/fr/blog/i18next-vs-intlayer-i18next).
479
+
480
+ </Accordion>
481
+ </AccordionGroup>
482
+
483
+ ## FAQ
484
+
485
+ <FAQ>
486
+
487
+ <Question title="Pourquoi i18next est-il tellement plus lourd que les autres bibliothèques ?">
488
+
489
+ Il a été conçu comme un runtime indépendant du framework : une instance globale, un pipeline de plugins, un magasin de ressources, un résolveur de clés. Cette flexibilité est compilée dans chaque bundle. Un composant vide qui n'importe que la bibliothèque coûte **19.7 KB gzip** avec `next-i18next` contre **5.5 KB** avec `next-intlayer`, et ce coût est payé sur chaque page quel que soit le poids de votre contenu.
490
+
491
+ </Question>
492
+
493
+ <Question title="Le lazy loading avec un backend résout-il le problème ?">
494
+
495
+ Il réduit les octets, pas la latence. Passer à `i18next-resources-to-backend` économise ~49 KB par page mais ajoute un aller-retour réseau lors du changement de langue : **123 ms** dans la configuration `dynamic` et **185 ms** dans `scoped-static`, contre **3-4 ms** avec Intlayer. L'hydratation grimpe aussi à 27.7 ms car l'instance résout son backend avant que React ne puisse hydrater.
496
+
497
+ </Question>
498
+
499
+ <Question title="Puis-je atteindre 0% de fuite avec i18next ?">
500
+
501
+ Oui, avec `scoped-dynamic` : un namespace par route, un backend de ressources et une table de correspondance pages-namespaces maintenue à la main. On arrive à 163.4 KB par page sur Next.js, soit toujours **+22 KB** par rapport aux 141.3 KB d'Intlayer qui n'a nécessité aucune configuration. Voir l'[optimisation du bundle](https://intlayer.org/fr/doc/concept/bundle-optimization).
502
+
503
+ </Question>
504
+
505
+ <Question title="Dois-je réécrire mes composants pour migrer ?">
506
+
507
+ Non. `@intlayer/i18next`, `@intlayer/react-i18next` et `@intlayer/next-i18next` conservent `useTranslation`, `t()`, `<Trans>`, `{{interpolation}}`, les pluriels `_one` / `_other`, les suffixes de contexte et `returnObjects`. Une seule ligne de plugin dans `next.config.ts` ou `vite.config.ts`. Guide pas à pas dans le [guide de migration next-i18next](https://intlayer.org/fr/doc/migration/next-i18next).
508
+
509
+ </Question>
510
+
511
+ <Question title="Qu'advient-il de mes plugins i18next ?">
512
+
513
+ Les backends et détecteurs de langue sont acceptés mais inertes : il n'y a plus rien à charger ou détecter au runtime. La détection de locale devient la configuration de routage d'Intlayer (préfixe d'URL, cookie, en-tête). Si votre application récupère des traductions depuis un CMS au moment de la requête, utilisez le [CMS d'Intlayer](https://intlayer.org/fr/doc/concept/cms) ou `intlayer pull` / `push` à la place.
514
+
515
+ </Question>
516
+
517
+ </FAQ>
421
518
 
422
519
  ## Comparaisons associées
423
520
 
424
- - [next-intl vs Intlayer](https://intlayer.org/fr/blog/next-intl-vs-intlayer) (même benchmark)
425
- - [Lingui vs Intlayer](https://intlayer.org/fr/blog/lingui-vs-intlayer) (même benchmark)
426
- - [vue-i18n vs Intlayer benchmark](https://intlayer.org/fr/blog/vue-i18n-vs-intlayer-benchmark) (même benchmark)
521
+ Même benchmark, autres bibliothèques :
522
+
523
+ - [next-intl vs Intlayer](https://intlayer.org/fr/blog/next-intl-vs-intlayer)
524
+ - [Lingui vs Intlayer](https://intlayer.org/fr/blog/lingui-vs-intlayer)
525
+ - [vue-i18n vs Intlayer benchmark](https://intlayer.org/fr/blog/vue-i18n-vs-intlayer-benchmark)
427
526
  - [next-i18next vs next-intl vs Intlayer](https://intlayer.org/fr/blog/next-i18next-vs-next-intl-vs-intlayer)
428
527
  - [react-i18next vs react-intl vs Intlayer](https://intlayer.org/fr/blog/react-i18next-vs-react-intl-vs-intlayer)
528
+
529
+ Pour aller plus loin sur i18next :
530
+
531
+ - [i18next vs @intlayer/i18next](https://intlayer.org/fr/blog/i18next-vs-intlayer-i18next), les adaptateurs mesurés sur la même application
429
532
  - [i18next est-il dépassé?](https://intlayer.org/fr/blog/is-i18next-outdated)
533
+ - [Utiliser Intlayer avec i18next](https://intlayer.org/fr/blog/intlayer-with-i18next) et [avec react-i18next](https://intlayer.org/fr/blog/intlayer-with-react-i18next)
534
+ - [Comment internationaliser une application Next.js avec next-i18next](https://intlayer.org/fr/blog/nextjs-internationalization-using-next-i18next)
535
+
536
+ Documentation de référence :
537
+
538
+ - [Rapport de benchmark Next.js](https://intlayer.org/fr/doc/benchmark/nextjs) et [rapport de benchmark TanStack Start](https://intlayer.org/fr/doc/benchmark/tanstack)
539
+ - Adaptateurs de compatibilité : [i18next](https://intlayer.org/fr/doc/compatibility/i18next), [react-i18next](https://intlayer.org/fr/doc/compatibility/react-i18next), [next-i18next](https://intlayer.org/fr/doc/compatibility/next-i18next)
540
+ - Guides de migration : [i18next](https://intlayer.org/fr/doc/migration/i18next), [react-i18next](https://intlayer.org/fr/doc/migration/react-i18next), [next-i18next](https://intlayer.org/fr/doc/migration/next-i18next)
541
+ - [Optimisation du bundle](https://intlayer.org/fr/doc/concept/bundle-optimization) et [le compilateur Intlayer](https://intlayer.org/fr/doc/compiler)
542
+ - [i18n par composant vs centralisée](https://intlayer.org/fr/blog/per-component-vs-centralized-i18n)
543
+ - [i18n pilotée par compilateur vs déclarative](https://intlayer.org/fr/blog/compiler-vs-declarative-i18n)
430
544
 
431
545
  ## Étoiles GitHub
432
546
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-09-13
3
- updatedAt: 2026-09-13
3
+ updatedAt: 2026-09-22
4
4
  title: "Lingui vs Intlayer: Benchmark & Comparaison 2026"
5
5
  description: Deux bibliothèques i18n basées sur compiler mesurées sur Next.js et TanStack Start. Taille du bundle, fuite de contenu, taille du composant, hydratation, réactivité du changement de locale et expérience développeur.
6
6
  keywords:
@@ -24,6 +24,8 @@ author: aymericzip
24
24
 
25
25
  # Lingui VS Intlayer | Benchmark d'Internationalization (i18n) React & Next.js
26
26
 
27
+ ![JavaScript i18n library ecosystem](https://github.com/aymericzip/intlayer/blob/main/docs/assets/cloud_i18n_logo.webp?raw=true)
28
+
27
29
  Lingui et Intlayer sont les deux bibliothèques de ce benchmark qui s'appuient sur un **compilateur** plutôt que sur un runtime pur. Lingui extrait les messages des macros au moment de la compilation et compile les catalogues par locale. Intlayer compile les dictionnaires par composant et les tree-shake par locale. Sur le papier, ils devraient être proches. Les chiffres montrent où ils divergent.
28
30
 
29
31
  Les données proviennent de [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom), une suite open-source qui construit la même application avec chaque bibliothèque et enregistre ce que le navigateur télécharge et exécute réellement.
@@ -96,6 +98,10 @@ Pour chaque build, la suite enregistre :
96
98
 
97
99
  ### Résultats sur Next.js
98
100
 
101
+ Sélectionnez les métriques et les bibliothèques qui vous intéressent :
102
+
103
+ <I18nBenchmark framework="nextjs" vertical/>
104
+
99
105
  | Library | Strategy | Lib size (gz) | Page JS avg (gz) | Locale leak | Page leak | Component avg (gz) | E2E reactivity | Hydration |
100
106
  | -------------------- | -------------- | ------------: | ---------------: | ----------: | --------: | -----------------: | -------------: | --------: |
101
107
  | **base** (sans i18n) | - | 0.0 KB | 141.0 KB | 0.0% | 0.0% | 0.9 KB | 13.4 ms | 11.8 ms |
@@ -114,6 +120,15 @@ Pour chaque build, la suite enregistre :
114
120
  - **La source-locale fallback fuit.** Même dans les configurations optimisées, **3-15% des chaînes `en` sont incluses dans les pages `fr`**. Les macros Lingui conservent le message source disponible comme fallback, ce qui se retrouve dans le bundle à côté de la traduction. Intlayer résout les fallbacks au moment de la compilation et ne livre que la locale active.
115
121
  - **La taille du composant explose en `scoped-dynamic`.** Chaque composant compilé isolément fait en moyenne **152.6 KB**, car le catalog de chaque route est accessible depuis le composant qui l'importe. Le même composant avec `useIntlayer()` fait en moyenne **6.9 KB**.
116
122
 
123
+ <ClickToOpenIframe
124
+ src="https://intlayer.org/markdown?url=https%3A%2F%2Fraw.githubusercontent.com%2Fintlayer-org%2Fbenchmark-i18n%2Fmain%2Freport%2Fscripts%2Fsummarize-nextjs.md"
125
+ width="100%"
126
+ height="600px"
127
+ style="border:none;"
128
+ />
129
+
130
+ > Tableau complet, chaque bibliothèque et chaque stratégie, dans le [rapport de benchmark Next.js](https://intlayer.org/fr/doc/benchmark/nextjs).
131
+
117
132
  ### Résultats sur TanStack Start
118
133
 
119
134
  | Library | Strategy | Lib size (gz) | Page JS avg (gz) | Locale leak | Page leak | Component avg (gz) | E2E reactivity | Hydration |
@@ -135,8 +150,19 @@ Pour chaque build, la suite enregistre :
135
150
  - **La ligne `static` d'Intlayer a déjà 0% de fuite de page** car seuls les dictionnaires importés par les composants de la page sont regroupés. Une ligne de config (`importMode: 'dynamic'`) supprime aussi la fuite de locale.
136
151
  - **`@intlayer/lingui`** conserve la syntaxe des macros de Lingui et les sert à partir des dictionnaires Intlayer. Il échange une taille de page plus importante (137 KB, puisque le runtime des macros reste) pour des composants plus petits (12.8 KB) et une hydratation plus rapide que Lingui natif. C'est une étape de migration, pas la destination.
137
152
 
153
+ <ClickToOpenIframe
154
+ src="https://intlayer.org/markdown?url=https%3A%2F%2Fraw.githubusercontent.com%2Fintlayer-org%2Fbenchmark-i18n%2Fmain%2Freport%2Fscripts%2Fsummarize-tanstack.md"
155
+ width="100%"
156
+ height="600px"
157
+ style="border:none;"
158
+ />
159
+
160
+ > Tableau complet dans le [rapport de benchmark TanStack Start](https://intlayer.org/fr/doc/benchmark/tanstack).
161
+
138
162
  ## Pourquoi l'écart ? Deux compilateurs, deux unités de travail
139
163
 
164
+ ![The Intlayer compiler extracts content from components](https://github.com/aymericzip/intlayer/blob/main/docs/assets/compiler.webp?raw=true)
165
+
140
166
  Les deux bibliothèques compilent. La différence est **ce qu'** elles compilent.
141
167
 
142
168
  **Lingui compile des catalogues.** Les macros dans votre source sont extraites dans un fichier `.po` par locale, puis compilées dans un module JS par locale. L'unité est la **locale**. Diviser davantage, par route ou par composant, signifie créer plusieurs catalogues, configurer `lingui.config.ts` pour extraire chacun d'un ensemble différent de fichiers, et charger le bon dans chaque route. L'instance `I18n` au runtime est globale ; chaque appel `useLingui()` souscrit le composant à celle-ci.
@@ -176,7 +202,9 @@ Les deux bibliothèques compilent. La différence est **ce qu'** elles compilent
176
202
  └── about.content.ts
177
203
  ```
178
204
 
179
- C'est pourquoi le pattern `scoped-dynamic` est une sortie de build pour Intlayer et une configuration de projet pour Lingui.
205
+ C'est pourquoi le pattern `scoped-dynamic` est une sortie de build pour Intlayer et une configuration de projet pour Lingui. L'écart se creuse sur deux axes à la fois, les pages et les locales :
206
+
207
+ ![Theoretical content leakage by architecture](https://github.com/aymericzip/intlayer/blob/main/docs/assets/theorical_content_leakage.webp?raw=true)
180
208
 
181
209
  > Pour obtenir les numéros de la ligne `dynamic`, définissez `dictionary.importMode: 'dynamic'` dans `intlayer.config.ts`. Voir la [documentation d'optimisation du bundle](https://intlayer.org/doc/fr/concept/bundle-optimization).
182
210
 
@@ -184,7 +212,8 @@ C'est pourquoi le pattern `scoped-dynamic` est une sortie de build pour Intlayer
184
212
 
185
213
  ### Configuration
186
214
 
187
- **Lingui**
215
+ <Tabs defaultTab="intlayer" group="techno">
216
+ <Tab label="Lingui" value="lingui">
188
217
 
189
218
  ```ts fileName="lingui.config.ts"
190
219
  import { defineConfig } from "@lingui/cli";
@@ -215,7 +244,8 @@ export const loadCatalog = async (locale: string) => {
215
244
 
216
245
  Puis ajoutez `@lingui/babel-plugin-lingui-macro` (ou `@lingui/swc-plugin`) au bundler, exécutez `lingui extract` après avoir modifié la source, `lingui compile` avant de construire, et enveloppez l'arborescence dans `<I18nProvider i18n={i18n}>`.
217
246
 
218
- **Intlayer**
247
+ </Tab>
248
+ <Tab label="Intlayer" value="intlayer">
219
249
 
220
250
  ```ts fileName="intlayer.config.ts"
221
251
  import { type IntlayerConfig, Locales } from "intlayer";
@@ -232,9 +262,12 @@ export default config;
232
262
 
233
263
  Ajoutez `intlayer()` à `vite.config.ts` (ou `withIntlayer()` à `next.config.ts`) et enveloppez l'arborescence dans `<IntlayerProvider>`. Aucune étape d'extraction ou de compilation : les dictionnaires sont construits lors de l'exécution du bundler.
234
264
 
265
+ </Tab>
266
+ </Tabs>
235
267
  ### Composant
236
268
 
237
- **Lingui**
269
+ <Tabs defaultTab="intlayer" group="techno">
270
+ <Tab label="Lingui" value="lingui">
238
271
 
239
272
  ```tsx fileName="src/components/Counter.tsx"
240
273
  import { useState } from "react";
@@ -258,7 +291,8 @@ export const Counter = () => {
258
291
 
259
292
  Le texte anglais se trouve dans le composant ; le texte français se trouve dans `src/locales/fr/messages.po` sous un ID haché, après l'exécution de `lingui extract`. Oublier de l'exécuter ou d'exécuter `compile` bascule silencieusement vers l'anglais.
260
293
 
261
- **Intlayer**
294
+ </Tab>
295
+ <Tab label="Intlayer" value="intlayer">
262
296
 
263
297
  ```ts fileName="src/components/Counter/index.content.ts"
264
298
  import { t, type Dictionary } from "intlayer";
@@ -297,11 +331,14 @@ export const Counter = () => {
297
331
 
298
332
  Les deux locales se trouvent dans un seul fichier à côté du composant. Une valeur `fr` manquante est une erreur de build, une clé incorrecte est une erreur TypeScript.
299
333
 
334
+ </Tab>
335
+ </Tabs>
300
336
  ### En dehors des composants
301
337
 
302
338
  Métadonnées, loaders, fonctions serveur : partout sans arborescence React.
303
339
 
304
- **Lingui**
340
+ <Tabs defaultTab="intlayer" group="techno">
341
+ <Tab label="Lingui" value="lingui">
305
342
 
306
343
  ```ts fileName="src/routes/$locale/about.tsx"
307
344
  import { setupI18n } from "@lingui/core";
@@ -324,7 +361,8 @@ export const loader = async ({ params }: { params: { locale: string } }) => {
324
361
 
325
362
  Une nouvelle instance `I18n` par appel, le bon catalogue chargé manuellement, et `msg` + `i18n._()` au lieu de `t`. Comme le [benchmark le note](https://github.com/intlayer-org/benchmark-bloom/blob/main/report/NOTE.md), savoir quand utiliser `t`, `` t` ` ``, `i18n.t()`, `msg` ou `<Trans>` « n'est pas intuitif ».
326
363
 
327
- **Intlayer**
364
+ </Tab>
365
+ <Tab label="Intlayer" value="intlayer">
328
366
 
329
367
  ```ts fileName="src/routes/$locale/about.tsx"
330
368
  import { getIntlayer } from "intlayer";
@@ -336,6 +374,9 @@ export const loader = async ({ params }: { params: { locale: string } }) => {
336
374
  };
337
375
  ```
338
376
 
377
+ </Tab>
378
+ </Tabs>
379
+
339
380
  ## Conservez les macros Lingui, obtenez les dictionnaires Intlayer
340
381
 
341
382
  `@intlayer/lingui` est un adaptateur prêt à l'emploi pour `@lingui/core` et `@lingui/react`. Les macros continuent de se compiler comme avant ; le runtime `i18n._()` qu'elles compilent est servi à partir des dictionnaires Intlayer, avec des plugins de synchronisation `.po` qui maintiennent vos catalogues existants comme source de vérité. Les pluriels et sélections ICU s'affichent de manière identique.
@@ -353,16 +394,82 @@ Conservez `@lingui/babel-plugin-lingui-macro` / `@lingui/swc-plugin` dans la bui
353
394
 
354
395
  ## Quand choisir quoi ?
355
396
 
356
- - **Choisir Lingui** si vous voulez **ICU MessageFormat** avec des macros typées, vos traducteurs travaillent en **`.po`** avec un pipeline TMS existant, vous préférez les chaînes source inline en JSX, et votre équipe est à l'aise avec la gestion du workflow extract / compile / catalog-splitting. Son JS par page est compétitif une fois le lazy loading configuré.
357
- - **Choisir Intlayer** si vous voulez du **contenu scoped au composant**, du **TypeScript strict**, des **erreurs de clés manquantes au build-time**, du **tree-shaking et lazy loading sans effort**, de petits composants, une hydratation rapide, un changement de locale instantané, et des outils éditoriaux intégrés (Visual Editor, CMS, traduction IA, serveur MCP). Particulièrement pertinent pour les grandes codebases modulaires et les design systems.
358
- - **Choisir `@intlayer/lingui`** si vous êtes sur Lingui et souhaitez migrer progressivement vers les dictionnaires Intlayer sans modifier les macros.
397
+ <AccordionGroup>
398
+ <Accordion header="Choisir Lingui">
399
+
400
+ Vous voulez **ICU MessageFormat** avec des macros typées, vos traducteurs travaillent en **`.po`** avec un pipeline TMS existant, vous préférez les chaînes sources en ligne dans JSX, et votre équipe est à l'aise avec la gestion du workflow extraction / compilation / division des catalogues. Son JS par page est compétitif une fois le lazy loading configuré.
401
+
402
+ </Accordion>
403
+ <Accordion header="Choisir Intlayer">
404
+
405
+ Vous voulez du **contenu scopé au composant**, du **TypeScript strict**, des **erreurs de clés manquantes au build**, du **tree-shaking et lazy loading sans effort**, des composants légers, une hydratation rapide, un changement de locale instantané, et des outils éditoriaux intégrés ([Visual Editor](https://intlayer.org/fr/doc/concept/editor), [CMS](https://intlayer.org/fr/doc/concept/cms), [traduction par IA](https://intlayer.org/fr/doc/concept/auto-fill), [serveur MCP](https://intlayer.org/fr/doc/mcp-server)). Particulièrement pertinent pour les codebases modulaires volumineuses et les design systems.
406
+
407
+ </Accordion>
408
+ <Accordion header="Choisir @intlayer/lingui">
409
+
410
+ Vous utilisez déjà Lingui et souhaitez migrer vers les dictionnaires Intlayer progressivement sans toucher aux macros. Vos catalogues `.po` restent la source de vérité grâce au [plugin de synchronisation PO](https://intlayer.org/fr/doc/compatibility/lingui). Mesuré côte à côte dans [Lingui vs @intlayer/lingui](https://intlayer.org/fr/blog/lingui-vs-intlayer-lingui).
411
+
412
+ </Accordion>
413
+ </AccordionGroup>
414
+
415
+ ## FAQ
416
+
417
+ <FAQ>
418
+
419
+ <Question title="Lingui compile également. Pourquoi la sortie est-elle si différente ?">
420
+
421
+ Parce que l'unité de compilation diffère. Lingui compile **un catalogue par locale** : tout ce qui est en dessous (catalogues par route, lazy loading, exclusion du fallback du bundle) relève de la configuration. Intlayer compile **un dictionnaire par composant**, donc le découpage par route découle directement du build. C'est pourquoi un composant Lingui compilé isolément pèse 58-153 KB contre 6-8 KB pour Intlayer.
422
+
423
+ </Question>
424
+
425
+ <Question title="Pourquoi la fuite de locale n'atteint-elle jamais 0% avec Lingui ?">
426
+
427
+ Les macros gardent le message source disponible comme solution de repli (fallback) au runtime, de sorte que la chaîne anglaise est envoyée à côté de sa traduction. Le benchmark mesure **3-15% de chaînes `en` dans les pages `fr`** dans chaque configuration optimisée. Intlayer résout les fallbacks au build et ne livre que la locale active.
428
+
429
+ </Question>
430
+
431
+ <Question title="Le JavaScript par page de Lingui est-il vraiment compétitif ?">
432
+
433
+ Oui, et sur TanStack Start il l'emporte d'un cheveu : 115.2 KB en `dynamic` contre 118.6 KB pour Intlayer. Les catalogues compilés avec des identifiants hachés sont compacts. Le coût apparaît ailleurs : hydratation à 28-34 ms contre 11-14 ms, et un changement de locale à **42 ms** dans la configuration `scoped-dynamic`.
434
+
435
+ </Question>
436
+
437
+ <Question title="Dois-je renoncer aux macros pour migrer ?">
438
+
439
+ Non. `@intlayer/lingui` permet de compiler `` t`...` ``, `<Trans>`, `msg`, `plural`, `select` et `selectOrdinal` comme avant ; seul le mécanisme de résolution sous-jacent de `i18n._()` change. Conservez `@lingui/babel-plugin-lingui-macro` ou `@lingui/swc-plugin` dans le build. Voir la [documentation de compatibilité Lingui](https://intlayer.org/fr/doc/compatibility/lingui).
440
+
441
+ </Question>
442
+
443
+ <Question title="Qu'en est-il des étapes d'extraction et de compilation ?">
444
+
445
+ Elles restent nécessaires pour les macros, mais disparaissent pour le contenu propre à Intlayer. Les dictionnaires `.content.ts` sont créés lors de l'exécution du bundler, sans commande CLI distincte, et [`intlayer test`](https://intlayer.org/fr/doc/concept/cli) fait échouer la CI en cas de clé manquante au lieu de basculer silencieusement sur la chaîne source.
446
+
447
+ </Question>
448
+
449
+ </FAQ>
359
450
 
360
451
  ## Comparaisons associées
361
452
 
362
- - [next-intl vs Intlayer](https://intlayer.org/blog/next-intl-vs-intlayer) (même benchmark)
363
- - [i18next vs Intlayer](https://intlayer.org/blog/i18next-vs-intlayer) (même benchmark)
364
- - [vue-i18n vs Intlayer benchmark](https://intlayer.org/blog/vue-i18n-vs-intlayer-benchmark) (même benchmark)
365
- - [Compiler vs declarative i18n](https://intlayer.org/blog/compiler-vs-declarative-i18n)
453
+ Même benchmark, autres bibliothèques :
454
+
455
+ - [next-intl vs Intlayer](https://intlayer.org/fr/blog/next-intl-vs-intlayer)
456
+ - [i18next vs Intlayer](https://intlayer.org/fr/blog/i18next-vs-intlayer)
457
+ - [vue-i18n vs Intlayer benchmark](https://intlayer.org/fr/blog/vue-i18n-vs-intlayer-benchmark)
458
+ - [next-i18next vs next-intl vs Intlayer](https://intlayer.org/fr/blog/next-i18next-vs-next-intl-vs-intlayer)
459
+ - [react-i18next vs react-intl vs Intlayer](https://intlayer.org/fr/blog/react-i18next-vs-react-intl-vs-intlayer)
460
+
461
+ Pour aller plus loin :
462
+
463
+ - [Lingui vs @intlayer/lingui](https://intlayer.org/fr/blog/lingui-vs-intlayer-lingui), l'adaptateur mesuré sur la même application
464
+ - [Compiler-driven vs declarative i18n](https://intlayer.org/fr/blog/compiler-vs-declarative-i18n)
465
+ - [Per-component vs centralized i18n](https://intlayer.org/fr/blog/per-component-vs-centralized-i18n)
466
+ - [ICU message format explained](https://intlayer.org/fr/blog/icu-message-format)
467
+
468
+ Documentation de référence :
469
+
470
+ - [Rapport de benchmark Next.js](https://intlayer.org/fr/doc/benchmark/nextjs) et [rapport de benchmark TanStack Start](https://intlayer.org/fr/doc/benchmark/tanstack)
471
+ - [Compat adapter: Lingui](https://intlayer.org/fr/doc/compatibility/lingui)
472
+ - [Optimisation du bundle](https://intlayer.org/fr/doc/concept/bundle-optimization) et [le compilateur Intlayer](https://intlayer.org/fr/doc/compiler)
366
473
 
367
474
  ## Étoiles GitHub
368
475