@intlayer/docs 9.5.6 → 9.5.8

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 (643) 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/is_intlayer_lighter_than_paraglide.md +284 -0
  4. package/blog/ar/lingui_vs_intlayer.md +122 -15
  5. package/blog/ar/next-intl_vs_intlayer-next-intl.md +124 -15
  6. package/blog/ar/next-intl_vs_intlayer.md +136 -20
  7. package/blog/ar/vue-i18n_vs_intlayer-vue-i18n.md +119 -17
  8. package/blog/ar/vue-i18n_vs_intlayer.md +193 -31
  9. package/blog/ar/vue-i18n_vs_intlayer_benchmark.md +361 -0
  10. package/blog/de/i18next_vs_intlayer-i18next.md +122 -15
  11. package/blog/de/i18next_vs_intlayer.md +128 -14
  12. package/blog/de/is_intlayer_lighter_than_paraglide.md +284 -0
  13. package/blog/de/lingui_vs_intlayer.md +122 -15
  14. package/blog/de/next-intl_vs_intlayer-next-intl.md +124 -15
  15. package/blog/de/next-intl_vs_intlayer.md +125 -15
  16. package/blog/de/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  17. package/blog/de/vue-i18n_vs_intlayer.md +193 -31
  18. package/blog/en/i18next_vs_intlayer-i18next.md +121 -14
  19. package/blog/en/i18next_vs_intlayer.md +128 -14
  20. package/blog/en/is_intlayer_lighter_than_paraglide.md +288 -0
  21. package/blog/en/lingui_vs_intlayer.md +124 -15
  22. package/blog/en/next-intl_vs_intlayer-next-intl.md +123 -14
  23. package/blog/en/next-intl_vs_intlayer.md +125 -13
  24. package/blog/en/vue-i18n_vs_intlayer-vue-i18n.md +115 -15
  25. package/blog/en/vue-i18n_vs_intlayer.md +188 -27
  26. package/blog/en-GB/i18next_vs_intlayer-i18next.md +121 -14
  27. package/blog/en-GB/i18next_vs_intlayer.md +128 -14
  28. package/blog/en-GB/is_intlayer_lighter_than_paraglide.md +285 -0
  29. package/blog/en-GB/lingui_vs_intlayer.md +122 -15
  30. package/blog/en-GB/next-intl_vs_intlayer-next-intl.md +124 -15
  31. package/blog/en-GB/next-intl_vs_intlayer.md +125 -15
  32. package/blog/en-GB/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  33. package/blog/en-GB/vue-i18n_vs_intlayer.md +187 -25
  34. package/blog/en-GB/vue-i18n_vs_intlayer_benchmark.md +116 -0
  35. package/blog/es/i18next_vs_intlayer-i18next.md +122 -15
  36. package/blog/es/i18next_vs_intlayer.md +128 -14
  37. package/blog/es/is_intlayer_lighter_than_paraglide.md +284 -0
  38. package/blog/es/lingui_vs_intlayer.md +122 -15
  39. package/blog/es/next-intl_vs_intlayer-next-intl.md +124 -15
  40. package/blog/es/next-intl_vs_intlayer.md +125 -15
  41. package/blog/es/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  42. package/blog/es/vue-i18n_vs_intlayer.md +193 -31
  43. package/blog/fr/i18next_vs_intlayer-i18next.md +122 -15
  44. package/blog/fr/i18next_vs_intlayer.md +128 -14
  45. package/blog/fr/is_intlayer_lighter_than_paraglide.md +284 -0
  46. package/blog/fr/lingui_vs_intlayer.md +122 -15
  47. package/blog/fr/next-intl_vs_intlayer-next-intl.md +124 -15
  48. package/blog/fr/next-intl_vs_intlayer.md +127 -15
  49. package/blog/fr/vue-i18n_vs_intlayer-vue-i18n.md +118 -17
  50. package/blog/fr/vue-i18n_vs_intlayer.md +192 -31
  51. package/blog/fr/vue-i18n_vs_intlayer_benchmark.md +329 -7
  52. package/blog/hi/i18next_vs_intlayer-i18next.md +122 -15
  53. package/blog/hi/i18next_vs_intlayer.md +130 -16
  54. package/blog/hi/is_intlayer_lighter_than_paraglide.md +284 -0
  55. package/blog/hi/lingui_vs_intlayer.md +122 -15
  56. package/blog/hi/next-intl_vs_intlayer-next-intl.md +124 -15
  57. package/blog/hi/next-intl_vs_intlayer.md +135 -19
  58. package/blog/hi/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  59. package/blog/hi/vue-i18n_vs_intlayer.md +193 -31
  60. package/blog/hi/vue-i18n_vs_intlayer_benchmark.md +361 -0
  61. package/blog/id/i18next_vs_intlayer-i18next.md +122 -15
  62. package/blog/id/i18next_vs_intlayer.md +128 -14
  63. package/blog/id/is_intlayer_lighter_than_paraglide.md +284 -0
  64. package/blog/id/lingui_vs_intlayer.md +122 -15
  65. package/blog/id/next-intl_vs_intlayer-next-intl.md +124 -15
  66. package/blog/id/next-intl_vs_intlayer.md +135 -19
  67. package/blog/id/vue-i18n_vs_intlayer-vue-i18n.md +354 -2
  68. package/blog/id/vue-i18n_vs_intlayer.md +188 -26
  69. package/blog/id/vue-i18n_vs_intlayer_benchmark.md +327 -7
  70. package/blog/it/i18next_vs_intlayer-i18next.md +122 -15
  71. package/blog/it/i18next_vs_intlayer.md +128 -14
  72. package/blog/it/is_intlayer_lighter_than_paraglide.md +284 -0
  73. package/blog/it/lingui_vs_intlayer.md +122 -15
  74. package/blog/it/next-intl_vs_intlayer-next-intl.md +124 -15
  75. package/blog/it/next-intl_vs_intlayer.md +125 -15
  76. package/blog/it/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  77. package/blog/it/vue-i18n_vs_intlayer.md +191 -31
  78. package/blog/it/vue-i18n_vs_intlayer_benchmark.md +332 -5
  79. package/blog/ja/i18next_vs_intlayer-i18next.md +122 -15
  80. package/blog/ja/i18next_vs_intlayer.md +129 -17
  81. package/blog/ja/is_intlayer_lighter_than_paraglide.md +284 -0
  82. package/blog/ja/lingui_vs_intlayer.md +122 -15
  83. package/blog/ja/next-intl_vs_intlayer-next-intl.md +124 -15
  84. package/blog/ja/next-intl_vs_intlayer.md +124 -14
  85. package/blog/ja/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  86. package/blog/ja/vue-i18n_vs_intlayer.md +193 -31
  87. package/blog/ja/vue-i18n_vs_intlayer_benchmark.md +361 -0
  88. package/blog/ko/i18next_vs_intlayer-i18next.md +122 -15
  89. package/blog/ko/i18next_vs_intlayer.md +129 -17
  90. package/blog/ko/is_intlayer_lighter_than_paraglide.md +284 -0
  91. package/blog/ko/lingui_vs_intlayer.md +122 -15
  92. package/blog/ko/next-intl_vs_intlayer-next-intl.md +124 -15
  93. package/blog/ko/next-intl_vs_intlayer.md +134 -18
  94. package/blog/ko/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  95. package/blog/ko/vue-i18n_vs_intlayer.md +193 -31
  96. package/blog/pl/i18next_vs_intlayer-i18next.md +122 -15
  97. package/blog/pl/i18next_vs_intlayer.md +128 -14
  98. package/blog/pl/is_intlayer_lighter_than_paraglide.md +284 -0
  99. package/blog/pl/lingui_vs_intlayer.md +122 -15
  100. package/blog/pl/next-intl_vs_intlayer-next-intl.md +124 -15
  101. package/blog/pl/next-intl_vs_intlayer.md +134 -18
  102. package/blog/pl/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  103. package/blog/pl/vue-i18n_vs_intlayer.md +188 -26
  104. package/blog/pl/vue-i18n_vs_intlayer_benchmark.md +361 -0
  105. package/blog/pt/i18next_vs_intlayer-i18next.md +122 -15
  106. package/blog/pt/i18next_vs_intlayer.md +128 -14
  107. package/blog/pt/is_intlayer_lighter_than_paraglide.md +284 -0
  108. package/blog/pt/lingui_vs_intlayer.md +122 -15
  109. package/blog/pt/next-intl_vs_intlayer-next-intl.md +124 -15
  110. package/blog/pt/next-intl_vs_intlayer.md +131 -15
  111. package/blog/pt/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  112. package/blog/pt/vue-i18n_vs_intlayer.md +193 -31
  113. package/blog/pt/vue-i18n_vs_intlayer_benchmark.md +361 -0
  114. package/blog/ru/i18next_vs_intlayer-i18next.md +122 -15
  115. package/blog/ru/i18next_vs_intlayer.md +130 -16
  116. package/blog/ru/is_intlayer_lighter_than_paraglide.md +284 -0
  117. package/blog/ru/lingui_vs_intlayer.md +122 -15
  118. package/blog/ru/next-intl_vs_intlayer-next-intl.md +125 -16
  119. package/blog/ru/next-intl_vs_intlayer.md +123 -13
  120. package/blog/ru/vue-i18n_vs_intlayer-vue-i18n.md +127 -27
  121. package/blog/ru/vue-i18n_vs_intlayer.md +193 -31
  122. package/blog/ru/vue-i18n_vs_intlayer_benchmark.md +326 -19
  123. package/blog/tr/i18next_vs_intlayer-i18next.md +122 -15
  124. package/blog/tr/i18next_vs_intlayer.md +128 -14
  125. package/blog/tr/is_intlayer_lighter_than_paraglide.md +284 -0
  126. package/blog/tr/lingui_vs_intlayer.md +122 -15
  127. package/blog/tr/next-intl_vs_intlayer-next-intl.md +124 -15
  128. package/blog/tr/next-intl_vs_intlayer.md +136 -20
  129. package/blog/tr/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  130. package/blog/tr/vue-i18n_vs_intlayer.md +188 -26
  131. package/blog/tr/vue-i18n_vs_intlayer_benchmark.md +361 -0
  132. package/blog/uk/i18next_vs_intlayer-i18next.md +122 -15
  133. package/blog/uk/i18next_vs_intlayer.md +130 -16
  134. package/blog/uk/is_intlayer_lighter_than_paraglide.md +284 -0
  135. package/blog/uk/lingui_vs_intlayer.md +122 -15
  136. package/blog/uk/next-intl_vs_intlayer-next-intl.md +124 -15
  137. package/blog/uk/next-intl_vs_intlayer.md +135 -19
  138. package/blog/uk/vue-i18n_vs_intlayer-vue-i18n.md +135 -17
  139. package/blog/uk/vue-i18n_vs_intlayer.md +188 -27
  140. package/blog/uk/vue-i18n_vs_intlayer_benchmark.md +361 -0
  141. package/blog/vi/i18next_vs_intlayer-i18next.md +122 -15
  142. package/blog/vi/i18next_vs_intlayer.md +128 -14
  143. package/blog/vi/is_intlayer_lighter_than_paraglide.md +284 -0
  144. package/blog/vi/lingui_vs_intlayer.md +122 -15
  145. package/blog/vi/next-intl_vs_intlayer-next-intl.md +124 -15
  146. package/blog/vi/next-intl_vs_intlayer.md +135 -19
  147. package/blog/vi/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  148. package/blog/vi/vue-i18n_vs_intlayer.md +188 -26
  149. package/blog/vi/vue-i18n_vs_intlayer_benchmark.md +361 -0
  150. package/blog/zh/i18next_vs_intlayer-i18next.md +122 -15
  151. package/blog/zh/i18next_vs_intlayer.md +128 -14
  152. package/blog/zh/is_intlayer_lighter_than_paraglide.md +284 -0
  153. package/blog/zh/lingui_vs_intlayer.md +122 -15
  154. package/blog/zh/next-intl_vs_intlayer-next-intl.md +124 -15
  155. package/blog/zh/next-intl_vs_intlayer.md +125 -15
  156. package/blog/zh/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  157. package/blog/zh/vue-i18n_vs_intlayer.md +192 -31
  158. package/blog/zh/vue-i18n_vs_intlayer_benchmark.md +340 -9
  159. package/dist/cjs/generated/blog.entry.cjs +20 -0
  160. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  161. package/dist/cjs/generated/docs.entry.cjs +60 -40
  162. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  163. package/dist/esm/generated/blog.entry.mjs +20 -0
  164. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  165. package/dist/esm/generated/docs.entry.mjs +60 -40
  166. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  167. package/dist/types/generated/blog.entry.d.ts +1 -0
  168. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  169. package/dist/types/generated/docs.entry.d.ts +3 -2
  170. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  171. package/docs/ar/benchmark/nextjs.md +19 -16
  172. package/docs/ar/benchmark/solid.md +26 -9
  173. package/docs/ar/benchmark/svelte.md +22 -7
  174. package/docs/ar/benchmark/tanstack.md +20 -16
  175. package/docs/ar/benchmark/vue.md +19 -10
  176. package/docs/ar/chrome_extension.md +130 -0
  177. package/docs/ar/cli/index.md +11 -1
  178. package/docs/ar/cli/infra.md +162 -0
  179. package/docs/ar/cli/init.md +24 -1
  180. package/docs/ar/cli/upgrade.md +125 -0
  181. package/docs/ar/dictionary/html.md +173 -5
  182. package/docs/ar/dictionary/markdown.md +263 -1
  183. package/docs/ar/intlayer_with_analog.md +23 -1
  184. package/docs/ar/intlayer_with_angular_19.md +24 -1
  185. package/docs/ar/intlayer_with_angular_21.md +24 -1
  186. package/docs/ar/intlayer_with_astro.md +24 -1
  187. package/docs/ar/intlayer_with_astro_lit.md +25 -1
  188. package/docs/ar/intlayer_with_astro_preact.md +26 -1
  189. package/docs/ar/intlayer_with_astro_react.md +26 -1
  190. package/docs/ar/intlayer_with_astro_solid.md +26 -1
  191. package/docs/ar/intlayer_with_astro_svelte.md +25 -1
  192. package/docs/ar/intlayer_with_astro_vue.md +25 -1
  193. package/docs/ar/intlayer_with_remix_3.md +22 -1
  194. package/docs/ar/self_hosting.md +406 -231
  195. package/docs/de/benchmark/nextjs.md +19 -16
  196. package/docs/de/benchmark/solid.md +26 -9
  197. package/docs/de/benchmark/svelte.md +22 -7
  198. package/docs/de/benchmark/tanstack.md +20 -16
  199. package/docs/de/benchmark/vue.md +19 -10
  200. package/docs/de/chrome_extension.md +130 -0
  201. package/docs/de/cli/index.md +11 -1
  202. package/docs/de/cli/infra.md +162 -0
  203. package/docs/de/cli/init.md +24 -1
  204. package/docs/de/cli/upgrade.md +125 -0
  205. package/docs/de/dictionary/html.md +173 -5
  206. package/docs/de/dictionary/markdown.md +263 -1
  207. package/docs/de/intlayer_with_analog.md +23 -1
  208. package/docs/de/intlayer_with_angular_19.md +24 -1
  209. package/docs/de/intlayer_with_angular_21.md +24 -1
  210. package/docs/de/intlayer_with_astro.md +24 -1
  211. package/docs/de/intlayer_with_astro_lit.md +25 -1
  212. package/docs/de/intlayer_with_astro_preact.md +26 -1
  213. package/docs/de/intlayer_with_astro_react.md +26 -1
  214. package/docs/de/intlayer_with_astro_solid.md +26 -1
  215. package/docs/de/intlayer_with_astro_svelte.md +25 -1
  216. package/docs/de/intlayer_with_astro_vue.md +25 -1
  217. package/docs/de/intlayer_with_remix_3.md +22 -1
  218. package/docs/de/self_hosting.md +404 -227
  219. package/docs/en/agent_skills.md +29 -1
  220. package/docs/en/benchmark/nextjs.md +19 -16
  221. package/docs/en/benchmark/solid.md +26 -9
  222. package/docs/en/benchmark/svelte.md +22 -7
  223. package/docs/en/benchmark/tanstack.md +21 -17
  224. package/docs/en/benchmark/vue.md +20 -11
  225. package/docs/en/chrome_extension.md +130 -0
  226. package/docs/en/cli/index.md +11 -1
  227. package/docs/en/cli/infra.md +175 -0
  228. package/docs/en/cli/init.md +25 -1
  229. package/docs/en/cli/upgrade.md +125 -0
  230. package/docs/en/dictionary/html.md +173 -5
  231. package/docs/en/dictionary/markdown.md +263 -1
  232. package/docs/en/intlayer_with_analog.md +23 -1
  233. package/docs/en/intlayer_with_angular_19.md +24 -1
  234. package/docs/en/intlayer_with_angular_21.md +24 -1
  235. package/docs/en/intlayer_with_astro.md +24 -1
  236. package/docs/en/intlayer_with_astro_lit.md +25 -1
  237. package/docs/en/intlayer_with_astro_preact.md +26 -1
  238. package/docs/en/intlayer_with_astro_react.md +26 -1
  239. package/docs/en/intlayer_with_astro_solid.md +26 -1
  240. package/docs/en/intlayer_with_astro_svelte.md +25 -1
  241. package/docs/en/intlayer_with_astro_vue.md +25 -1
  242. package/docs/en/intlayer_with_remix_3.md +22 -1
  243. package/docs/en/self_hosting.md +418 -176
  244. package/docs/en-GB/benchmark/nextjs.md +19 -16
  245. package/docs/en-GB/benchmark/solid.md +26 -9
  246. package/docs/en-GB/benchmark/svelte.md +22 -7
  247. package/docs/en-GB/benchmark/tanstack.md +20 -16
  248. package/docs/en-GB/benchmark/vue.md +20 -11
  249. package/docs/en-GB/chrome_extension.md +130 -0
  250. package/docs/en-GB/cli/index.md +11 -1
  251. package/docs/en-GB/cli/infra.md +162 -0
  252. package/docs/en-GB/cli/init.md +24 -1
  253. package/docs/en-GB/cli/upgrade.md +125 -0
  254. package/docs/en-GB/dictionary/html.md +173 -5
  255. package/docs/en-GB/dictionary/markdown.md +263 -1
  256. package/docs/en-GB/intlayer_with_analog.md +23 -1
  257. package/docs/en-GB/intlayer_with_angular_19.md +24 -1
  258. package/docs/en-GB/intlayer_with_angular_21.md +24 -1
  259. package/docs/en-GB/intlayer_with_astro.md +24 -1
  260. package/docs/en-GB/intlayer_with_astro_lit.md +25 -1
  261. package/docs/en-GB/intlayer_with_astro_preact.md +26 -1
  262. package/docs/en-GB/intlayer_with_astro_react.md +26 -1
  263. package/docs/en-GB/intlayer_with_astro_solid.md +26 -1
  264. package/docs/en-GB/intlayer_with_astro_svelte.md +25 -1
  265. package/docs/en-GB/intlayer_with_astro_vue.md +25 -1
  266. package/docs/en-GB/intlayer_with_remix_3.md +22 -1
  267. package/docs/en-GB/self_hosting.md +381 -206
  268. package/docs/es/benchmark/nextjs.md +19 -16
  269. package/docs/es/benchmark/solid.md +26 -9
  270. package/docs/es/benchmark/svelte.md +22 -7
  271. package/docs/es/benchmark/tanstack.md +20 -16
  272. package/docs/es/benchmark/vue.md +19 -10
  273. package/docs/es/chrome_extension.md +130 -0
  274. package/docs/es/cli/index.md +11 -1
  275. package/docs/es/cli/infra.md +162 -0
  276. package/docs/es/cli/init.md +24 -1
  277. package/docs/es/cli/upgrade.md +125 -0
  278. package/docs/es/dictionary/html.md +173 -5
  279. package/docs/es/dictionary/markdown.md +263 -1
  280. package/docs/es/intlayer_with_analog.md +23 -1
  281. package/docs/es/intlayer_with_angular_19.md +24 -1
  282. package/docs/es/intlayer_with_angular_21.md +24 -1
  283. package/docs/es/intlayer_with_astro.md +24 -1
  284. package/docs/es/intlayer_with_astro_lit.md +25 -1
  285. package/docs/es/intlayer_with_astro_preact.md +26 -1
  286. package/docs/es/intlayer_with_astro_react.md +26 -1
  287. package/docs/es/intlayer_with_astro_solid.md +26 -1
  288. package/docs/es/intlayer_with_astro_svelte.md +25 -1
  289. package/docs/es/intlayer_with_astro_vue.md +25 -1
  290. package/docs/es/intlayer_with_remix_3.md +22 -1
  291. package/docs/es/self_hosting.md +400 -223
  292. package/docs/fr/benchmark/nextjs.md +19 -16
  293. package/docs/fr/benchmark/solid.md +26 -9
  294. package/docs/fr/benchmark/svelte.md +22 -7
  295. package/docs/fr/benchmark/tanstack.md +20 -16
  296. package/docs/fr/benchmark/vue.md +20 -11
  297. package/docs/fr/chrome_extension.md +130 -0
  298. package/docs/fr/cli/index.md +11 -1
  299. package/docs/fr/cli/infra.md +162 -0
  300. package/docs/fr/cli/init.md +24 -1
  301. package/docs/fr/cli/upgrade.md +125 -0
  302. package/docs/fr/dictionary/html.md +173 -5
  303. package/docs/fr/dictionary/markdown.md +265 -4
  304. package/docs/fr/intlayer_with_analog.md +23 -1
  305. package/docs/fr/intlayer_with_angular_19.md +24 -1
  306. package/docs/fr/intlayer_with_angular_21.md +24 -1
  307. package/docs/fr/intlayer_with_astro.md +24 -1
  308. package/docs/fr/intlayer_with_astro_lit.md +25 -1
  309. package/docs/fr/intlayer_with_astro_preact.md +26 -1
  310. package/docs/fr/intlayer_with_astro_react.md +26 -1
  311. package/docs/fr/intlayer_with_astro_solid.md +26 -1
  312. package/docs/fr/intlayer_with_astro_svelte.md +25 -1
  313. package/docs/fr/intlayer_with_astro_vue.md +25 -1
  314. package/docs/fr/intlayer_with_remix_3.md +22 -1
  315. package/docs/fr/self_hosting.md +401 -224
  316. package/docs/hi/benchmark/nextjs.md +19 -16
  317. package/docs/hi/benchmark/solid.md +26 -9
  318. package/docs/hi/benchmark/svelte.md +22 -7
  319. package/docs/hi/benchmark/tanstack.md +20 -16
  320. package/docs/hi/benchmark/vue.md +20 -11
  321. package/docs/hi/chrome_extension.md +130 -0
  322. package/docs/hi/cli/index.md +11 -1
  323. package/docs/hi/cli/infra.md +162 -0
  324. package/docs/hi/cli/init.md +24 -1
  325. package/docs/hi/cli/upgrade.md +125 -0
  326. package/docs/hi/dictionary/html.md +173 -5
  327. package/docs/hi/dictionary/markdown.md +263 -1
  328. package/docs/hi/intlayer_with_analog.md +23 -1
  329. package/docs/hi/intlayer_with_angular_19.md +24 -1
  330. package/docs/hi/intlayer_with_angular_21.md +24 -1
  331. package/docs/hi/intlayer_with_astro.md +24 -1
  332. package/docs/hi/intlayer_with_astro_lit.md +25 -1
  333. package/docs/hi/intlayer_with_astro_preact.md +26 -1
  334. package/docs/hi/intlayer_with_astro_react.md +26 -1
  335. package/docs/hi/intlayer_with_astro_solid.md +26 -1
  336. package/docs/hi/intlayer_with_astro_svelte.md +25 -1
  337. package/docs/hi/intlayer_with_astro_vue.md +25 -1
  338. package/docs/hi/intlayer_with_remix_3.md +22 -1
  339. package/docs/hi/self_hosting.md +409 -235
  340. package/docs/id/benchmark/nextjs.md +19 -16
  341. package/docs/id/benchmark/solid.md +26 -9
  342. package/docs/id/benchmark/svelte.md +22 -7
  343. package/docs/id/benchmark/tanstack.md +20 -16
  344. package/docs/id/benchmark/vue.md +20 -11
  345. package/docs/id/chrome_extension.md +130 -0
  346. package/docs/id/cli/index.md +11 -1
  347. package/docs/id/cli/infra.md +162 -0
  348. package/docs/id/cli/init.md +24 -1
  349. package/docs/id/cli/upgrade.md +125 -0
  350. package/docs/id/dictionary/html.md +173 -5
  351. package/docs/id/dictionary/markdown.md +263 -1
  352. package/docs/id/intlayer_with_analog.md +23 -1
  353. package/docs/id/intlayer_with_angular_19.md +24 -1
  354. package/docs/id/intlayer_with_angular_21.md +24 -1
  355. package/docs/id/intlayer_with_astro.md +24 -1
  356. package/docs/id/intlayer_with_astro_lit.md +25 -1
  357. package/docs/id/intlayer_with_astro_preact.md +26 -1
  358. package/docs/id/intlayer_with_astro_react.md +26 -1
  359. package/docs/id/intlayer_with_astro_solid.md +26 -1
  360. package/docs/id/intlayer_with_astro_svelte.md +25 -1
  361. package/docs/id/intlayer_with_astro_vue.md +25 -1
  362. package/docs/id/intlayer_with_remix_3.md +22 -1
  363. package/docs/id/self_hosting.md +416 -243
  364. package/docs/it/benchmark/nextjs.md +19 -16
  365. package/docs/it/benchmark/solid.md +26 -9
  366. package/docs/it/benchmark/svelte.md +22 -7
  367. package/docs/it/benchmark/tanstack.md +20 -16
  368. package/docs/it/benchmark/vue.md +19 -10
  369. package/docs/it/chrome_extension.md +130 -0
  370. package/docs/it/cli/index.md +11 -1
  371. package/docs/it/cli/infra.md +162 -0
  372. package/docs/it/cli/init.md +24 -1
  373. package/docs/it/cli/upgrade.md +125 -0
  374. package/docs/it/dictionary/html.md +173 -5
  375. package/docs/it/dictionary/markdown.md +263 -1
  376. package/docs/it/intlayer_with_analog.md +23 -1
  377. package/docs/it/intlayer_with_angular_19.md +24 -1
  378. package/docs/it/intlayer_with_angular_21.md +24 -1
  379. package/docs/it/intlayer_with_astro.md +24 -1
  380. package/docs/it/intlayer_with_astro_lit.md +25 -1
  381. package/docs/it/intlayer_with_astro_preact.md +26 -1
  382. package/docs/it/intlayer_with_astro_react.md +26 -1
  383. package/docs/it/intlayer_with_astro_solid.md +26 -1
  384. package/docs/it/intlayer_with_astro_svelte.md +25 -1
  385. package/docs/it/intlayer_with_astro_vue.md +25 -1
  386. package/docs/it/intlayer_with_remix_3.md +22 -1
  387. package/docs/it/self_hosting.md +412 -237
  388. package/docs/ja/benchmark/nextjs.md +19 -16
  389. package/docs/ja/benchmark/solid.md +26 -9
  390. package/docs/ja/benchmark/svelte.md +22 -7
  391. package/docs/ja/benchmark/tanstack.md +18 -14
  392. package/docs/ja/benchmark/vue.md +19 -10
  393. package/docs/ja/chrome_extension.md +130 -0
  394. package/docs/ja/cli/index.md +11 -1
  395. package/docs/ja/cli/infra.md +162 -0
  396. package/docs/ja/cli/init.md +24 -1
  397. package/docs/ja/cli/upgrade.md +125 -0
  398. package/docs/ja/dictionary/html.md +173 -5
  399. package/docs/ja/dictionary/markdown.md +263 -1
  400. package/docs/ja/intlayer_with_analog.md +23 -1
  401. package/docs/ja/intlayer_with_angular_19.md +24 -1
  402. package/docs/ja/intlayer_with_angular_21.md +24 -1
  403. package/docs/ja/intlayer_with_astro.md +24 -1
  404. package/docs/ja/intlayer_with_astro_lit.md +25 -1
  405. package/docs/ja/intlayer_with_astro_preact.md +26 -1
  406. package/docs/ja/intlayer_with_astro_react.md +26 -1
  407. package/docs/ja/intlayer_with_astro_solid.md +26 -1
  408. package/docs/ja/intlayer_with_astro_svelte.md +25 -1
  409. package/docs/ja/intlayer_with_astro_vue.md +25 -1
  410. package/docs/ja/intlayer_with_remix_3.md +22 -1
  411. package/docs/ja/self_hosting.md +398 -223
  412. package/docs/ko/benchmark/nextjs.md +19 -16
  413. package/docs/ko/benchmark/solid.md +26 -9
  414. package/docs/ko/benchmark/svelte.md +22 -7
  415. package/docs/ko/benchmark/tanstack.md +20 -16
  416. package/docs/ko/benchmark/vue.md +20 -11
  417. package/docs/ko/chrome_extension.md +130 -0
  418. package/docs/ko/cli/index.md +11 -1
  419. package/docs/ko/cli/infra.md +162 -0
  420. package/docs/ko/cli/init.md +24 -1
  421. package/docs/ko/cli/upgrade.md +126 -0
  422. package/docs/ko/dictionary/html.md +173 -5
  423. package/docs/ko/dictionary/markdown.md +263 -1
  424. package/docs/ko/intlayer_with_analog.md +23 -1
  425. package/docs/ko/intlayer_with_angular_19.md +24 -1
  426. package/docs/ko/intlayer_with_angular_21.md +24 -1
  427. package/docs/ko/intlayer_with_astro.md +24 -1
  428. package/docs/ko/intlayer_with_astro_lit.md +25 -1
  429. package/docs/ko/intlayer_with_astro_preact.md +26 -1
  430. package/docs/ko/intlayer_with_astro_react.md +26 -1
  431. package/docs/ko/intlayer_with_astro_solid.md +26 -1
  432. package/docs/ko/intlayer_with_astro_svelte.md +25 -1
  433. package/docs/ko/intlayer_with_astro_vue.md +25 -1
  434. package/docs/ko/intlayer_with_remix_3.md +22 -1
  435. package/docs/ko/self_hosting.md +411 -238
  436. package/docs/pl/benchmark/nextjs.md +19 -16
  437. package/docs/pl/benchmark/solid.md +26 -9
  438. package/docs/pl/benchmark/svelte.md +22 -7
  439. package/docs/pl/benchmark/tanstack.md +20 -16
  440. package/docs/pl/benchmark/vue.md +20 -11
  441. package/docs/pl/chrome_extension.md +130 -0
  442. package/docs/pl/cli/index.md +11 -1
  443. package/docs/pl/cli/infra.md +162 -0
  444. package/docs/pl/cli/init.md +24 -1
  445. package/docs/pl/cli/upgrade.md +125 -0
  446. package/docs/pl/dictionary/html.md +173 -5
  447. package/docs/pl/dictionary/markdown.md +263 -1
  448. package/docs/pl/intlayer_with_analog.md +23 -1
  449. package/docs/pl/intlayer_with_angular_19.md +24 -1
  450. package/docs/pl/intlayer_with_angular_21.md +24 -1
  451. package/docs/pl/intlayer_with_astro.md +24 -1
  452. package/docs/pl/intlayer_with_astro_lit.md +25 -1
  453. package/docs/pl/intlayer_with_astro_preact.md +26 -1
  454. package/docs/pl/intlayer_with_astro_react.md +26 -1
  455. package/docs/pl/intlayer_with_astro_solid.md +26 -1
  456. package/docs/pl/intlayer_with_astro_svelte.md +25 -1
  457. package/docs/pl/intlayer_with_astro_vue.md +25 -1
  458. package/docs/pl/intlayer_with_remix_3.md +22 -1
  459. package/docs/pl/self_hosting.md +408 -233
  460. package/docs/pt/benchmark/nextjs.md +19 -16
  461. package/docs/pt/benchmark/solid.md +26 -9
  462. package/docs/pt/benchmark/svelte.md +22 -7
  463. package/docs/pt/benchmark/tanstack.md +20 -16
  464. package/docs/pt/benchmark/vue.md +19 -10
  465. package/docs/pt/chrome_extension.md +130 -0
  466. package/docs/pt/cli/index.md +11 -1
  467. package/docs/pt/cli/infra.md +162 -0
  468. package/docs/pt/cli/init.md +24 -1
  469. package/docs/pt/cli/upgrade.md +125 -0
  470. package/docs/pt/dictionary/html.md +173 -5
  471. package/docs/pt/dictionary/markdown.md +263 -1
  472. package/docs/pt/intlayer_with_analog.md +23 -1
  473. package/docs/pt/intlayer_with_angular_19.md +24 -1
  474. package/docs/pt/intlayer_with_angular_21.md +24 -1
  475. package/docs/pt/intlayer_with_astro.md +24 -1
  476. package/docs/pt/intlayer_with_astro_lit.md +25 -1
  477. package/docs/pt/intlayer_with_astro_preact.md +26 -1
  478. package/docs/pt/intlayer_with_astro_react.md +26 -1
  479. package/docs/pt/intlayer_with_astro_solid.md +26 -1
  480. package/docs/pt/intlayer_with_astro_svelte.md +25 -1
  481. package/docs/pt/intlayer_with_astro_vue.md +25 -1
  482. package/docs/pt/intlayer_with_remix_3.md +22 -1
  483. package/docs/pt/self_hosting.md +399 -224
  484. package/docs/ru/benchmark/nextjs.md +19 -16
  485. package/docs/ru/benchmark/solid.md +26 -9
  486. package/docs/ru/benchmark/svelte.md +22 -7
  487. package/docs/ru/benchmark/tanstack.md +20 -16
  488. package/docs/ru/benchmark/vue.md +20 -11
  489. package/docs/ru/chrome_extension.md +130 -0
  490. package/docs/ru/cli/index.md +11 -1
  491. package/docs/ru/cli/infra.md +162 -0
  492. package/docs/ru/cli/init.md +24 -1
  493. package/docs/ru/cli/upgrade.md +125 -0
  494. package/docs/ru/dictionary/html.md +173 -5
  495. package/docs/ru/dictionary/markdown.md +263 -1
  496. package/docs/ru/intlayer_with_analog.md +23 -1
  497. package/docs/ru/intlayer_with_angular_19.md +24 -1
  498. package/docs/ru/intlayer_with_angular_21.md +24 -1
  499. package/docs/ru/intlayer_with_astro.md +24 -1
  500. package/docs/ru/intlayer_with_astro_lit.md +25 -1
  501. package/docs/ru/intlayer_with_astro_preact.md +26 -1
  502. package/docs/ru/intlayer_with_astro_react.md +26 -1
  503. package/docs/ru/intlayer_with_astro_solid.md +26 -1
  504. package/docs/ru/intlayer_with_astro_svelte.md +25 -1
  505. package/docs/ru/intlayer_with_astro_vue.md +25 -1
  506. package/docs/ru/intlayer_with_remix_3.md +22 -1
  507. package/docs/ru/self_hosting.md +403 -228
  508. package/docs/tr/benchmark/nextjs.md +19 -16
  509. package/docs/tr/benchmark/solid.md +26 -9
  510. package/docs/tr/benchmark/svelte.md +22 -7
  511. package/docs/tr/benchmark/tanstack.md +20 -16
  512. package/docs/tr/benchmark/vue.md +20 -11
  513. package/docs/tr/chrome_extension.md +130 -0
  514. package/docs/tr/cli/index.md +11 -1
  515. package/docs/tr/cli/infra.md +162 -0
  516. package/docs/tr/cli/init.md +24 -1
  517. package/docs/tr/cli/upgrade.md +125 -0
  518. package/docs/tr/dictionary/html.md +173 -5
  519. package/docs/tr/dictionary/markdown.md +263 -1
  520. package/docs/tr/intlayer_with_analog.md +23 -1
  521. package/docs/tr/intlayer_with_angular_19.md +24 -1
  522. package/docs/tr/intlayer_with_angular_21.md +24 -1
  523. package/docs/tr/intlayer_with_astro.md +24 -1
  524. package/docs/tr/intlayer_with_astro_lit.md +25 -1
  525. package/docs/tr/intlayer_with_astro_preact.md +26 -1
  526. package/docs/tr/intlayer_with_astro_react.md +26 -1
  527. package/docs/tr/intlayer_with_astro_solid.md +26 -1
  528. package/docs/tr/intlayer_with_astro_svelte.md +25 -1
  529. package/docs/tr/intlayer_with_astro_vue.md +25 -1
  530. package/docs/tr/intlayer_with_remix_3.md +22 -1
  531. package/docs/tr/self_hosting.md +410 -234
  532. package/docs/uk/benchmark/nextjs.md +19 -16
  533. package/docs/uk/benchmark/solid.md +26 -9
  534. package/docs/uk/benchmark/svelte.md +22 -7
  535. package/docs/uk/benchmark/tanstack.md +20 -16
  536. package/docs/uk/benchmark/vue.md +20 -11
  537. package/docs/uk/chrome_extension.md +130 -0
  538. package/docs/uk/cli/index.md +11 -1
  539. package/docs/uk/cli/infra.md +162 -0
  540. package/docs/uk/cli/init.md +24 -1
  541. package/docs/uk/cli/upgrade.md +125 -0
  542. package/docs/uk/dictionary/html.md +173 -5
  543. package/docs/uk/dictionary/markdown.md +263 -1
  544. package/docs/uk/intlayer_with_analog.md +23 -1
  545. package/docs/uk/intlayer_with_angular_19.md +24 -1
  546. package/docs/uk/intlayer_with_angular_21.md +24 -1
  547. package/docs/uk/intlayer_with_astro.md +24 -1
  548. package/docs/uk/intlayer_with_astro_lit.md +25 -1
  549. package/docs/uk/intlayer_with_astro_preact.md +26 -1
  550. package/docs/uk/intlayer_with_astro_react.md +26 -1
  551. package/docs/uk/intlayer_with_astro_solid.md +26 -1
  552. package/docs/uk/intlayer_with_astro_svelte.md +25 -1
  553. package/docs/uk/intlayer_with_astro_vue.md +25 -1
  554. package/docs/uk/intlayer_with_remix_3.md +22 -1
  555. package/docs/uk/self_hosting.md +413 -238
  556. package/docs/vi/benchmark/nextjs.md +19 -16
  557. package/docs/vi/benchmark/solid.md +26 -9
  558. package/docs/vi/benchmark/svelte.md +22 -7
  559. package/docs/vi/benchmark/tanstack.md +20 -16
  560. package/docs/vi/benchmark/vue.md +20 -11
  561. package/docs/vi/chrome_extension.md +130 -0
  562. package/docs/vi/cli/index.md +11 -1
  563. package/docs/vi/cli/infra.md +162 -0
  564. package/docs/vi/cli/init.md +24 -1
  565. package/docs/vi/cli/upgrade.md +125 -0
  566. package/docs/vi/dictionary/html.md +173 -5
  567. package/docs/vi/dictionary/markdown.md +263 -1
  568. package/docs/vi/intlayer_with_analog.md +23 -1
  569. package/docs/vi/intlayer_with_angular_19.md +24 -1
  570. package/docs/vi/intlayer_with_angular_21.md +24 -1
  571. package/docs/vi/intlayer_with_astro.md +24 -1
  572. package/docs/vi/intlayer_with_astro_lit.md +25 -1
  573. package/docs/vi/intlayer_with_astro_preact.md +26 -1
  574. package/docs/vi/intlayer_with_astro_react.md +26 -1
  575. package/docs/vi/intlayer_with_astro_solid.md +26 -1
  576. package/docs/vi/intlayer_with_astro_svelte.md +25 -1
  577. package/docs/vi/intlayer_with_astro_vue.md +25 -1
  578. package/docs/vi/intlayer_with_remix_3.md +22 -1
  579. package/docs/vi/self_hosting.md +408 -234
  580. package/docs/zh/benchmark/nextjs.md +19 -16
  581. package/docs/zh/benchmark/solid.md +26 -9
  582. package/docs/zh/benchmark/svelte.md +22 -7
  583. package/docs/zh/benchmark/tanstack.md +19 -15
  584. package/docs/zh/benchmark/vue.md +20 -11
  585. package/docs/zh/chrome_extension.md +130 -0
  586. package/docs/zh/cli/index.md +11 -1
  587. package/docs/zh/cli/infra.md +162 -0
  588. package/docs/zh/cli/init.md +24 -1
  589. package/docs/zh/cli/upgrade.md +125 -0
  590. package/docs/zh/dictionary/html.md +172 -5
  591. package/docs/zh/dictionary/markdown.md +262 -1
  592. package/docs/zh/intlayer_with_analog.md +23 -1
  593. package/docs/zh/intlayer_with_angular_19.md +24 -1
  594. package/docs/zh/intlayer_with_angular_21.md +24 -1
  595. package/docs/zh/intlayer_with_astro.md +24 -1
  596. package/docs/zh/intlayer_with_astro_lit.md +25 -1
  597. package/docs/zh/intlayer_with_astro_preact.md +26 -1
  598. package/docs/zh/intlayer_with_astro_react.md +26 -1
  599. package/docs/zh/intlayer_with_astro_solid.md +26 -1
  600. package/docs/zh/intlayer_with_astro_svelte.md +25 -1
  601. package/docs/zh/intlayer_with_astro_vue.md +25 -1
  602. package/docs/zh/intlayer_with_remix_3.md +22 -1
  603. package/docs/zh/self_hosting.md +410 -237
  604. package/legal/ar/privacy_notice.md +9 -3
  605. package/legal/de/privacy_notice.md +9 -3
  606. package/legal/en/privacy_notice.md +10 -3
  607. package/legal/en-GB/privacy_notice.md +9 -3
  608. package/legal/es/privacy_notice.md +9 -3
  609. package/legal/fr/privacy_notice.md +9 -3
  610. package/legal/hi/privacy_notice.md +9 -3
  611. package/legal/id/privacy_notice.md +9 -3
  612. package/legal/it/privacy_notice.md +9 -3
  613. package/legal/ja/privacy_notice.md +9 -3
  614. package/legal/ko/privacy_notice.md +9 -3
  615. package/legal/pl/privacy_notice.md +9 -3
  616. package/legal/pt/privacy_notice.md +9 -3
  617. package/legal/ru/privacy_notice.md +9 -3
  618. package/legal/tr/privacy_notice.md +9 -3
  619. package/legal/uk/privacy_notice.md +9 -3
  620. package/legal/vi/privacy_notice.md +9 -3
  621. package/legal/zh/privacy_notice.md +9 -3
  622. package/package.json +6 -6
  623. package/src/generated/blog.entry.ts +20 -0
  624. package/src/generated/docs.entry.ts +60 -40
  625. package/docs/ar/roadmap.md +0 -321
  626. package/docs/de/roadmap.md +0 -322
  627. package/docs/en/intlayer_with_astro_vanilla.md +0 -713
  628. package/docs/en/roadmap.md +0 -325
  629. package/docs/en-GB/roadmap.md +0 -322
  630. package/docs/es/roadmap.md +0 -322
  631. package/docs/fr/roadmap.md +0 -322
  632. package/docs/hi/roadmap.md +0 -322
  633. package/docs/id/roadmap.md +0 -325
  634. package/docs/it/roadmap.md +0 -322
  635. package/docs/ja/roadmap.md +0 -322
  636. package/docs/ko/roadmap.md +0 -322
  637. package/docs/pl/roadmap.md +0 -325
  638. package/docs/pt/roadmap.md +0 -322
  639. package/docs/ru/roadmap.md +0 -322
  640. package/docs/tr/roadmap.md +0 -325
  641. package/docs/uk/roadmap.md +0 -325
  642. package/docs/vi/roadmap.md +0 -325
  643. 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: "Lingui vs Intlayer: 2026 Benchmark & Vergleich"
