@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
@@ -0,0 +1,361 @@
1
+ ---
2
+ createdAt: 2026-09-13
3
+ updatedAt: 2026-09-13
4
+ title: "vue-i18n مقابل Intlayer: معيار الأداء 2026"
5
+ description: قياس vue-i18n و Intlayer على نفس تطبيق Vite + Vue 3. حجم المكتبة، JavaScript لكل صفحة، تسرب المحتوى، حجم المكوّنات وتفاعلية تبديل اللغة، مع شرح الأرقام.
6
+ keywords:
7
+ - vue-i18n
8
+ - Intlayer
9
+ - Internationalization
10
+ - i18n
11
+ - Benchmark
12
+ - Bundle size
13
+ - Blog
14
+ - Vue
15
+ - Nuxt
16
+ - Vite
17
+ - JavaScript
18
+ slugs:
19
+ - blog
20
+ - vue-i18n-vs-intlayer-benchmark
21
+ author: aymericzip
22
+ ---
23
+
24
+ # vue-i18n مقابل Intlayer | معيار أداء التدويل (i18n) في Vue
25
+
26
+ `vue-i18n` هي مكتبة i18n المرجعية لـ Vue. Intlayer بديل قائم على المُصرِّف، بمحتوى محدود بنطاق المكوّن، مع تكامل Vue (`vue-intlayer`). سبق أن قارنّا [ميزاتهما وتجربة المطور](https://intlayer.org/blog/vue-i18n-vs-intlayer). تنظر هذه المقالة في تكلفة كل منهما بعد بناء التطبيق.
27
+
28
+ تأتي البيانات من [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom)، وهي مجموعة مفتوحة المصدر تبني نفس التطبيق بكل مكتبة وتسجّل ما يقوم المتصفح فعليًا بتنزيله وتنفيذه.
29
+
30
+ <TOC/>
31
+
32
+ > **الخلاصة**: على نفس تطبيق Vite + Vue 3، يرسل `vue-i18n` **134.9 كيلوبايت** من JavaScript المضغوط بـ gzip لكل صفحة مقابل **41.3 كيلوبايت** للتطبيق بدون i18n. يرسل Intlayer **57.1 كيلوبايت**. يزن وقت تشغيل `vue-i18n` وحده **24.3 كيلوبايت gzip** (6 أضعاف 3.9 كيلوبايت لـ Intlayer)، وتحمل كل صفحة **90% من نصوص الصفحات الأخرى**، والمكوّن المُصرَّف بمعزل يجرّ معه **196 كيلوبايت** لأنه مرتبط بشجرة الرسائل العامة. يحافظ محوّل `@intlayer/vue-i18n` على واجهة `vue-i18n` وسجّل **47.0 كيلوبايت** لكل صفحة.
33
+
34
+ ## باختصار
35
+
36
+ - **vue-i18n** - مكتبة i18n الفعلية لـ Vue 2 / Vue 3 ونواة `@nuxtjs/i18n`. رسائل بنمط ICU، كتل `<i18n>` في SFC، توجيه `v-t`، مُنسِّقات `d()` / `n()`، منظومة كبيرة. تُسجَّل الرسائل على مثيل عام عند `createI18n()`؛ التحميل الكسول لكل لغة هو نمط يدوي عبر `setLocaleMessage()`، والتقسيم لكل مسار عليك بناؤه بنفسك.
37
+ - **Intlayer** - نموذج محتوى يتمحور حول المكوّنات. تقع قواميس `.content.ts` بجوار المكوّن الذي تخدمه، ويقوم مُصرِّف وقت البناء (`vite-intlayer`) بعمل tree-shaking وتحميل كسول لها لكل مكوّن ولكل لغة، وتُولَّد أنواع TypeScript صارمة من محتواك، وتفشل الترجمات المفقودة في وقت البناء. يأتي مع مساعدات للتوجيه / SEO، ومحرر مرئي / CMS، وترجمة بمساعدة الذكاء الاصطناعي.
38
+
39
+ | المكتبة | نجوم GitHub | إجمالي الإيداعات | آخر إيداع | الإصدار الأول | إصدار NPM | تنزيلات NPM |
40
+ | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
41
+ | `aymericzip/intlayer` | [![GitHub Repo stars](https://img.shields.io/github/stars/aymericzip/intlayer?style=for-the-badge&label=%E2%AD%90%20stars)](https://github.com/aymericzip/intlayer/stargazers) | [![GitHub commit activity](https://img.shields.io/github/commit-activity/t/aymericzip/intlayer?style=for-the-badge&label=commits)](https://github.com/aymericzip/intlayer/commits) | [![Last Commit](https://img.shields.io/github/last-commit/aymericzip/intlayer?style=for-the-badge)](https://github.com/aymericzip/intlayer/commits) | أبريل 2024 | [![npm](https://img.shields.io/npm/v/intlayer?style=for-the-badge)](https://www.npmjs.com/package/intlayer) | [![npm downloads](https://img.shields.io/npm/dm/intlayer?style=for-the-badge)](https://www.npmjs.com/package/intlayer) |
42
+ | `intlify/vue-i18n` | [![GitHub Repo stars](https://img.shields.io/github/stars/intlify/vue-i18n?style=for-the-badge&label=%E2%AD%90%20stars)](https://github.com/intlify/vue-i18n/stargazers) | [![GitHub commit activity](https://img.shields.io/github/commit-activity/t/intlify/vue-i18n?style=for-the-badge&label=commits)](https://github.com/intlify/vue-i18n/commits) | [![Last Commit](https://img.shields.io/github/last-commit/intlify/vue-i18n?style=for-the-badge)](https://github.com/intlify/vue-i18n/commits) | ديسمبر 2016 | [![npm](https://img.shields.io/npm/v/vue-i18n?style=for-the-badge)](https://www.npmjs.com/package/vue-i18n) | [![npm downloads](https://img.shields.io/npm/dm/vue-i18n?style=for-the-badge)](https://www.npmjs.com/package/vue-i18n) |
43
+
44
+ > تتحدث الشارات تلقائيًا. ستتغير اللقطات مع الوقت.
45
+
46
+ ## مقارنة الميزات جنبًا إلى جنب
47
+
48
+ | الميزة | `vue-intlayer` (Intlayer) | `vue-i18n` |
49
+ | --------------------------------------------- | ------------------------------------------------------ | ---------------------------------------------------------------------- |
50
+ | **الترجمات بجوار المكوّنات** | ✅ نعم، `.content.ts` موضوع مع كل مكوّن | ✅ عبر كتل SFC `<i18n>` (اختياري)؛ الفهارس العامة هي الإعداد الشائع |
51
+ | **تكامل TypeScript** | ✅ أنواع صارمة مولَّدة تلقائيًا من المحتوى | ✅ أنواع جيدة؛ أمان المفاتيح الصارم يتطلب تعريف مخطط الأنواع والانضباط |
52
+ | **اكتشاف الترجمات المفقودة** | ✅ خطأ TypeScript + خطأ/تحذير في وقت البناء | ⚠️ تراجع في وقت التشغيل + تحذير في وحدة التحكم |
53
+ | **المحتوى الغني (مكوّنات / Markdown)** | ✅ دعم مباشر | ⚠️ استيفاء مكوّن `<i18n-t>`؛ Markdown عبر إضافات خارجية |
54
+ | **دعم ICU** | ⚠️ قيد التطوير | ✅ نعم |
55
+ | **التنسيق (التواريخ، الأرقام، العملات)** | ✅ مُنسِّقات قائمة على Intl | ✅ `d()` / `n()` مع `datetimeFormats` / `numberFormats` |
56
+ | **التوجيه المُوطَّن** | ✅ مساعدات لـ Vue Router / Nuxt، `getMultilingualUrls` | ⚠️ ليس في النواة (`@nuxtjs/i18n` أو إعداد توجيه مخصص) |
57
+ | **مساعدات SEO (hreflang، sitemap، robots)** | ✅ مساعدات مدمجة | ❌ ليس في النواة |
58
+ | **Tree-shaking (إرسال المحتوى المستخدم فقط)** | ✅ لكل مكوّن، لكل لغة، مؤتمت بواسطة المُصرِّف | ⚠️ يدوي: تقسيم الفهارس، `setLocaleMessage()` لكل مسار |
59
+ | **التحميل الكسول** | ✅ `importMode: 'dynamic'` (سطر إعداد واحد) | ✅ `import()` يدوي + `setLocaleMessage()` |
60
+ | **إزالة المحتوى غير المستخدم** | ✅ تُحذف القواميس الميتة في وقت البناء | ❌ غير مدمج |
61
+ | **اختبار الترجمات المفقودة (CLI / CI)** | ✅ `npx intlayer content test` | ⚠️ طرف ثالث (`vue-i18n-extract`) |
62
+ | **الترجمة بالذكاء الاصطناعي** | ✅ مدمجة، تستخدم مفاتيح مزوّدك الخاصة | ❌ لا |
63
+ | **المحرر المرئي / CMS** | ✅ محرر مرئي مجاني + CMS اختياري | ❌ لا (منصات توطين خارجية) |
64
+ | **خادم MCP و Agent Skills** | ✅ نعم | ❌ لا |
65
+ | **المنظومة / المجتمع** | ⚠️ أصغر لكنه ينمو بسرعة | ✅ كبير وناضج في منظومة Vue |
66
+
67
+ ## معيار الأداء
68
+
69
+ ### ما الذي تم قياسه
70
+
71
+ تبني مجموعة [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom) **نفس تطبيق Vite + Vue 3** بكل مكتبة: **10 صفحات** (home، about، blog، careers، contact، FAQ، pricing، products، settings، team)، **10 لغات** (`en`، `fr`، `es`، `de`، `it`، `pt`، `zh`، `ja`، `ko`، `ru`)، نفس المكوّنات ونفس المحتوى. تُقاس الصفحات بـ `en` و `fr`.
72
+
73
+ اختُبرت المكتبتان في إعداد **static**، وهو الإعداد الذي تشحنه معظم مشاريع Vue: بالنسبة لـ `vue-i18n`، يُستورد JSON كل لغة ويُمرَّر إلى `createI18n({ messages })`؛ وبالنسبة لـ Intlayer، الإعداد الافتراضي `importMode: 'static'`. في هذا الوضع يحزم Intlayer كل اللغات أيضًا، لكن المُصرِّف لا يزال يحدد نطاق المحتوى **لكل مكوّن**، لذا لا تحمل الصفحة سوى قواميس المكوّنات التي تعرضها.
74
+
75
+ لكل عملية بناء، تسجّل المجموعة:
76
+
77
+ - **Lib size**: حجم gzip لمكوّن فارغ يستورد مكتبة i18n فقط. التكلفة الثابتة لوقت التشغيل.
78
+ - **Page JS**: JavaScript المضغوط بـ gzip المُنزَّل لكل صفحة، بمتوسط جميع الصفحات واللغات.
79
+ - **Locale leak %**: نسبة النصوص المترجمة الموجودة في JS المُنزَّل والتي تنتمي إلى لغة **لا** يعرضها المستخدم (بُصمت على `en` و `fr`، لذا 50% تعني "اللغة المقاسة الأخرى موجودة بالكامل"؛ مع حزم 10 لغات، الهدر الفعلي أعلى).
80
+ - **Page leak %**: نسبة النصوص المترجمة الموجودة في JS المُنزَّل والتي تنتمي إلى صفحة **ليس** المستخدم عليها.
81
+ - **Component avg**: متوسط حجم gzip لكل مكوّن مُصرَّف بمعزل. يُظهر مقدار وقت تشغيل i18n والفهرس الذي يجرّه مكوّن واحد.
82
+ - **E2E reactivity**: الوقت الفعلي بين اختيار لغة جديدة وتحديث `html[lang]` في DOM (Playwright، 5 تكرارات).
83
+ - **Page load**: `PerformanceNavigationTiming.duration`.
84
+
85
+ > الأرقام أدناه من التشغيل المؤرخ **2026-09-12** بـ `vue-i18n` 11.4.0 و `intlayer` 9.5.0 / 9.5.1. تطبيق الاختبار صغير عمدًا (بضع عشرات من النصوص لكل لغة)، لذا تصف نسب التسرب **نمطًا**: تنمو مع محتواك بينما تبقى تكلفة وقت التشغيل ثابتة.
86
+
87
+ ### النتائج على Vite + Vue 3
88
+
89
+ | المكتبة | الاستراتيجية | Lib size (gz) | Lib size (min) | متوسط Page JS (gz) | Locale leak | Page leak | متوسط Component (gz) | تفاعلية E2E | Page load |
90
+ | ----------------------------- | ------------ | ------------: | -------------: | -----------------: | ----------: | --------: | -------------------: | ----------: | --------: |
91
+ | **base** (بدون i18n) | - | 0.0 KB | 0.0 KB | 41.3 KB | 0.0% | - | 1.1 KB | 1.8 ms | 10.8 ms |
92
+ | `vue-i18n` | static | 24.3 KB | 83.2 KB | 134.9 KB | 50.0% | 90.0% | 196.0 KB | 2.8 ms | 13.6 ms |
93
+ | **`vue-intlayer`** | static | **3.9 KB** | **11.1 KB** | **57.1 KB** | 56.8% | **0.0%** | **7.7 KB** | **4.5 ms** | 13.8 ms |
94
+ | `@intlayer/vue-i18n` (compat) | static | 7.9 KB | 23.2 KB | 47.0 KB | 15.0% | 0.0% | 8.4 KB | 1.5 ms | 9.3 ms |
95
+
96
+ > تُرك عمود page-leak للتطبيق الأساسي فارغًا: بدون مكتبة i18n، تلتقط البصمة نصوصًا مضمّنة في القطع المشتركة ولا يكون الرقم ذا معنى.
97
+
98
+ **كيف تقرأ النتائج**
99
+
100
+ - **تكلفة وقت التشغيل.** `vue-i18n` من أثقل أوقات التشغيل في معيار الأداء بأكمله: **24.3 كيلوبايت gzip / 83.2 كيلوبايت مُصغَّر** لمكوّن فارغ يستورده فقط. يكلّف `vue-intlayer` 3.9 كيلوبايت gzip. تُدفع هذه الفجوة على كل صفحة بغض النظر عن عدد النصوص لديك.
101
+ - **JavaScript لكل صفحة.** يزن التطبيق بدون i18n 41.3 كيلوبايت. يضاعفه `vue-i18n` أكثر من ثلاث مرات إلى **134.9 كيلوبايت**؛ يستقر Intlayer عند **57.1 كيلوبايت**، +15.8 كيلوبايت، معظمها اللغات العشر المحزومة (انظر النقطة التالية).
102
+ - **التسرب.** مع `createI18n({ messages: { en, fr, ... } })`، ترسل كل صفحة كل اللغات ونصوص كل الصفحات: **50% تسرب لغات** (على اللغتين المبصومتين) و**90% تسرب صفحات**. يحزم وضع `static` في Intlayer كل اللغات أيضًا (ومن هنا رقم تسرب اللغات المقارب) لكنه يحقق **0% تسرب صفحات**: لا تسحب الصفحة سوى قواميس المكوّنات التي تعرضها. التبديل إلى `importMode: 'dynamic'` يزيل تسرب اللغات أيضًا؛ لم يكن هذا الإعداد جزءًا من تشغيل Vue هذا.
103
+ - **حجم المكوّن هو حيث تظهر البنية.** يُصرَّف المكوّن الذي يستدعي `useI18n()` إلى **196 كيلوبايت** في المتوسط، لأن `t()` مرتبط بالمثيل العام الذي يحمل كل رسالة لكل لغة. نفس المكوّن مع `useIntlayer()` يُصرَّف إلى **7.7 كيلوبايت**: لا يصل إلا إلى قاموسه الخاص.
104
+ - **التفاعلية** ليست مشكلة لأي منهما (2-5 ms). يجعل نظام التفاعلية في Vue تبديل اللغة رخيصًا بمجرد وجود الرسائل في الذاكرة.
105
+ - **`@intlayer/vue-i18n`**، المحوّل الجاهز، يحافظ على واجهة `vue-i18n` وسجّل **47.0 كيلوبايت لكل صفحة** و**8.4 كيلوبايت لكل مكوّن**، دون المساس بكود التطبيق.
106
+
107
+ > للمرجعية، قاس نفس التشغيل `fluent-vue` عند 171.8 كيلوبايت لكل صفحة، و29.7 كيلوبايت وقت تشغيل، و217 كيلوبايت لكل مكوّن.
108
+
109
+ ## لماذا الفجوة؟ المثيل العام مقابل القواميس المُصرَّفة
110
+
111
+ `vue-i18n` هو وقت تشغيل. يبني `createI18n()` مثيلًا عامًا يحمل شجرة رسائل لكل لغة؛ يربط `useI18n()` كل مكوّن به؛ ويبحث `t("footer.github")` عن المفتاح في وقت العرض. هذا ما يجعل كتل SFC `<i18n>` و `v-t` وتحميل الرسائل في وقت التشغيل ممكنًا، وهو أيضًا سبب احتواء رسم اعتماديات كل مكوّن على الشجرة بأكملها:
112
+
113
+ ```bash
114
+ .
115
+ ├── locales
116
+ │ ├── en.json
117
+ │ ├── fr.json
118
+ │ └── ... # ملف واحد لكل لغة، كل الصفحات بداخله
119
+ └── src
120
+ ├── i18n.ts # createI18n({ messages: { en, fr, ... } })
121
+ ├── main.ts
122
+ └── components
123
+ └── Footer.vue # const { t } = useI18n(); t("footer.github")
124
+ ```
125
+
126
+ التحسين يعني أن **أنت** من يقسّم `en.json` إلى ملفات لكل مسار، و**أنت** من يستدعي `setLocaleMessage()` في حارس التوجيه، و**أنت** من يحافظ على صحة خريطة المسار-إلى-الملف مع تحرك المكوّنات. لا يستطيع وقت التشغيل فعل ذلك عنك لأنه لا يعرف أي المفاتيح سيطلبها المكوّن.
127
+
128
+ ينقل Intlayer تلك المعرفة إلى البناء. يُعلَن المحتوى بجوار المكوّن، ويحدد `vite-intlayer` أي مكوّن يستورد أي قاموس:
129
+
130
+ ```bash
131
+ .
132
+ ├── intlayer.config.ts
133
+ └── src
134
+ ├── main.ts # createApp(App).use(intlayer)
135
+ └── components
136
+ └── Footer
137
+ ├── Footer.vue # useIntlayer("footer")
138
+ └── Footer.content.ts
139
+ ```
140
+
141
+ يُصدر المُصرِّف، لكل قاموس ولكل لغة، JSON الذي يحتاجه ذلك المكوّن بالضبط، ويحذف القواميس التي لا يستوردها أحد. تحديد النطاق لكل مسار نتيجة لتحديد النطاق لكل مكوّن، وليس مهمة.
142
+
143
+ > لحذف اللغات غير المستخدمة أيضًا، اضبط `dictionary.importMode: 'dynamic'` في `intlayer.config.ts`. انظر [وثيقة تحسين الحزمة](https://intlayer.org/doc/concept/bundle-optimization).
144
+
145
+ ## تجربة المطور
146
+
147
+ ### الإعداد
148
+
149
+ **vue-i18n**
150
+
151
+ ```ts fileName="src/i18n.ts"
152
+ import { createI18n } from "vue-i18n";
153
+ import en from "../locales/en.json";
154
+ import fr from "../locales/fr.json";
155
+
156
+ export const i18n = createI18n({
157
+ legacy: false,
158
+ locale: "en",
159
+ fallbackLocale: "en",
160
+ messages: { en, fr },
161
+ });
162
+ ```
163
+
164
+ ```ts fileName="src/main.ts"
165
+ import { createApp } from "vue";
166
+ import App from "./App.vue";
167
+ import router from "./router";
168
+ import { i18n } from "./i18n";
169
+
170
+ createApp(App).use(router).use(i18n).mount("#app");
171
+ ```
172
+
173
+ **Intlayer**
174
+
175
+ ```ts fileName="intlayer.config.ts"
176
+ import { type IntlayerConfig, Locales } from "intlayer";
177
+
178
+ const config: IntlayerConfig = {
179
+ internationalization: {
180
+ locales: [Locales.ENGLISH, Locales.FRENCH],
181
+ defaultLocale: Locales.ENGLISH,
182
+ },
183
+ };
184
+
185
+ export default config;
186
+ ```
187
+
188
+ ```ts fileName="vite.config.ts"
189
+ import { defineConfig } from "vite";
190
+ import vue from "@vitejs/plugin-vue";
191
+ import { intlayer } from "vite-intlayer";
192
+
193
+ export default defineConfig({
194
+ plugins: [intlayer(), vue()],
195
+ });
196
+ ```
197
+
198
+ ```ts fileName="src/main.ts"
199
+ import { createApp } from "vue";
200
+ import { intlayer } from "vue-intlayer";
201
+ import App from "./App.vue";
202
+ import router from "./router";
203
+
204
+ createApp(App).use(intlayer).use(router).mount("#app");
205
+ ```
206
+
207
+ ### المكوّن
208
+
209
+ **vue-i18n**
210
+
211
+ ```json fileName="locales/en.json"
212
+ {
213
+ "counter": {
214
+ "label": "Counter",
215
+ "increment": "Increment"
216
+ }
217
+ }
218
+ ```
219
+
220
+ ```vue fileName="src/components/Counter.vue"
221
+ <script setup lang="ts">
222
+ import { ref } from "vue";
223
+ import { useI18n } from "vue-i18n";
224
+
225
+ const { t, n } = useI18n();
226
+ const count = ref(0);
227
+ </script>
228
+
229
+ <template>
230
+ <div>
231
+ <p>{{ n(count) }}</p>
232
+ <button :aria-label="t('counter.label')" @click="count++">
233
+ {{ t("counter.increment") }}
234
+ </button>
235
+ </div>
236
+ </template>
237
+ ```
238
+
239
+ `t('counter.label')` مجرد نص حتى تعرّف أنواع مخطط الرسائل بنفسك؛ الخطأ الإملائي يعرض المفتاح.
240
+
241
+ **Intlayer**
242
+
243
+ ```ts fileName="src/components/Counter/Counter.content.ts"
244
+ import { t, type Dictionary } from "intlayer";
245
+
246
+ const counterContent = {
247
+ key: "counter",
248
+ content: {
249
+ label: t({ en: "Counter", fr: "Compteur" }),
250
+ increment: t({ en: "Increment", fr: "Incrémenter" }),
251
+ },
252
+ } satisfies Dictionary;
253
+
254
+ export default counterContent;
255
+ ```
256
+
257
+ ```vue fileName="src/components/Counter/Counter.vue"
258
+ <script setup lang="ts">
259
+ import { ref } from "vue";
260
+ import { useIntlayer } from "vue-intlayer";
261
+ import { useNumber } from "vue-intlayer/format";
262
+
263
+ const { label, increment } = useIntlayer("counter");
264
+ const number = useNumber();
265
+ const count = ref(0);
266
+ </script>
267
+
268
+ <template>
269
+ <div>
270
+ <p>{{ number.value(count) }}</p>
271
+ <button :aria-label="label" @click="count++">
272
+ {{ increment }}
273
+ </button>
274
+ </div>
275
+ </template>
276
+ ```
277
+
278
+ `label` و `increment` مُعرَّفا النوع؛ الخطأ الإملائي خطأ TypeScript، والقيمة الفرنسية المفقودة خطأ بناء.
279
+
280
+ ### التحميل الكسول لكل لغة
281
+
282
+ **vue-i18n**
283
+
284
+ ```ts fileName="src/i18n.ts"
285
+ import { nextTick } from "vue";
286
+ import { createI18n } from "vue-i18n";
287
+
288
+ export const i18n = createI18n({
289
+ legacy: false,
290
+ locale: "en",
291
+ fallbackLocale: "en",
292
+ });
293
+
294
+ export const loadLocaleMessages = async (locale: string) => {
295
+ const messages = await import(`../locales/${locale}.json`);
296
+ i18n.global.setLocaleMessage(locale, messages.default);
297
+ await nextTick();
298
+ i18n.global.locale.value = locale;
299
+ };
300
+ ```
301
+
302
+ ثم استدعِ `loadLocaleMessages()` من حارس التوجيه، وقسّم `locales/{locale}.json` حسب المسار بنفسك إذا أردت تحديد النطاق لكل صفحة.
303
+
304
+ **Intlayer**
305
+
306
+ ```ts fileName="intlayer.config.ts"
307
+ const config: IntlayerConfig = {
308
+ // ...
309
+ dictionary: {
310
+ importMode: "dynamic",
311
+ },
312
+ };
313
+ ```
314
+
315
+ ## احتفظ بواجهة vue-i18n، واحصل على مخرجات Intlayer
316
+
317
+ `@intlayer/vue-i18n` محوّل جاهز: تستمر `useI18n()` و `t()` و `d()` و `n()` واستيفاء `{name}` و `{0}` وصيغ الجمع بالأنبوب (`"car | cars"`) و `v-t` و `i18n.global.locale` في العمل، مُقدَّمة من قواميس Intlayer المُصرَّفة بواسطة `vite-intlayer`.
318
+
319
+ ```ts fileName="vite.config.ts"
320
+ import { defineConfig } from "vite";
321
+ import vue from "@vitejs/plugin-vue";
322
+ import vueI18nVitePlugin from "@intlayer/vue-i18n/plugin";
323
+
324
+ export default defineConfig({
325
+ plugins: [vue(), vueI18nVitePlugin()],
326
+ });
327
+ ```
328
+
329
+ في معيار الأداء، انتقل بناء compat لنفس التطبيق من **134.9 كيلوبايت إلى 47.0 كيلوبايت** لكل صفحة ومن **196 كيلوبايت إلى 8.4 كيلوبايت** لكل مكوّن، دون المساس بالمكوّنات. يمكن أن تبقى ملفات `locales/{locale}.json` الحالية مصدر الحقيقة عبر إضافة مزامنة JSON.
330
+
331
+ انظر [دليل الترحيل من vue-i18n](https://intlayer.org/doc/migration/vue-i18n) و[وثيقة التوافق](https://intlayer.org/doc/compatibility/vue-i18n). لمستخدمي Nuxt نفس المسار عبر [توافق `@nuxtjs/i18n`](https://intlayer.org/doc/compatibility/nuxtjs-i18n).
332
+
333
+ ## متى تختار أيهما؟
334
+
335
+ - **اختر vue-i18n** إذا أردت النهج القياسي لـ Vue، أو كنت تعتمد على رسائل ICU أو كتل SFC `<i18n>`، أو كنت تستخدم `@nuxtjs/i18n` بالفعل، أو كانت منصة الترجمة تتوقع JSON مركزيًا. خصص وقتًا لتقسيم الفهارس والتحميل الكسول لكل مسار إذا كان حجم الحزمة مهمًا.
336
+ - **اختر Intlayer** إذا أردت **محتوى محدودًا بنطاق المكوّن**، و**TypeScript صارمًا**، و**أخطاء المفاتيح المفقودة في وقت البناء**، و**tree-shaking وتحميلًا كسولًا بلا جهد**، وأدوات تحرير مدمجة (محرر مرئي، CMS، ترجمة بالذكاء الاصطناعي، خادم MCP). مناسب خصوصًا لقواعد كود Vue / Nuxt الكبيرة والمعيارية وأنظمة التصميم.
337
+ - **اختر `@intlayer/vue-i18n`** إذا كنت على `vue-i18n` بالفعل وتريد مكاسب الحزمة دون إعادة كتابة.
338
+
339
+ ## مقارنات ذات صلة
340
+
341
+ - [next-intl مقابل Intlayer](https://intlayer.org/blog/next-intl-vs-intlayer) (نفس معيار الأداء)
342
+ - [i18next مقابل Intlayer](https://intlayer.org/blog/i18next-vs-intlayer) (نفس معيار الأداء)
343
+ - [Lingui مقابل Intlayer](https://intlayer.org/blog/lingui-vs-intlayer) (نفس معيار الأداء)
344
+ - [vue-i18n مقابل Intlayer (الميزات وتجربة المطور)](https://intlayer.org/blog/vue-i18n-vs-intlayer)
345
+ - [هل أصبح vue-i18n قديمًا؟](https://intlayer.org/blog/is-vue-i18n-outdated)
346
+
347
+ ## نجوم GitHub
348
+
349
+ نجوم GitHub مؤشر قوي على شعبية المشروع وثقة المجتمع وأهميته على المدى الطويل. ورغم أنها ليست مقياسًا مباشرًا للجودة التقنية، فهي تعكس عدد المطورين الذين يجدون المشروع مفيدًا ويتابعون تقدمه ومن المرجح أن يتبنوه.
350
+
351
+ [![Star History Chart](https://api.star-history.com/chart?repos=intlify%2Fvue-i18n%2Caymericzip%2Fintlayer&type=date&legend=top-left)](https://star-history.com/#intlify/vue-i18n&aymericzip/intlayer)
352
+
353
+ ## الخلاصة
354
+
355
+ `vue-i18n` ناضج ومرن ومتكامل بعمق مع Vue. يُظهر معيار الأداء ما يكلفه تصميمه القائم على وقت التشغيل أولًا في بناء Vite: **وقت تشغيل 24 كيلوبايت gzip**، و**134.9 كيلوبايت لكل صفحة** لتطبيق يزن 41 كيلوبايت بدون i18n، و**90% محتوى صفحات أخرى** على كل صفحة، ومكوّنات يصل كل منها إلى **196 كيلوبايت** لأنها معلّقة بشجرة الرسائل العامة.
356
+
357
+ ينقل Intlayer العمل إلى المُصرِّف. القواميس لكل مكوّن وإزالة المحتوى الميت مخرجات بناء، لا اصطلاحات. على نفس التطبيق: **وقت تشغيل 3.9 كيلوبايت**، و**57.1 كيلوبايت لكل صفحة**، و**0% تسرب صفحات**، ومكوّنات **أصغر 25 مرة**. وإذا لم تكن إعادة الكتابة مطروحة، فإن `@intlayer/vue-i18n` يقطع معظم الطريق دون المساس بالمكوّنات.
358
+
359
+ كل البيانات الخام وتطبيقات الاختبار والنصوص البرمجية موجودة في [مستودع Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom). شغّله بنفسك.
360
+
361
+ راجع [وثيقة "لماذا Intlayer؟"](https://intlayer.org/doc/why) لمزيد من التفاصيل.
@@ -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/i18next: Gleiche API, anderes Bundle"
5
5
  description: Was sich ändert, wenn eine React- oder Next.js-App ihre i18next-, react-i18next- und next-i18next-Aufrufe beibehält, diese jedoch über die @intlayer/i18next-Adapter bereitstellt. JavaScript pro Seite, Komponentengröße, Content-Leakage und Hydration gemessen am gleichen Code, plus was die Adapter behalten, ignorieren und nicht ersetzen können.
6
6
  keywords:
@@ -28,6 +28,8 @@ author: aymericzip
28
28
 
29
29
  # i18next VS @intlayer/i18next | Gleiche API, anderes Bundle
30
30
 
31
+ ![i18next VS Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/assets/i18next-next-intl-intlayer.webp?raw=true)
32
+
31
33
  `@intlayer/i18next`, `@intlayer/react-i18next` und `@intlayer/next-i18next` sind Kompatibilitätsadapter. Sie stellen die `i18next`-API bereit, die Ihr Code bereits verwendet (`useTranslation`, `t()`, `<Trans>`, `i18n.changeLanguage()`, `getFixedT`, `serverSideTranslations`...), und bedienen sie aus von Intlayer kompilierten Wörterbüchern. Die Komponenten ändern sich nicht. Die Runtime darunter jedoch schon.
32
34
 
33
35
  Dieser Artikel misst diesen Austausch an derselben Next.js-Anwendung, die einmal mit `next-i18next` und einmal mit `@intlayer/next-i18next` gebaut wurde. Die Zahlen stammen aus [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom). Für einen Vergleich von `i18next` und Intlayer als eigenständige Bibliotheken lesen Sie [i18next vs Intlayer](https://intlayer.org/de/blog/i18next-vs-intlayer). Hier geht es darum, was der Adapter verändert, wenn Sie Ihren bestehenden Code unverändert beibehalten.
@@ -109,6 +111,10 @@ Für jeden Build erfasst die Suite:
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 | Strategie | Lib-Größe (gz) | Seiten-JS Ø (gz) | Locale-Leakage | Seiten-Leakage | Komp Ø (gz) | E2E-Reaktivität | Hydration |
113
119
  | ---------------------------- | -------------- | -------------: | ---------------: | -------------: | -------------: | ----------: | --------------: | ----------: |
114
120
  | **base** (ohne i18n) | - | 0.0 KB | 141.0 KB | 0.0% | 0.0% | 0.9 KB | 13.4 ms | 11.8 ms |
@@ -129,10 +135,21 @@ Für jeden Build erfasst die Suite:
129
135
  - **Schnellere Hydration und Sprachwechsel.** Die Hydration sinkt von 15.6 ms auf **11.3 ms** (und von 27.7 ms im `dynamic`-Setup, wo der Backend-Aufruf auf dem kritischen Pfad liegt). Der Sprachwechsel beschleunigt sich von 15-16 ms auf **11-12 ms**.
130
136
  - **Der Adapter ist nicht die native Runtime.** `next-intlayer` kommt auf **141.3 KB**, lediglich +0.3 KB über der Basis-App. Der Adapter bringt die API-Oberfläche von `i18next` (Interpolation, Plural- und Kontext-Suffixe, `<Trans>`-Parsing) auf dem Core von Intlayer mit: 9.4 KB und +9.4 KB pro Seite über nativ. Er ist die Brücke, nicht das Endziel.
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
  > Der `react-i18next`-Adapter unter Vite / TanStack Start war nicht Teil dieser Messreihe. Die Werte für `react-i18next` auf TanStack Start finden sich in [i18next vs Intlayer](https://intlayer.org/de/blog/i18next-vs-intlayer): 127-184 KB pro Seite und 123-185 ms beim Sprachwechsel bei nachgeladenem Backend.
133
148
 
134
149
  ## Warum sich die Zahlen verändern
135
150
 
151
+ ![The Intlayer compiler extracts content from components](https://github.com/aymericzip/intlayer/blob/main/docs/assets/compiler.webp?raw=true)
152
+
136
153
  Am Ordner `components/` wurde nichts geändert; die Einsparungen resultieren daraus, woran `useTranslation` gebunden ist.
137
154
 
138
155
  **Bei `i18next`** erfolgt die Bindung an die globale Instanz. Alles, was hineingeladen wurde (alle Sprachen bei `static`, der gesamte Namespace der aktiven Sprache bei `dynamic`), ist für jede Komponente erreichbar, die `useTranslation()` aufruft. Der Bundler kann nicht feiner trennen als der Instanzinhalt, und die Runtime kann nicht wissen, welche Schlüssel eine Komponente beim Rendern anfordern wird.
@@ -149,6 +166,10 @@ Am Ordner `components/` wurde nichts geändert; die Einsparungen resultieren dar
149
166
  └── About.tsx # useTranslation(); t("about.title")
150
167
  ```
151
168
 
169
+ Alles, was die Instanz enthält, wird an jede Seite ausgeliefert, und die Verschwendung wächst auf zwei Achsen, Seiten und Sprachen:
170
+
171
+ ![Theoretical content leakage by architecture](https://github.com/aymericzip/intlayer/blob/main/docs/assets/theorical_content_leakage.webp?raw=true)
172
+
152
173
  **Bei `@intlayer/next-i18next`** bindet der Aufruf direkt an das Wörterbuch. `syncJSON` wandelt jede Namespace-Datei in ein Wörterbuch um; der Optimierungsschritt übergibt der Komponente exakt das benötigte Wörterbuch als Import, den der Bundler pro Seite und pro Sprache isolieren und aufteilen kann.
153
174
 
154
175
  ```bash
@@ -297,26 +318,112 @@ export default defineConfig({
297
318
 
298
319
  ## Grenzen, die Sie vorab kennen sollten
299
320
 
300
- - **Backends und Detektoren sind inaktiv.** `i18n.use(HttpBackend)` ruft das `init` des Plugins auf und nichts weiter. Wenn Ihre App darauf angewiesen war, Übersetzungen zur Laufzeit von einem CMS abzurufen, entfällt dieser Pfad; nutzen Sie stattdessen das Intlayer-CMS oder die Befehle `intlayer pull` / `push`.
301
- - **`resources` wird ignoriert, nicht zusammengeführt.** Im Gegensatz zu manchen anderen Adaptern nutzt `@intlayer/i18next` eingebettete `resources` nicht als Fallback. Jeder Schlüssel muss in den synchronisierten Wörterbüchern vorhanden sein, was `intlayer test` absichert.
302
- - **App Router erfordert die Provider-Änderung.** Eine Datei, oben dargestellt. Pages Router mit `appWithTranslation` benötigt keinerlei Änderungen.
303
- - **`next-i18next.config.js` wird ignoriert.** `localePath`, `fallbackLng`, `reloadOnPrerender` und Verwandte haben keine Wirkung; Sprachen und Fallbacks werden in `intlayer.config.ts` definiert.
304
- - **Der Adapter ist nicht kostenlos.** 9.4 KB Runtime und +9.4 KB pro Seite gegenüber `next-intlayer`. Sobald alle Komponenten auf `useIntlayer` umgestellt sind, kann er entfernt werden.
321
+ <AccordionGroup>
322
+ <Accordion header="Backends und Detektoren sind inert">
323
+
324
+ `i18n.use(HttpBackend)` ruft das `init` des Plugins auf und sonst nichts. Wenn Ihre App darauf angewiesen war, Übersetzungen zur Laufzeit von einem CMS abzurufen, entfällt dieser Ablauf; nutzen Sie stattdessen das [Intlayer CMS](https://intlayer.org/de/doc/concept/cms) oder die Befehle `intlayer pull` / `push`. Die Spracherkennung wird zur Routing-Konfiguration von Intlayer (URL-Präfix, Cookie, Header).
325
+
326
+ </Accordion>
327
+ <Accordion header="resources wird ignoriert, nicht zusammengeführt">
328
+
329
+ Anders als einige andere Adapter verwendet `@intlayer/i18next` keine Inline-`resources` als Fallback. Jeder Schlüssel muss in den synchronisierten Wörterbüchern vorhanden sein, was durch `intlayer test` überprüft wird.
330
+
331
+ </Accordion>
332
+ <Accordion header="App Router erfordert Provider-Anpassung">
333
+
334
+ Eine Datei, oben dargestellt. Pages Router mit `appWithTranslation` benötigt keine Änderungen.
335
+
336
+ </Accordion>
337
+ <Accordion header="next-i18next.config.js wird nicht gelesen">
338
+
339
+ `localePath`, `fallbackLng`, `reloadOnPrerender` und Verwandte haben kein Äquivalent; Sprachen und Fallback stammen aus `intlayer.config.ts`.
340
+
341
+ </Accordion>
342
+ <Accordion header="Der Adapter ist nicht kostenlos">
343
+
344
+ 9.4 KB Laufzeit und +9.4 KB pro Seite gegenüber `next-intlayer`. Sobald jede Komponente auf `useIntlayer` umgestellt ist, entfernen Sie ihn.
345
+
346
+ </Accordion>
347
+ </AccordionGroup>
305
348
 
306
349
  ## Wann welche Lösung wählen?
307
350
 
308
- - **Bleiben Sie bei `i18next`**, wenn Ihre Anwendung zwingend auf Runtime-Backends (zur Anfragezeit aus einem CMS geladene Übersetzungen), das Plugin-Ökosystem oder ein Nicht-React-Target angewiesen ist, das die Adapter nicht abdecken.
309
- - **Nutzen Sie `@intlayer/*`**, wenn Sie `react-i18next` / `next-i18next` einsetzen und 68 KB sparen, 8x kleinere Komponenten, 0% Leakage, typisierte Schlüssel und CI-Prüfungen ohne Code-Rewrite erhalten möchten. Dies ist der beste Einstieg für bestehende `i18next`-Codebasen.
310
- - **Wählen Sie nativ (`next-intlayer` / `react-intlayer`)** für Neuprojekte oder sobald der Adapter seinen Dienst getan hat. Es ist die schlankste Variante (5.5 KB, +0.3 KB pro Seite) und schaltet synchrone Server-Komponenten sowie komponentenbasierte `.content.ts`-Dateien frei.
351
+ <AccordionGroup>
352
+ <Accordion header="Bei i18next bleiben">
353
+
354
+ Ihre Anwendung hängt von Laufzeit-Backends ab (Übersetzungen, die zur Anforderungszeit von einem CMS bereitgestellt werden), vom Plugin-Ökosystem oder von einem Nicht-React-Ziel, das die Adapter nicht abdecken.
355
+
356
+ </Accordion>
357
+ <Accordion header="@intlayer/* verwenden">
358
+
359
+ Sie nutzen `react-i18next` / `next-i18next` und möchten 68 KB einsparen, 8-mal kleinere Komponenten, 0% Leakage, typisierte Schlüssel und CI-Prüfungen ohne Neuschreiben erhalten. Dies ist der Einstiegspunkt für eine bestehende `i18next`-Codebasis.
360
+
361
+ </Accordion>
362
+ <Accordion header="Nativ werden (next-intlayer / react-intlayer)">
363
+
364
+ Für neue Projekte oder sobald der Adapter seinen Dienst getan hat. Er bietet die leichteste Laufzeit (5.5 KB, +0.3 KB pro Seite) und ermöglicht synchrone Server Components sowie komponentenspezifische `.content.ts`-Dateien. Starten Sie mit [Intlayer mit Next.js](https://intlayer.org/de/doc/environment/nextjs) oder [mit Vite und React](https://intlayer.org/de/doc/environment/vite-and-react).
365
+
366
+ </Accordion>
367
+ </AccordionGroup>
368
+
369
+ ## FAQ
370
+
371
+ <FAQ>
372
+
373
+ <Question title="Woher kommen die 68 KB?">
374
+
375
+ Aus `resources: { en, fr, ... }`. Das naive `next-i18next`-Setup importiert das JSON jeder Sprache in `init()`, sodass jede Seite jeden Namespace in jeder Sprache mitführt: **218.5 KB** pro Seite. Der Adapter bündelt diesen Block nie; er übergibt jeder Komponente genau das benannte Wörterbuch in der aktiven Sprache.
376
+
377
+ </Question>
378
+
379
+ <Question title="Funktionieren meine <Trans>-Komponenten weiterhin?">
380
+
381
+ Ja, mit `components`, nummerierten `<1>...</1>`-Tags und `values`. Ebenso `{{interpolation}}`, `$t(key)`-Verschachtelung, `key_one` / `key_other`-Plurale (ausgewertet mit `Intl.PluralRules`), Kontext-Suffixe und `returnObjects`.
382
+
383
+ </Question>
384
+
385
+ <Question title="Was ist, wenn ich eine einzige translation.json pro Sprache verwende?">
386
+
387
+ Setzen Sie `splitKeys: false` im `syncJSON`-Plugin. Die gesamte Datei bleibt ein Wörterbuch, und ein einfaches `useTranslation()` löst weiterhin darauf auf.
388
+
389
+ </Question>
390
+
391
+ <Question title="Ist das dasselbe wie eine Migration zu Intlayer?">
392
+
393
+ Nein, es ist die Brücke. Der Adapter behält die `i18next`-API bei und kostet 9.4 KB Laufzeit; natives `next-intlayer` kostet 5.5 KB und bringt synchrone Server Components und co-lokalisierte `.content.ts`-Dateien mit. Sie können Komponente für Komponente migrieren, da JSON- und `.content.ts`-Wörterbücher koexistieren.
394
+
395
+ </Question>
396
+
397
+ <Question title="Können Übersetzer so weiterarbeiten wie bisher?">
398
+
399
+ Ja. `locales/{lng}/{ns}.json` bleibt die Source of Truth: `syncJSON` liest es im i18next-Dialekt und schreibt Übersetzungen zurück, wenn die CLI oder das CMS sie aktualisiert.
400
+
401
+ </Question>
402
+
403
+ </FAQ>
311
404
 
312
405
  ## Verwandte Vergleiche
313
406
 
314
- - [i18next vs Intlayer](https://intlayer.org/de/blog/i18next-vs-intlayer) (Bibliotheksvergleich, gleiche Benchmark-Basis)
315
- - [next-intl vs @intlayer/next-intl](https://intlayer.org/de/blog/next-intl-vs-intlayer-next-intl) (gleiche Adapter-Serie)
316
- - [Lingui vs @intlayer/lingui](https://intlayer.org/de/blog/lingui-vs-intlayer-lingui) (gleiche Adapter-Serie)
317
- - [vue-i18n vs @intlayer/vue-i18n](https://intlayer.org/de/blog/vue-i18n-vs-intlayer-vue-i18n) (gleiche Adapter-Serie)
318
- - Migrationsanleitungen: [i18next](https://intlayer.org/de/doc/migration/i18next), [react-i18next](https://intlayer.org/de/doc/migration/react-i18next), [next-i18next](https://intlayer.org/de/doc/migration/next-i18next)
319
- - Adapter-Referenzen: [i18next](https://intlayer.org/de/doc/compatibility/i18next), [react-i18next](https://intlayer.org/de/doc/compatibility/react-i18next), [next-i18next](https://intlayer.org/de/doc/compatibility/next-i18next)
407
+ Gleiche Adapter-Serie:
408
+
409
+ - [next-intl vs @intlayer/next-intl](https://intlayer.org/de/blog/next-intl-vs-intlayer-next-intl)
410
+ - [Lingui vs @intlayer/lingui](https://intlayer.org/de/blog/lingui-vs-intlayer-lingui)
411
+ - [vue-i18n vs @intlayer/vue-i18n](https://intlayer.org/de/blog/vue-i18n-vs-intlayer-vue-i18n)
412
+
413
+ Die Bibliotheken im direkten Vergleich:
414
+
415
+ - [i18next vs Intlayer](https://intlayer.org/de/blog/i18next-vs-intlayer), same benchmark
416
+ - [next-i18next vs next-intl vs Intlayer](https://intlayer.org/de/blog/next-i18next-vs-next-intl-vs-intlayer)
417
+ - [react-i18next vs react-intl vs Intlayer](https://intlayer.org/de/blog/react-i18next-vs-react-intl-vs-intlayer)
418
+ - [Is i18next outdated?](https://intlayer.org/de/blog/is-i18next-outdated)
419
+
420
+ Referenzdokumentation:
421
+
422
+ - Compat adapters: [i18next](https://intlayer.org/de/doc/compatibility/i18next), [react-i18next](https://intlayer.org/de/doc/compatibility/react-i18next), [next-i18next](https://intlayer.org/de/doc/compatibility/next-i18next)
423
+ - Migration guides: [i18next](https://intlayer.org/de/doc/migration/i18next), [react-i18next](https://intlayer.org/de/doc/migration/react-i18next), [next-i18next](https://intlayer.org/de/doc/migration/next-i18next)
424
+ - [Next.js benchmark report](https://intlayer.org/de/doc/benchmark/nextjs) and [TanStack Start benchmark report](https://intlayer.org/de/doc/benchmark/tanstack)
425
+ - [Bundle optimization](https://intlayer.org/de/doc/concept/bundle-optimization) and [the Intlayer compiler](https://intlayer.org/de/doc/compiler)
426
+ - [Visual Editor](https://intlayer.org/de/doc/concept/editor), [CMS](https://intlayer.org/de/doc/concept/cms) and [AI translation](https://intlayer.org/de/doc/concept/auto-fill)
320
427
 
321
428
  ## Fazit
322
429