5
5
  description: "Zwei compilerbasierte i18n-Bibliotheken gemessen auf Next.js und TanStack Start. Bundle-Größe, Content-Leakage, Komponentengröße, Hydratisierung, Sprachwechsel-Reaktivität und Developer Experience."
6
6
  keywords:
@@ -24,6 +24,8 @@ author: aymericzip
24
24
 
25
25
  # Lingui VS Intlayer | React & Next.js Internationalisierungs-Benchmark (i18n)
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 und Intlayer sind die beiden Bibliotheken in diesem Benchmark, die auf einen **Compiler** anstelle einer reinen Runtime setzen. Lingui extrahiert Nachrichten aus Makros zur Build-Zeit und kompiliert Kataloge pro Sprache. Intlayer kompiliert komponentenbasierte Wörterbücher und unterzieht sie pro Sprache einem automatischen Tree-Shaking. Auf dem Papier klingen beide Ansätze ähnlich. Die Messwerte zeigen jedoch, wo sie sich deutlich unterscheiden.
28
30
 
29
31
  Die Messdaten stammen aus [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom), einer quelloffenen Benchmark-Suite, die dieselbe Anwendung mit jeder Bibliothek baut und erfasst, was der Browser tatsächlich herunterlädt und ausführt.
@@ -96,6 +98,10 @@ Für jeden Build erfasst die Suite:
96
98
 
97
99
  ### Ergebnisse auf Next.js
98
100
 
101
+ Wählen Sie die Metriken und Bibliotheken aus, die für Sie wichtig sind:
102
+
103
+ <I18nBenchmark framework="nextjs" vertical/>
104
+
99
105
  | Bibliothek | Strategie | Lib size (gz) | Page JS Ø (gz) | Sprach-Leak | Seiten-Leak | Komponente Ø (gz) | E2E-Reaktivität | Hydratisierung |
100
106
  | -------------------- | -------------- | ------------: | -------------: | ----------: | ----------: | ----------------: | --------------: | -------------: |
101
107
  | **base** (ohne i18n) | - | 0,0 KB | 141,0 KB | 0,0% | 0,0% | 0,9 KB | 13,4 ms | 11,8 ms |
@@ -114,6 +120,15 @@ Für jeden Build erfasst die Suite:
114
120
  - **Quellsprachen-Leakage bleibt bestehen.** Selbst in den optimierten Setups werden **3-15% englische Texte in französischen Seiten mitgeliefert**. Lingui-Makros halten den Quelltext als Fallback vorrätig, wodurch er im Bundle landet. Intlayer löst Fallbacks zur Build-Zeit auf und liefert ausschließlich die aktive Sprache aus.
115
121
  - **Komponentengröße explodiert in `scoped-dynamic`.** Jede einzeln kompilierte Komponente wiegt im Schnitt **152,6 KB**, da alle Routenkataloge über die Komponentenimporte erreichbar bleiben. Dieselbe Komponente mit `useIntlayer()` wiegt im Schnitt nur **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
+ > Vollständige Tabelle, jede Bibliothek und jede Strategie, im [Next.js-Benchmark-Bericht](https://intlayer.org/de/doc/benchmark/nextjs).
131
+
117
132
  ### Ergebnisse auf TanStack Start
118
133
 
119
134
  | Bibliothek | Strategie | Lib size (gz) | Page JS Ø (gz) | Sprach-Leak | Seiten-Leak | Komponente Ø (gz) | E2E-Reaktivität | Hydratisierung |
@@ -135,8 +150,19 @@ Für jeden Build erfasst die Suite:
135
150
  - **Intlayers `static`-Zeile erreicht bereits 0% Seiten-Leakage**, da nur Wörterbücher gebündelt werden, die von den Komponenten dieser Seite tatsächlich importiert werden. Eine einzige Konfigurationszeile (`importMode: 'dynamic'`) beseitigt auch die Sprach-Leakage.
136
151
  - **`@intlayer/lingui`** behält Linguis Makrosyntax bei und bezieht Daten aus Intlayer-Wörterbüchern. Es tauscht etwas Gesamtgröße pro Seite (137 KB, da die Makro-Runtime verbleibt) gegen drastisch leichtere Komponenten (12,8 KB) und schnellere Hydratisierung. Eine hervorragende Migrationshilfe.
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
+ > Vollständige Tabelle im [TanStack Start-Benchmark-Bericht](https://intlayer.org/de/doc/benchmark/tanstack).
161
+
138
162
  ## Warum dieser Unterschied? Zwei Compiler, zwei Arbeitseinheiten
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
  Beide Lösungen kompilieren. Der Unterschied liegt darin, **was** sie kompilieren.
141
167
 
142
168
  **Lingui kompiliert Kataloge.** Makros in Ihrem Quelltext werden in eine `.po`-Datei pro Sprache extrahiert und anschließend in ein JS-Modul pro Sprache kompiliert. Die Arbeitseinheit ist die **Sprache**. Eine feinere Zerlegung nach Routen oder Komponenten verlangt mehrere Kataloge, eine erweiterte `lingui.config.ts` und eine händische Ladelogik pro Route. Die `I18n`-Instanz ist global; jeder `useLingui()`-Aufruf verbindet die Komponente mit ihr.
@@ -176,7 +202,9 @@ Beide Lösungen kompilieren. Der Unterschied liegt darin, **was** sie kompiliere
176
202
  └── about.content.ts
177
203
  ```
178
204
 
179
- Genau deshalb ist das `scoped-dynamic`-Muster bei Intlayer ein automatisches Build-Ergebnis, während es bei Lingui ein eigenständiges Konfigurationsprojekt darstellt.
205
+ Genau deshalb ist das `scoped-dynamic`-Muster bei Intlayer ein automatisches Build-Ergebnis, während es bei Lingui ein eigenständiges Konfigurationsprojekt darstellt. Die Lücke vergrößert sich auf zwei Achsen gleichzeitig, Seiten und Sprachen:
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
  > Um die Werte der Zeile `dynamic` zu erreichen, setzen Sie `dictionary.importMode: 'dynamic'` in Ihrer `intlayer.config.ts`. Siehe die [Dokumentation zur Bundle-Optimierung](https://intlayer.org/de/doc/concept/bundle-optimization).
182
210
 
@@ -184,7 +212,8 @@ Genau deshalb ist das `scoped-dynamic`-Muster bei Intlayer ein automatisches Bui
184
212
 
185
213
  ### Einrichtung
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
  Anschließend fügen Sie `@lingui/babel-plugin-lingui-macro` (oder `@lingui/swc-plugin`) zum Bundler hinzu, führen `lingui extract` nach Codeänderungen und `lingui compile` vor dem Build aus, und umschließen die Anwendung mit `<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
  Fügen Sie `intlayer()` in `vite.config.ts` (oder `withIntlayer()` in `next.config.ts`) hinzu und umschließen Sie den Baum mit `<IntlayerProvider>`. Keine separaten Extraktions- oder Kompilierschritte: Wörterbücher werden direkt beim Start des Bundlers verarbeitet.
234
264
 
265
+ </Tab>
266
+ </Tabs>
235
267
  ### Komponente
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
  Der englische Text steht in der Komponente; die französische Übersetzung landet in `src/locales/fr/messages.po` unter einer gehashten ID, sobald `lingui extract` ausgeführt wurde. Vergisst man die Extraktion oder das Kompilieren, wird stillschweigend auf Englisch zurückgegriffen.
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
  Beide Sprachen liegen gemeinsam in einer Datei neben der Komponente. Ein fehlender `fr`-Wert erzeugt einen Build-Fehler, ein falscher Schlüssel sofort einen TypeScript-Fehler.
299
333
 
334
+ </Tab>
335
+ </Tabs>
300
336
  ### Außerhalb von Komponenten
301
337
 
302
338
  Metadaten, Loader, Serverfunktionen: überall dort, wo kein React-Baum existiert.
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
  Eine frische `I18n`-Instanz pro Aufruf, manuelle Zuweisung des passenden Katalogs und `msg` + `i18n._()` anstelle von `t`. Wie die [Benchmark-Notizen](https://github.com/intlayer-org/benchmark-bloom/blob/main/report/NOTE.md) festhalten, ist die Entscheidung zwischen `t`, `` t` ` ``, `i18n.t()`, `msg` oder `<Trans>` oft nicht intuitiv.
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
  ## Lingui-Makros behalten, Intlayer-Wörterbücher nutzen
340
381
 
341
382
  `@intlayer/lingui` dient als Drop-in-Adapter für `@lingui/core` und `@lingui/react`. Makros kompilieren weiterhin normal; die erzeugten `i18n._()`-Aufrufe werden über Intlayer-Wörterbücher bedient, während `.po`-Synchronisations-Plugins bestehende Kataloge als Wahrheitsquelle beibehalten. ICU-Pluralformen und Selects rendern identisch.
@@ -353,16 +394,82 @@ Belassen Sie `@lingui/babel-plugin-lingui-macro` / `@lingui/swc-plugin` im Build
353
394
 
354
395
  ## Wann welche Bibliothek wählen?
355
396
 
356
- - **Wählen Sie Lingui**, wenn Sie **ICU MessageFormat** mit typisierten Makros benötigen, Ihre Übersetzer mit **`.po`**-Dateien in bestehenden TMS-Pipelines arbeiten, Sie Quelltexte inline im JSX bevorzugen und Ihr Team die Verwaltung von Extraktions-, Kompilier- und Aufteilungsschritten beherrscht. Bei konfiguriertem Lazy Loading ist die Seitengröße sehr konkurrenzfähig.
357
- - **Wählen Sie Intlayer**, wenn Sie **komponentenbezogene Inhalte**, **strikte TypeScript-Typisierung**, **Fehler bei fehlenden Schlüsseln zur Build-Zeit**, **automatisiertes Tree-Shaking und Lazy Loading ohne Konfiguration**, kleine Komponenten, schnelle Hydratisierung, sofortigen Sprachwechsel und integrierte Redaktionstools (visueller Editor, CMS, KI-Übersetzung, MCP-Server) suchen. Besonders empfehlenswert für modulare Architekturen und Design-Systeme.
358
- - **Wählen Sie `@intlayer/lingui`**, wenn Sie Lingui nutzen und schrittweise auf Intlayers Wörterbuch-Architektur umsteigen möchten, ohne bestehende Makros umschreiben zu müssen.
397
+ <AccordionGroup>
398
+ <Accordion header="Lingui wählen">
399
+
400
+ Sie möchten **ICU MessageFormat** mit typisierten Makros, Ihre Übersetzer arbeiten in **`.po`** mit einer bestehenden TMS-Pipeline, Sie bevorzugen Quellstrings inline in JSX und Ihr Team bewältigt den Workflow aus Extraktion / Kompilierung / Katalogaufteilung problemlos. Sein JS pro Seite ist wettbewerbsfähig, sobald Lazy Loading eingerichtet ist.
401
+
402
+ </Accordion>
403
+ <Accordion header="Intlayer wählen">
404
+
405
+ Sie möchten **komponentenbezogene Inhalte**, **striktes TypeScript**, **Fehler bei fehlenden Schlüsseln zur Build-Zeit**, **müheloses Tree-Shaking und Lazy Loading**, schlanke Komponenten, schnelle Hydratisierung, sofortigen Sprachwechsel und integrierte Redaktionstools ([Visual Editor](https://intlayer.org/de/doc/concept/editor), [CMS](https://intlayer.org/de/doc/concept/cms), [KI-Übersetzung](https://intlayer.org/de/doc/concept/auto-fill), [MCP-Server](https://intlayer.org/de/doc/mcp-server)). Besonders relevant für große, modulare Codebasen und Designsysteme.
406
+
407
+ </Accordion>
408
+ <Accordion header="@intlayer/lingui wählen">
409
+
410
+ Sie nutzen bereits Lingui und möchten schrittweise zu Intlayer-Wörterbüchern wechseln, ohne Makros anzutasten. Ihre `.po`-Kataloge bleiben über das [PO-Synchronisations-Plugin](https://intlayer.org/de/doc/compatibility/lingui) die Quelle der Wahrheit. Seite an Seite gemessen in [Lingui vs @intlayer/lingui](https://intlayer.org/de/blog/lingui-vs-intlayer-lingui).
411
+
412
+ </Accordion>
413
+ </AccordionGroup>
414
+
415
+ ## FAQ
416
+
417
+ <FAQ>
418
+
419
+ <Question title="Lingui kompiliert ebenfalls. Warum ist die Ausgabe so unterschiedlich?">
420
+
421
+ Weil sich die Einheit der Kompilierung unterscheidet. Lingui kompiliert **einen Katalog pro Sprache**: Alles darunter (Kataloge pro Route, Lazy Loading, Ausschluss des Fallbacks aus dem Bundle) ist Konfigurationsaufwand. Intlayer kompiliert **ein Wörterbuch pro Komponente**, sodass die Routenabgrenzung automatisch im Build entsteht. Deshalb wiegt eine isoliert kompilierte Lingui-Komponente 58-153 KB gegenüber 6-8 KB bei Intlayer.
422
+
423
+ </Question>
424
+
425
+ <Question title="Warum erreicht das Locale-Leakage bei Lingui nie 0%?">
426
+
427
+ Makros halten die Quellnachricht als Laufzeit-Fallback bereit, sodass der englische String neben seiner Übersetzung ausgeliefert wird. Der Benchmark misst **3-15% `en`-Strings in `fr`-Seiten** in jedem optimierten Setup. Intlayer löst Fallbacks zur Build-Zeit auf und liefert nur die aktive Sprache aus.
428
+
429
+ </Question>
430
+
431
+ <Question title="Ist das JavaScript pro Seite von Lingui wirklich wettbewerbsfähig?">
432
+
433
+ Ja, und auf TanStack Start gewinnt es hauchdünn: 115.2 KB in `dynamic` gegenüber 118.6 KB bei Intlayer. Kompilierte Kataloge mit gehashten IDs sind kompakt. Die Kosten zeigen sich an anderer Stelle: Hydratisierung bei 28-34 ms gegenüber 11-14 ms und ein **42 ms** dauernder Sprachwechsel im `scoped-dynamic`-Setup.
434
+
435
+ </Question>
436
+
437
+ <Question title="Muss ich Makros aufgeben, um zu migrieren?">
438
+
439
+ Nein. `@intlayer/lingui` kompiliert `` t`...` ``, `<Trans>`, `msg`, `plural`, `select` und `selectOrdinal` wie gewohnt weiter; nur die Auflösung unter `i18n._()` ändert sich. Behalten Sie `@lingui/babel-plugin-lingui-macro` oder `@lingui/swc-plugin` im Build. Siehe [Lingui-Kompatibilitätsdokumentation](https://intlayer.org/de/doc/compatibility/lingui).
440
+
441
+ </Question>
442
+
443
+ <Question title="Was ist mit den Extraktions- und Kompilierungsschritten?">
444
+
445
+ Sie bleiben für die Makros bestehen und entfallen für Intlayers eigene Inhalte. `.content.ts`-Wörterbücher werden beim Ausführen des Bundlers ohne separaten CLI-Schritt erstellt, und [`intlayer test`](https://intlayer.org/de/doc/concept/cli) lässt CI bei fehlenden Schlüsseln fehlschlagen, anstatt stillschweigend auf den Quellstring zurückzugreifen.
446
+
447
+ </Question>
448
+
449
+ </FAQ>
359
450
 
360
451
  ## Weiterführende Vergleiche
361
452
 
362
- - [next-intl vs Intlayer](https://intlayer.org/de/blog/next-intl-vs-intlayer) (auf demselben Benchmark)
363
- - [i18next vs Intlayer](https://intlayer.org/de/blog/i18next-vs-intlayer) (auf demselben Benchmark)
364
- - [vue-i18n vs Intlayer](https://intlayer.org/de/blog/vue-i18n-vs-intlayer-benchmark) (auf demselben Benchmark)
365
- - [Compiler vs deklaratives i18n](https://intlayer.org/de/blog/compiler-vs-declarative-i18n)
453
+ Gleicher Benchmark, andere Bibliotheken:
454
+
455
+ - [next-intl vs Intlayer](https://intlayer.org/de/blog/next-intl-vs-intlayer)
456
+ - [i18next vs Intlayer](https://intlayer.org/de/blog/i18next-vs-intlayer)
457
+ - [vue-i18n vs Intlayer benchmark](https://intlayer.org/de/blog/vue-i18n-vs-intlayer-benchmark)
458
+ - [next-i18next vs next-intl vs Intlayer](https://intlayer.org/de/blog/next-i18next-vs-next-intl-vs-intlayer)
459
+ - [react-i18next vs react-intl vs Intlayer](https://intlayer.org/de/blog/react-i18next-vs-react-intl-vs-intlayer)
460
+
461
+ Vertiefung:
462
+
463
+ - [Lingui vs @intlayer/lingui](https://intlayer.org/de/blog/lingui-vs-intlayer-lingui), der Adapter gemessen auf derselben Anwendung
464
+ - [Compiler-driven vs declarative i18n](https://intlayer.org/de/blog/compiler-vs-declarative-i18n)
465
+ - [Per-component vs centralized i18n](https://intlayer.org/de/blog/per-component-vs-centralized-i18n)
466
+ - [ICU message format explained](https://intlayer.org/de/blog/icu-message-format)
467
+
468
+ Referenzdokumentation:
469
+
470
+ - [Next.js-Benchmark-Bericht](https://intlayer.org/de/doc/benchmark/nextjs) und [TanStack Start-Benchmark-Bericht](https://intlayer.org/de/doc/benchmark/tanstack)
471
+ - [Compat adapter: Lingui](https://intlayer.org/de/doc/compatibility/lingui)
472
+ - [Bundle-Optimierung](https://intlayer.org/de/doc/concept/bundle-optimization) und [der Intlayer-Compiler](https://intlayer.org/de/doc/compiler)
366
473
 
367
474
  ## GitHub STARS
368
475
 
@@ -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: "next-intl vs @intlayer/next-intl: Gleiche API, Unterschiedliches Bundle"
5
5
  description: Was sich ändert, wenn die next-intl-Importe einer Next.js-App vom @intlayer/next-intl-Kompatibilitäts-Adapter bereitgestellt werden. Bundle-Größe, Speicherlecks, Komponentengröße und Hydration gemessen an denselben Code, plus was der Adapter behält, ignoriert und nicht ersetzen kann.
6
6
  keywords:
@@ -26,6 +26,8 @@ author: aymericzip
26
26
 
27
27
  # next-intl VS @intlayer/next-intl | Gleiche API, Unterschiedliches Bundle
28
28
 
29
+ ![next-intl VS Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/assets/i18next-next-intl-intlayer.webp?raw=true)
30
+
29
31
  `@intlayer/next-intl` ist ein Compat-Adapter: Er stellt die `next-intl` API (`useTranslations`, `getTranslations`, `useLocale`, `t.rich()`, ICU Plurals, `NextIntlClientProvider`...) bereit und serviert diese aus von Intlayer kompilierten Dictionaries. Der Application Code ändert sich nicht. Das Bundle schon.
30
32
 
31
33
  Dieser Artikel vergleicht die beiden auf derselben Next.js-Anwendung, einmal gebaut mit `next-intl` und einmal mit dem Adapter. Die Zahlen stammen von [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom), einer Open-Source-Suite, die aufzeichnet, was der Browser tatsächlich herunterlädt. Wenn Sie den `next-intl` vs Intlayer Vergleich als Bibliotheken möchten, lesen Sie [next-intl vs Intlayer](https://intlayer.org/blog/next-intl-vs-intlayer). Dieser Artikel handelt davon, was der Adapter ändert, wenn Sie Ihre Komponenten unverändert lassen.
@@ -109,6 +111,10 @@ Für jeden Build zeichnet die Suite auf:
109
111
 
110
112
  ### Ergebnisse auf Next.js
111
113
 
114
+ Wählen Sie die Metriken und Bibliotheken aus, die für Sie wichtig sind:
115
+
116
+ <I18nBenchmark framework="nextjs" vertical/>
117
+
112
118
  | Setup | Strategy | Lib size (gz) | Page JS avg (gz) | Locale leak | Page leak | Component avg (gz) | E2E reactivity | Hydration |
113
119
  | ------------------------- | -------------- | ------------: | ---------------: | ----------: | --------: | -----------------: | -------------: | ----------: |
114
120
  | **base** (no i18n) | - | 0.0 KB | 141.0 KB | 0.0% | 0.0% | 0.9 KB | 13.4 ms | 11.8 ms |
@@ -129,6 +135,15 @@ Für jeden Build zeichnet die Suite auf:
129
135
  - **Hydration ist 2 ms schneller** (12,8 vs 14,7 ms): Es gibt kein Message-Objekt, das vor der React-Hydration aus der RSC-Payload deserialisiert werden muss.
130
136
  - **Der Adapter ist nicht die native Runtime.** `next-intlayer` liegt bei **141,3 KB**, +0,3 KB über der Base-App, mit einer 5,5 KB Runtime. Der Adapter bietet die `next-intl` API-Oberfläche (`useFormatter`, `t.rich`, der ICU-Resolver) auf top von Intlayers Core, daher 8,0 KB und +6 KB pro Seite. Es ist die Brücke, nicht das Ziel.
131
137
 
138
+ <ClickToOpenIframe
139
+ src="https://intlayer.org/markdown?url=https%3A%2F%2Fraw.githubusercontent.com%2Fintlayer-org%2Fbenchmark-i18n%2Fmain%2Freport%2Fscripts%2Fsummarize-nextjs.md"
140
+ width="100%"
141
+ height="600px"
142
+ style="border:none;"
143
+ />
144
+
145
+ > Vollständige Tabelle, jede Bibliothek und jede Strategie, im [Next.js-Benchmark-Bericht](https://intlayer.org/de/doc/benchmark/nextjs).
146
+
132
147
  ### Ergebnisse auf TanStack Start (`use-intl`)
133
148
 
134
149
  `use-intl` ist der Framework-agnostische Core von `next-intl`. Sein Adapter, `@intlayer/use-intl`, folgt dem gleichen Design mit einem Vite-Plugin (`@intlayer/use-intl/plugin`).
@@ -152,11 +167,24 @@ Für jeden Build zeichnet die Suite auf:
152
167
  - **Locale-Wechsel ist schneller.** Die optimierten `use-intl` Setups benötigen **13-21 ms** um `html[lang]` zu aktualisieren; der Adapter benötigt **4-9 ms**. Weniger Komponenten werden neu gerendert, und nichts wird aus einem Message-Baum neu ausgewählt.
153
168
  - **`static` behält jedes Locale.** Die `static` Zeile des Adapters zeigt 49,7% Locale-Leckage, dasselbe wie natives Intlayer im `static` Modus: alle Locales werden gebündelt, nur die Dictionaries der Seite. Eine Konfigurationszeile (`importMode: 'dynamic'`) entfernt es.
154
169
 
170
+ <ClickToOpenIframe
171
+ src="https://intlayer.org/markdown?url=https%3A%2F%2Fraw.githubusercontent.com%2Fintlayer-org%2Fbenchmark-i18n%2Fmain%2Freport%2Fscripts%2Fsummarize-tanstack.md"
172
+ width="100%"
173
+ height="600px"
174
+ style="border:none;"
175
+ />
176
+
177
+ > Vollständige Tabelle im [TanStack Start-Benchmark-Bericht](https://intlayer.org/de/doc/benchmark/tanstack).
178
+
155
179
  ## Warum sich die Zahlen ändern
156
180
 
181
+ ![The Intlayer compiler extracts content from components](https://github.com/aymericzip/intlayer/blob/main/docs/assets/compiler.webp?raw=true)
182
+
157
183
  Nichts in der Komponente hat sich geändert, daher stammen die Verbesserungen vollständig davon, woran `useTranslations` gebunden ist.
158
184
 
159
- **Mit `next-intl`** ist die Bindung der Provider. `NextIntlClientProvider` erhält das gesamte `messages`-Objekt für das Locale; jeder `useTranslations("about")`-Aufruf liest daraus. Der Bundler sieht eine Komponente, die einen Hook importiert, der einen Context liest, und kann nicht wissen, dass nur der `about`-Zweig verwendet wird. Die Routen unten teilen sich alle das gleiche Message-Objekt, daher zeigt die Spalte page-leak ~90%, bis du die Datei selbst aufteilst.
185
+ **Mit `next-intl`** ist die Bindung der Provider. `NextIntlClientProvider` erhält das gesamte `messages`-Objekt für das Locale; jeder `useTranslations("about")`-Aufruf liest daraus. Der Bundler sieht eine Komponente, die einen Hook importiert, der einen Context liest, und kann nicht wissen, dass nur der `about`-Zweig verwendet wird. Die Routen unten teilen sich alle das gleiche Message-Objekt, daher zeigt die Spalte page-leak ~90%, bis du die Datei selbst aufteilst, und der Overhead wächst auf zwei Achsen gleichzeitig, Seiten und Sprachen:
186
+
187
+ ![Theoretical content leakage by architecture](https://github.com/aymericzip/intlayer/blob/main/docs/assets/theorical_content_leakage.webp?raw=true)
160
188
 
161
189
  ```bash
162
190
  .
@@ -280,25 +308,106 @@ export default withIntlayer(nextConfig);
280
308
 
281
309
  ## Zu beachtende Limits vor dem Start
282
310
 
283
- - **Routing-Konfiguration verschiebt sich zu `intlayer.config.ts`.** `createNavigation(routing)` und `createMiddleware(routing)` behalten ihre Signatur, ignorieren aber das Argument: Locales, Default-Locale und Präfix-Strategie kommen aus Intlayers `routing`-Konfiguration. Wenn du `next-intl`'s lokalisierte `pathnames` verwendest (`/about` → `/a-propos`), interpoliert der Adapter diese nicht; Intlayers `routing.rewrite` deckt diesen Fall ab, aber es ist eine separate Änderung.
284
- - **Namespace-loses `useTranslations()` ist nicht gebunden.** Der Optimize-Pass benötigt einen statischen Namespace, um zu wissen, welches Dictionary importiert werden soll. Ein bloßer Aufruf funktioniert immer noch über eine Runtime-Registry, die auf jedes Dictionary verweist, was genau das Leck ist, das du entfernen wolltest. Übergib den Namespace.
285
- - **Der Adapter ist nicht kostenlos.** 8,0 KB Runtime gegenüber 5,5 KB für `next-intlayer`, und +6-7 KB pro Seite gegenüber dem nativen Build. Dies zahlt sich durch die `next-intl` API-Oberfläche aus. Wenn Sie an den Punkt gelangen, an dem jede Komponente zu `useIntlayer` verschoben wurde, lassen Sie den Adapter fallen.
286
- - **`messages`, `timeZone`, `now` auf dem Provider werden ignoriert.** Die Formatter werden durch natives `Intl` gestützt und nur das Locale beeinflusst deren Ausgabe; wenn Sie auf eine erzwungene Zeitzone oder ein fixes `now` für Hydrations-stabile Daten angewiesen sind, handhaben Sie dies am Aufrufort.
311
+ <AccordionGroup>
312
+ <Accordion header="Routing-Konfiguration wird nach intlayer.config.ts verlagert">
313
+
314
+ `createNavigation(routing)` und `createMiddleware(routing)` behalten ihre Signatur, ignorieren jedoch das Argument: Sprachen, Standardsprache und Präfixstrategie stammen aus Intlayers `routing`-Konfiguration. Wenn Sie die lokalisierten `pathnames` von `next-intl` (`/about` zu `/a-propos`) verwenden, interpoliert der Adapter diese nicht; `routing.rewrite` von Intlayer deckt diesen Fall ab, ist jedoch eine separate Änderung.
315
+
316
+ </Accordion>
317
+ <Accordion header="useTranslations() ohne Namespace ist nicht gebunden">
318
+
319
+ Der Optimierungsschritt benötigt einen statischen Namespace, um zu wissen, welches Wörterbuch importiert werden soll. Ein Aufruf ohne Namespace funktioniert weiterhin über eine Laufzeit-Registry, die jedes Wörterbuch referenziert, was genau dem Leakage entspricht, das Sie vermeiden wollten. Übergeben Sie den Namespace.
320
+
321
+ </Accordion>
322
+ <Accordion header="Der Adapter ist nicht umsonst">
323
+
324
+ 8.0 KB Laufzeit gegenüber 5.5 KB für `next-intlayer` und +6-7 KB pro Seite gegenüber dem nativen Build. Er bezahlt für die `next-intl`-API-Oberfläche. Wenn jeder Teil auf `useIntlayer` umgestellt ist, entfernen Sie den Adapter.
325
+
326
+ </Accordion>
327
+ <Accordion header="messages, timeZone und now auf dem Provider werden ignoriert">
328
+
329
+ Die Formatierer basieren auf nativem `Intl` und nur die Sprache beeinflusst ihre Ausgabe. Wenn Sie für hydratationsstabile Daten auf eine erzwungene Zeitzone oder ein festes `now` angewiesen sind, handhaben Sie dies am Aufrufort. Siehe [Datums-, Uhrzeit- und Zahlenformatierung](https://intlayer.org/de/blog/date-time-number-formatting-locales).
330
+
331
+ </Accordion>
332
+ </AccordionGroup>
287
333
 
288
334
  ## Wann sollte man welche verwenden?
289
335
 
290
- - **Bleiben Sie bei `next-intl`**, wenn Ihre App klein ist, Ihr Bundle kein Problem ist, und Ihr Team sich damit wohlfühlt, Namespaces und `pick()` pro Seite zu verwalten.
291
- - **Nutzen Sie `@intlayer/next-intl`**, wenn Sie derzeit `next-intl` verwenden und von Bundlegröße, weniger Leakage, Hydration-Verbesserungen, typisierten Keys und den CLI-/CMS-Tools ohne vollständiges Rewrite profitieren möchten. Dies ist der empfohlene Einstiegspunkt für bestehende `next-intl`-Codebasen.
292
- - **Wechseln Sie zu nativen Lösungen (`next-intlayer`)** für neue Projekte oder sobald der Adapter seinen Zweck erfüllt hat. Es ist die leichteste der drei Varianten (5,5 KB, +0,3 KB pro Seite) und ermöglicht synchrone Server Components, per-Component `.content.ts`-Dateien und den vollständigen Feature-Set.
336
+ <AccordionGroup>
337
+ <Accordion header="Bei next-intl bleiben">
338
+
339
+ Ihre Anwendung ist klein, das Bundle stellt kein Problem dar und Ihr Team verwaltet Namespaces und `pick()` pro Seite problemlos manuell.
340
+
341
+ </Accordion>
342
+ <Accordion header="@intlayer/next-intl verwenden">
343
+
344
+ Sie nutzen bereits `next-intl` und möchten die Bundle-, Leakage- und Hydratationsvorteile, typisierte Schlüssel und die CLI / CMS-Tools ohne Neuschreiben nutzen. Dies ist der empfohlene Einstiegspunkt für jede bestehende `next-intl`-Codebasis.
345
+
346
+ </Accordion>
347
+ <Accordion header="Nativ werden (next-intlayer)">
348
+
349
+ Für neue Projekte oder sobald der Adapter seinen Dienst getan hat. Es ist das leichteste der drei (5.5 KB, +0.3 KB pro Seite) und schaltet synchrone Serverkomponenten, komponentenspezifische `.content.ts`-Dateien und den vollen Funktionsumfang frei. Starten Sie mit [Intlayer mit Next.js](https://intlayer.org/de/doc/environment/nextjs).
350
+
351
+ </Accordion>
352
+ </AccordionGroup>
353
+
354
+ ## FAQ
355
+
356
+ <FAQ>
357
+
358
+ <Question title="Bleibt mein Anwendungscode wirklich unberührt?">
359
+
360
+ Auf Next.js ja für Komponenten: Der Benchmark-Build änderte nur `next.config.ts` und `intlayer.config.ts`. `getRequestConfig` in `src/i18n.ts`, die `messages`-Prop auf dem Provider und `pick()`-Aufrufe pro Seite werden zu totem Code, den Sie danach löschen können.
361
+
362
+ </Question>
363
+
364
+ <Question title="Was passiert mit ICU-Nachrichten?">
365
+
366
+ Sie funktionieren weiterhin. `t("key", { count })`, `t.rich()`, `t.markup()`, `select`, `selectordinal`, `#` und `{ts, date, long}` werden über Intlayers ICU-Resolver aufgelöst. Siehe [ICU-Nachrichtenformat](https://intlayer.org/de/blog/icu-message-format).
367
+
368
+ </Question>
369
+
370
+ <Question title="Warum ist der Adapter schwerer als natives next-intlayer?">
371
+
372
+ Er trägt die `next-intl`-API-Oberfläche zusätzlich zum Intlayer-Kern: `useFormatter`, `t.rich`, den ICU-Resolver, die Navigationshelfer. Das sind 8.0 KB gegenüber 5.5 KB und +6 KB pro Seite. Er ist die Brücke, nicht das Endziel.
373
+
374
+ </Question>
375
+
376
+ <Question title="Kann ich Komponente für Komponente migrieren?">
377
+
378
+ Ja. Jede Komponente kann von `useTranslations("about")` zu `useIntlayer("about")` mit einer danebenliegenden `.content.ts`-Datei wechseln. JSON- und `.content.ts`-Wörterbücher koexistieren und verschmelzen.
379
+
380
+ </Question>
381
+
382
+ <Question title="Funktionieren lokalisierte Pfadnamen?">
383
+
384
+ Nicht über die `pathnames` von `next-intl`: Der Adapter akzeptiert sie für die Typisierung, interpoliert sie jedoch nicht. Verwenden Sie stattdessen `routing.rewrite` von Intlayer, das die lokalisierten Literale in die Typregistry überträgt.
385
+
386
+ </Question>
387
+
388
+ </FAQ>
293
389
 
294
390
  ## Verwandte Vergleiche
295
391
 
296
- - [next-intl vs Intlayer](https://intlayer.org/blog/next-intl-vs-intlayer) (die Bibliotheken, gleicher Benchmark)
297
- - [i18next vs @intlayer/i18next](https://intlayer.org/blog/i18next-vs-intlayer-i18next) (gleiche Adapter-Serie)
298
- - [Lingui vs @intlayer/lingui](https://intlayer.org/blog/lingui-vs-intlayer-lingui) (gleiche Adapter-Serie)
299
- - [vue-i18n vs @intlayer/vue-i18n](https://intlayer.org/blog/vue-i18n-vs-intlayer-vue-i18n) (gleiche Adapter-Serie)
300
- - [Migrationsleitfaden: next-intl zu Intlayer](https://intlayer.org/doc/migration/next-intl)
301
- - [Kompatibilitäts-Adapter-Referenz: next-intl](https://intlayer.org/doc/compatibility/next-intl)
392
+ Gleiche Adapter-Serie:
393
+
394
+ - [i18next vs @intlayer/i18next](https://intlayer.org/de/blog/i18next-vs-intlayer-i18next)
395
+ - [Lingui vs @intlayer/lingui](https://intlayer.org/de/blog/lingui-vs-intlayer-lingui)
396
+ - [vue-i18n vs @intlayer/vue-i18n](https://intlayer.org/de/blog/vue-i18n-vs-intlayer-vue-i18n)
397
+
398
+ Die Bibliotheken im direkten Vergleich:
399
+
400
+ - [next-intl vs Intlayer](https://intlayer.org/de/blog/next-intl-vs-intlayer), gleicher Benchmark
401
+ - [next-i18next vs next-intl vs Intlayer](https://intlayer.org/de/blog/next-i18next-vs-next-intl-vs-intlayer)
402
+ - [Is next-intl outdated?](https://intlayer.org/de/blog/is-next-intl-outdated)
403
+
404
+ Referenzdokumentation:
405
+
406
+ - [Compat adapter: next-intl](https://intlayer.org/de/doc/compatibility/next-intl)
407
+ - [Migrationsleitfaden: next-intl zu Intlayer](https://intlayer.org/de/doc/migration/next-intl)
408
+ - [Next.js-Benchmark-Bericht](https://intlayer.org/de/doc/benchmark/nextjs) und [TanStack Start-Benchmark-Bericht](https://intlayer.org/de/doc/benchmark/tanstack)
409
+ - [Bundle-Optimierung](https://intlayer.org/de/doc/concept/bundle-optimization) und [der Intlayer-Compiler](https://intlayer.org/de/doc/compiler)
410
+ - [Visual Editor](https://intlayer.org/de/doc/concept/editor), [CMS](https://intlayer.org/de/doc/concept/cms) und [KI-Übersetzung](https://intlayer.org/de/doc/concept/auto-fill)
302
411
 
303
412
  ## Fazit
304
413