@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 vs Intlayer: 2026 Benchmark"
5
+ description: vue-i18n ve Intlayer aynı Vite + Vue 3 uygulamasında ölçüldü. Kütüphane boyutu, sayfa başına JavaScript, içerik sızıntısı, bileşen boyutu ve locale değiştirme reaktivitesi, rakamların açıklamasıyla birlikte.
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 VS Intlayer | Vue Uluslararasılaştırma (i18n) Benchmark'ı
25
+
26
+ `vue-i18n`, Vue için referans i18n kütüphanesidir. Intlayer ise derleyici tabanlı, bileşen kapsamlı bir alternatiftir ve bir Vue entegrasyonu (`vue-intlayer`) sunar. [Özelliklerini ve geliştirici deneyimlerini](https://intlayer.org/blog/vue-i18n-vs-intlayer) zaten karşılaştırmıştık. Bu yazı, uygulama derlendikten sonra her birinin neye mal olduğuna bakıyor.
27
+
28
+ Veriler, her kütüphaneyle aynı uygulamayı derleyen ve tarayıcının gerçekte ne indirip çalıştırdığını kaydeden açık kaynaklı bir paket olan [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom)'dan geliyor.
29
+
30
+ <TOC/>
31
+
32
+ > **tl;dr**: Aynı Vite + Vue 3 uygulamasında `vue-i18n`, i18n'siz uygulamanın **41,3 KB**'ına karşılık sayfa başına **134,9 KB** gzip'lenmiş JavaScript gönderiyor. Intlayer **57,1 KB** gönderiyor. `vue-i18n` runtime'ı tek başına **24,3 KB gzip** (Intlayer'ın 3,9 KB'ının 6 katı), her sayfa **diğer sayfaların dizelerinin %90'ını** taşıyor ve izole derlenen bir bileşen, global mesaj ağacına bağlı olduğu için **196 KB** sürüklüyor. `@intlayer/vue-i18n` adaptörü `vue-i18n` API'sini koruyor ve sayfa başına **47,0 KB** ölçtü.
33
+
34
+ ## Kısaca
35
+
36
+ - **vue-i18n** - Vue 2 / Vue 3 için fiili i18n kütüphanesi ve `@nuxtjs/i18n`'in çekirdeği. ICU tarzı mesajlar, SFC `<i18n>` blokları, `v-t` direktifi, `d()` / `n()` biçimlendiricileri, geniş ekosistem. Mesajlar `createI18n()` sırasında global bir örneğe kaydedilir; locale başına lazy loading manuel bir `setLocaleMessage()` desenidir ve rota başına bölme sizin inşa etmeniz gereken bir şeydir.
37
+ - **Intlayer** - Bileşen merkezli içerik modeli. `.content.ts` sözlükleri hizmet ettikleri bileşenin yanında durur, derleme zamanı derleyicisi (`vite-intlayer`) bunları bileşen ve locale başına tree-shake eder ve lazy load eder, içeriğinizden katı TypeScript tipleri üretilir ve eksik çeviriler derleme zamanında hata verir. Router / SEO yardımcıları, Görsel Düzenleyici / CMS ve yapay zeka destekli çeviri ile gelir.
38
+
39
+ | Kütüphane | GitHub Yıldızları | Toplam Commit | Son Commit | İlk Sürüm | NPM Sürümü | NPM İndirmeleri |
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) | Nisan 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) | Ara 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
+ > Rozetler otomatik olarak güncellenir. Anlık görüntüler zamanla değişecektir.
45
+
46
+ ## Yan yana özellik karşılaştırması
47
+
48
+ | Özellik | `vue-intlayer` (Intlayer) | `vue-i18n` |
49
+ | ----------------------------------------------------- | --------------------------------------------------------------- | -------------------------------------------------------------------------------- |
50
+ | **Bileşenlere yakın çeviriler** | ✅ Evet, `.content.ts` her bileşenle aynı yerde | ✅ SFC `<i18n>` blokları ile (isteğe bağlı); global kataloglar yaygın kurulumdur |
51
+ | **TypeScript entegrasyonu** | ✅ İçerikten otomatik üretilen katı tipler | ✅ İyi tipler; katı anahtar güvenliği şema tipleme ve disiplin gerektirir |
52
+ | **Eksik çeviri tespiti** | ✅ TypeScript hatası + derleme zamanı hata/uyarısı | ⚠️ Runtime fallback + konsol uyarısı |
53
+ | **Zengin içerik (bileşenler / Markdown)** | ✅ Doğrudan destek | ⚠️ `<i18n-t>` bileşen interpolasyonu; Markdown harici eklentilerle |
54
+ | **ICU desteği** | ⚠️ Devam ediyor | ✅ Evet |
55
+ | **Biçimlendirme (tarih, sayı, para birimi)** | ✅ Intl tabanlı biçimlendiriciler | ✅ `datetimeFormats` / `numberFormats` ile `d()` / `n()` |
56
+ | **Yerelleştirilmiş yönlendirme** | ✅ Vue Router / Nuxt için yardımcılar, `getMultilingualUrls` | ⚠️ Çekirdekte değil (`@nuxtjs/i18n` veya özel router kurulumu) |
57
+ | **SEO yardımcıları (hreflang, sitemap, robots)** | ✅ Yerleşik yardımcılar | ❌ Çekirdekte değil |
58
+ | **Tree-shaking (yalnızca kullanılan içeriği gönder)** | ✅ Bileşen başına, locale başına, derleyici tarafından otomatik | ⚠️ Manuel: katalogları böl, rota başına `setLocaleMessage()` |
59
+ | **Lazy loading** | ✅ `importMode: 'dynamic'` (tek satır yapılandırma) | ✅ Manuel `import()` + `setLocaleMessage()` |
60
+ | **Kullanılmayan içeriği temizleme** | ✅ Ölü sözlükler derleme zamanında atılır | ❌ Yerleşik değil |
61
+ | **Eksik çevirileri test etme (CLI / CI)** | ✅ `npx intlayer content test` | ⚠️ Üçüncü taraf (`vue-i18n-extract`) |
62
+ | **Yapay zeka destekli çeviri** | ✅ Yerleşik, kendi sağlayıcı anahtarlarınızı kullanır | ❌ Hayır |
63
+ | **Görsel Düzenleyici / CMS** | ✅ Ücretsiz Görsel Düzenleyici + isteğe bağlı CMS | ❌ Hayır (harici yerelleştirme platformları) |
64
+ | **MCP sunucusu ve Agent Skills** | ✅ Evet | ❌ Hayır |
65
+ | **Ekosistem / topluluk** | ⚠️ Daha küçük ama hızla büyüyor | ✅ Vue ekosisteminde büyük ve olgun |
66
+
67
+ ## Benchmark
68
+
69
+ ### Ne ölçüldü
70
+
71
+ [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom) paketi, her kütüphaneyle **aynı Vite + Vue 3 uygulamasını** derler: **10 sayfa** (home, about, blog, careers, contact, FAQ, pricing, products, settings, team), **10 locale** (`en`, `fr`, `es`, `de`, `it`, `pt`, `zh`, `ja`, `ko`, `ru`), aynı bileşenler ve aynı içerik. Sayfalar `en` ve `fr` dillerinde ölçülür.
72
+
73
+ Her iki kütüphane de çoğu Vue projesinin yayınladığı **static** yapılandırmada test edildi: `vue-i18n` için her locale'in JSON'u içe aktarılıp `createI18n({ messages })`'a geçirildi; Intlayer için varsayılan `importMode: 'static'`. Bu modda Intlayer da tüm locale'leri paketler, ancak derleyici içeriği yine de **bileşen başına** kapsamlandırır, dolayısıyla bir sayfa yalnızca render ettiği bileşenlerin sözlüklerini taşır.
74
+
75
+ Her derleme için paket şunları kaydeder:
76
+
77
+ - **Lib size**: Yalnızca i18n kütüphanesini içe aktaran boş bir bileşenin gzip boyutu. Runtime'ın sabit maliyeti.
78
+ - **Page JS**: Sayfa başına indirilen gzip JavaScript, tüm sayfalar ve locale'ler üzerinden ortalaması alınmış.
79
+ - **Locale leak %**: İndirilen JS'de bulunan çevrilmiş dizelerden, kullanıcının görüntüle**me**diği bir locale'e ait olanların payı (`en` ve `fr` üzerinde parmak izi alındığından %50, "diğer ölçülen locale tamamen mevcut" anlamına gelir; 10 locale paketlendiğinde gerçek israf daha yüksektir).
80
+ - **Page leak %**: İndirilen JS'de bulunan çevrilmiş dizelerden, kullanıcının **bulunmadığı** bir sayfaya ait olanların payı.
81
+ - **Component avg**: İzole derlenen her bileşenin ortalama gzip boyutu. Tek bir bileşenin ne kadar i18n runtime'ı ve katalog sürüklediğini gösterir.
82
+ - **E2E reactivity**: Yeni bir locale seçilmesi ile DOM'da `html[lang]`'in güncellenmesi arasındaki gerçek süre (Playwright, 5 yineleme).
83
+ - **Page load**: `PerformanceNavigationTiming.duration`.
84
+
85
+ > Aşağıdaki rakamlar `vue-i18n` 11.4.0 ve `intlayer` 9.5.0 / 9.5.1 ile **2026-09-12** tarihli çalıştırmadan gelmektedir. Test uygulaması kasıtlı olarak küçüktür (locale başına birkaç düzine dize), bu nedenle sızıntı yüzdeleri bir **desen** tanımlar: içeriğinizle birlikte büyürler, runtime maliyeti ise sabit kalır.
86
+
87
+ ### Vite + Vue 3 üzerindeki sonuçlar
88
+
89
+ | Kütüphane | Strateji | Lib size (gz) | Lib size (min) | Page JS ort. (gz) | Locale leak | Page leak | Component ort. (gz) | E2E reaktivite | Page load |
90
+ | ----------------------------- | -------- | ------------: | -------------: | ----------------: | ----------: | --------: | ------------------: | -------------: | --------: |
91
+ | **base** (i18n yok) | - | 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
+ > Temel uygulamanın page-leak sütunu boş bırakılmıştır: i18n kütüphanesi olmadan parmak izi, paylaşılan chunk'lardaki sabit kodlanmış dizeleri yakalar ve sayı anlamlı değildir.
97
+
98
+ **Nasıl okunmalı**
99
+
100
+ - **Runtime maliyeti.** `vue-i18n`, tüm benchmark'taki en ağır runtime'lardan biri: yalnızca onu içe aktaran boş bir bileşen için **24,3 KB gzip / 83,2 KB minified**. `vue-intlayer` 3,9 KB gzip'e mal oluyor. Bu fark, kaç dizeniz olursa olsun her sayfada ödeniyor.
101
+ - **Sayfa başına JavaScript.** i18n'siz uygulama 41,3 KB. `vue-i18n` bunu üç katından fazlasına, **134,9 KB**'a çıkarıyor; Intlayer **57,1 KB**'da kalıyor, +15,8 KB, bunun çoğu paketlenen on locale (bir sonraki noktaya bakın).
102
+ - **Sızıntı.** `createI18n({ messages: { en, fr, ... } })` ile her sayfa tüm locale'leri ve tüm sayfaların dizelerini gönderir: **%50 locale sızıntısı** (parmak izi alınan iki locale'de) ve **%90 sayfa sızıntısı**. Intlayer'ın `static` modu da tüm locale'leri paketler (dolayısıyla karşılaştırılabilir locale sızıntısı rakamı) ama **%0 sayfa sızıntısına** sahiptir: bir sayfa yalnızca render ettiği bileşenlerin sözlüklerini çeker. `importMode: 'dynamic'`'e geçmek locale sızıntısını da ortadan kaldırır; bu yapılandırma bu Vue çalıştırmasının parçası değildi.
103
+ - **Bileşen boyutu mimarinin kendini gösterdiği yer.** `useI18n()` çağıran bir bileşen ortalama **196 KB**'a derlenir, çünkü `t()` her locale'in her mesajını tutan global örneğe bağlıdır. Aynı bileşen `useIntlayer()` ile **7,7 KB**'a derlenir: yalnızca kendi sözlüğüne ulaşır.
104
+ - **Reaktivite** her ikisi için de sorun değil (2-5 ms). Mesajlar bellekte olduğunda Vue'nun reaktivite sistemi locale değiştirmeyi ucuz hale getirir.
105
+ - **`@intlayer/vue-i18n`**, drop-in adaptör, `vue-i18n` API'sini korur ve uygulama koduna dokunulmadan **sayfa başına 47,0 KB** ve **bileşen başına 8,4 KB** ölçtü.
106
+
107
+ > Referans olarak, aynı çalıştırma `fluent-vue`'yu sayfa başına 171,8 KB, 29,7 KB runtime ve bileşen başına 217 KB olarak ölçtü.
108
+
109
+ ## Fark neden? Global örnek vs derlenmiş sözlükler
110
+
111
+ `vue-i18n` bir runtime'dır. `createI18n()`, locale başına bir mesaj ağacı tutan global bir örnek oluşturur; `useI18n()` her bileşeni ona bağlar; `t("footer.github")` anahtarı render zamanında arar. SFC `<i18n>` bloklarını, `v-t`'yi ve runtime mesaj yüklemeyi mümkün kılan şey budur ve her bileşenin bağımlılık grafiğinin tüm ağacı içermesinin nedeni de budur:
112
+
113
+ ```bash
114
+ .
115
+ ├── locales
116
+ │ ├── en.json
117
+ │ ├── fr.json
118
+ │ └── ... # locale başına bir dosya, tüm sayfalar içinde
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
+ Optimize etmek, `en.json`'u rota başına dosyalara **sizin** bölmeniz, bir router guard'ında `setLocaleMessage()`'ı **sizin** çağırmanız ve bileşenler taşındıkça rota-dosya eşlemesini **sizin** doğru tutmanız anlamına gelir. Runtime bunu sizin için yapamaz çünkü bir bileşenin hangi anahtarları isteyeceği hakkında hiçbir fikri yoktur.
127
+
128
+ Intlayer bu bilgiyi derlemeye taşır. İçerik bileşenin yanında bildirilir ve `vite-intlayer` hangi bileşenin hangi sözlüğü içe aktardığını çözer:
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
+ Derleyici, sözlük ve locale başına, o bileşenin ihtiyaç duyduğu JSON'u tam olarak üretir ve hiçbir şeyin içe aktarmadığı sözlükleri atar. Rota başına kapsamlandırma, bileşen başına kapsamlandırmanın bir sonucudur, bir görev değil.
142
+
143
+ > Kullanılmayan locale'leri de atmak için `intlayer.config.ts` içinde `dictionary.importMode: 'dynamic'` ayarlayın. [Bundle optimizasyonu dokümanına](https://intlayer.org/doc/concept/bundle-optimization) bakın.
144
+
145
+ ## Geliştirici deneyimi
146
+
147
+ ### Kurulum
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
+ ### Bileşen
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')`, mesaj şemasını kendiniz tipleyene kadar bir string'dir; bir yazım hatası anahtarı render eder.
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` ve `increment` tiplidir; bir yazım hatası TypeScript hatasıdır, eksik bir Fransızca değer derleme hatasıdır.
279
+
280
+ ### Locale başına lazy loading
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
+ Ardından bir router guard'ından `loadLocaleMessages()` çağırın ve sayfa başına kapsamlandırma istiyorsanız `locales/{locale}.json`'u rota başına kendiniz bölün.
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 API'sini koruyun, Intlayer'ın çıktısını alın
316
+
317
+ `@intlayer/vue-i18n` bir drop-in adaptördür: `useI18n()`, `t()`, `d()`, `n()`, `{name}` ve `{0}` interpolasyonu, pipe çoğullar (`"car | cars"`), `v-t` ve `i18n.global.locale` çalışmaya devam eder, `vite-intlayer` tarafından derlenen Intlayer sözlüklerinden sunulur.
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
+ Benchmark'ta aynı uygulamanın compat derlemesi, bileşenlere dokunulmadan sayfa başına **134,9 KB'dan 47,0 KB'a** ve bileşen başına **196 KB'dan 8,4 KB'a** düştü. Mevcut `locales/{locale}.json` dosyalarınız JSON senkronizasyon eklentisi aracılığıyla doğruluk kaynağı olarak kalabilir.
330
+
331
+ [vue-i18n geçiş rehberine](https://intlayer.org/doc/migration/vue-i18n) ve [uyumluluk dokümanına](https://intlayer.org/doc/compatibility/vue-i18n) bakın. Nuxt kullanıcıları [`@nuxtjs/i18n` uyumluluğu](https://intlayer.org/doc/compatibility/nuxtjs-i18n) üzerinden aynı yola sahiptir.
332
+
333
+ ## Hangisini ne zaman seçmeli?
334
+
335
+ - **vue-i18n'i seçin**: standart Vue yaklaşımını istiyorsanız, ICU mesajlarına veya SFC `<i18n>` bloklarına güveniyorsanız, zaten `@nuxtjs/i18n` kullanıyorsanız veya bir çeviri platformu merkezi JSON bekliyorsa. Bundle boyutu önemliyse katalogları bölmek ve rota başına lazy load yapmak için zaman ayırın.
336
+ - **Intlayer'ı seçin**: **bileşen kapsamlı içerik**, **katı TypeScript**, **derleme zamanı eksik anahtar hataları**, **sıfır çabayla tree-shaking ve lazy loading** ve yerleşik editoryal araçlar (Görsel Düzenleyici, CMS, yapay zeka çevirisi, MCP sunucusu) istiyorsanız. Özellikle büyük, modüler Vue / Nuxt kod tabanları ve tasarım sistemleri için önemlidir.
337
+ - **`@intlayer/vue-i18n`'i seçin**: zaten `vue-i18n` üzerindeyseniz ve yeniden yazma olmadan bundle kazanımlarını istiyorsanız.
338
+
339
+ ## İlgili karşılaştırmalar
340
+
341
+ - [next-intl vs Intlayer](https://intlayer.org/blog/next-intl-vs-intlayer) (aynı benchmark)
342
+ - [i18next vs Intlayer](https://intlayer.org/blog/i18next-vs-intlayer) (aynı benchmark)
343
+ - [Lingui vs Intlayer](https://intlayer.org/blog/lingui-vs-intlayer) (aynı benchmark)
344
+ - [vue-i18n vs Intlayer (özellikler ve DX)](https://intlayer.org/blog/vue-i18n-vs-intlayer)
345
+ - [vue-i18n eskidi mi?](https://intlayer.org/blog/is-vue-i18n-outdated)
346
+
347
+ ## GitHub Yıldızları
348
+
349
+ GitHub yıldızları, bir projenin popülerliğinin, topluluk güveninin ve uzun vadeli öneminin güçlü bir göstergesidir. Teknik kalitenin doğrudan bir ölçüsü olmasa da, kaç geliştiricinin projeyi yararlı bulduğunu, ilerlemesini takip ettiğini ve benimseme olasılığını yansıtır.
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
+ ## Sonuç
354
+
355
+ `vue-i18n` olgun, esnek ve Vue ile derinden entegre. Benchmark, runtime öncelikli tasarımının bir Vite derlemesinde neye mal olduğunu gösteriyor: **24 KB gzip runtime**, i18n'siz 41 KB olan bir uygulama için **sayfa başına 134,9 KB**, her sayfada **%90 diğer sayfa içeriği** ve global mesaj ağacına bağlı oldukları için her biri **196 KB**'a ulaşan bileşenler.
356
+
357
+ Intlayer işi derleyiciye taşır. Bileşen başına sözlükler ve ölü içerik temizleme, birer derleme çıktısıdır, kural değil. Aynı uygulamada: **3,9 KB runtime**, **sayfa başına 57,1 KB**, **%0 sayfa sızıntısı**, **25 kat daha küçük** bileşenler. Ve yeniden yazma masada değilse, `@intlayer/vue-i18n` bileşenlere dokunmadan yolun büyük kısmını alır.
358
+
359
+ Tüm ham veriler, test uygulamaları ve script'ler [Benchmark Bloom deposunda](https://github.com/intlayer-org/benchmark-bloom). Kendiniz çalıştırın.
360
+
361
+ Daha fazla ayrıntı için ['Neden Intlayer?' dokümanına](https://intlayer.org/doc/why) bakın.
@@ -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 проти @intlayer/i18next: Однаковий API, інший bundle"
5
5
  description: "Що змінюється, коли додаток React або Next.js зберігає виклики i18next, react-i18next та next-i18next, але обслуговує їх через адаптери @intlayer/i18next. JavaScript на сторінку, розмір компонентів, витоки рядків та гідратація, виміряні на одному коді, а також те, що адаптери зберігають, ігнорують і не можуть замінити."
6
6
  keywords:
@@ -28,6 +28,8 @@ author: aymericzip
28
28
 
29
29
  # i18next проти @intlayer/i18next | Однаковий API, інший 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` та `@intlayer/next-i18next` - це адаптери сумісності. Вони надають API `i18next`, який ваш код уже використовує (`useTranslation`, `t()`, `<Trans>`, `i18n.changeLanguage()`, `getFixedT`, `serverSideTranslations`...) і постачають його зі словників, скомпільованих Intlayer. Компоненти не змінюються. Змінюється середовище виконання (runtime) під ними.
32
34
 
33
35
  У цій статті вимірюється така заміна на одному й тому ж додатку Next.js, зібраному один раз із `next-i18next` і один раз із `@intlayer/next-i18next`. Показники отримані з [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom). Для порівняння `i18next` та Intlayer як бібліотек прочитайте [i18next проти Intlayer](https://intlayer.org/uk/blog/i18next-vs-intlayer). Ця стаття присвячена тому, що саме змінює адаптер, якщо ви зберігаєте свій код без змін.
@@ -109,6 +111,10 @@ const About = () => {
109
111
 
110
112
  ### Результати на Next.js
111
113
 
114
+ Виберіть метрики та бібліотеки, які вас цікавлять:
115
+
116
+ <I18nBenchmark framework="nextjs" vertical/>
117
+
112
118
  | Конфігурація | Стратегія | Lib size (gz) | Page JS avg (gz) | Locale leak | Page leak | Component avg (gz) | E2E reactivity | Hydration |
113
119
  | ---------------------------- | -------------- | ------------: | ---------------: | ----------: | --------: | -----------------: | -------------: | ----------: |
114
120
  | **base** (без i18n) | - | 0.0 KB | 141.0 KB | 0.0% | 0.0% | 0.9 KB | 13.4 ms | 11.8 ms |
@@ -129,10 +135,21 @@ const About = () => {
129
135
  - **Гідратація та перемикання відбуваються швидше.** Гідратація скорочується з 15.6 ms до **11.3 ms** (та з 27.7 ms у конфігурації `dynamic`, де запит до бекенда перебуває на критичному шляху). Перемикання локалі прискорюється з 15-16 ms до **11-12 ms**.
130
136
  - **Адаптер - це не нативний runtime.** `next-intlayer` займає **141.3 KB**, лише +0.3 KB над базовим додатком. Адаптер несе поверхню API `i18next` (діалект інтерполяції, суфікси множини та контексту, парсинг тегів `<Trans>`) поверх ядра Intlayer: 9.4 KB та +9.4 KB на сторінку проти нативного варіанту. Це міст для переходу, а не кінцева точка.
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
+ > Повна таблиця, кожна бібліотека та кожна стратегія, у [звіті про бенчмарк Next.js](https://intlayer.org/uk/doc/benchmark/nextjs).
146
+
132
147
  > Адаптер `react-i18next` на Vite / TanStack Start не брав участі у цьому тестуванні. Базові показники `react-i18next` на TanStack Start наведено у статті [i18next проти Intlayer](https://intlayer.org/uk/blog/i18next-vs-intlayer): 127-184 KB на сторінку та перемикання локалі за 123-185 ms за наявності лінивого бекенда.
133
148
 
134
149
  ## Чому змінюються цифри
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
  У каталозі `components/` нічого не змінилося, тож оптимізація пов'язана з тим, до чого саме прив'язаний `useTranslation`.
137
154
 
138
155
  **З `i18next`** прив'язка здійснюється до глобального екземпляра. Усе, що було в нього завантажено (усі локалі в `static`, увесь простір імен активної локалі в `dynamic`), доступне кожному компоненту, що викликає `useTranslation()`. Бандлер не може розбити бандл нижче за вміст екземпляра, а runtime не може знати наперед, які ключі знадобляться компоненту.
@@ -149,6 +166,10 @@ const About = () => {
149
166
  └── About.tsx # useTranslation(); t("about.title")
150
167
  ```
151
168
 
169
+ Все, що містить екземпляр, надсилається на кожну сторінку, і витрати зростають за двома осями, сторінки та локалі:
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
  **З `@intlayer/next-i18next`** прив'язка здійснюється до словника. `syncJSON` перетворює кожен файл простору імен на словник; оптимізаційний етап передає компоненту саме той словник, який йому потрібен, у вигляді імпорту, що бандлер може відстежити й розділити за сторінками та локалями.
153
174
 
154
175
  ```bash
@@ -297,26 +318,112 @@ export default defineConfig({
297
318
 
298
319
  ## Обмеження, які слід врахувати перед початком
299
320
 
300
- - **Бекенди й детектори залишаються неактивними.** `i18n.use(HttpBackend)` викликає метод `init` плагіна і нічого більше. Якщо ваш додаток залежав від завантаження перекладів із CMS у runtime, цей процес більше не працюватиме; використовуйте CMS Intlayer або команди `intlayer pull` / `push`.
301
- - **`resources` ігнорується, а не об'єднується.** На відміну від деяких інших адаптерів, `@intlayer/i18next` не використовує інлайнові `resources` як резервний варіант (fallback). Кожен ключ має бути присутнім у синхронізованих словниках, що перевіряється командою `intlayer test`.
302
- - **App Router вимагає редагування провайдера.** Лише один файл, показаний вище. Для Pages Router з `appWithTranslation` жодних змін не потрібно.
303
- - **`next-i18next.config.js` не зчитується.** Налаштування на кшталт `localePath`, `fallbackLng`, `reloadOnPrerender` не мають еквівалента; локалі та поведінка за замовчуванням визначаються в `intlayer.config.ts`.
304
- - **Адаптер має власну вагу.** Він додає 9.4 KB runtime та +9.4 KB на сторінку порівняно з `next-intlayer`. Коли всі компоненти перейдуть на `useIntlayer`, цей адаптер можна сміливо видалити.
321
+ <AccordionGroup>
322
+ <Accordion header="Бекенди та детектори неактивні">
323
+
324
+ `i18n.use(HttpBackend)` викликає init плагіна і більше нічого. Якщо ваш додаток покладався на отримання перекладів з CMS під час виконання, цей процес більше не працює; використовуйте [Intlayer CMS](https://intlayer.org/uk/doc/concept/cms) або команди `intlayer pull` / `push`. Визначення локалі стає конфігурацією маршрутизації Intlayer (префікс URL, cookie, заголовок).
325
+
326
+ </Accordion>
327
+ <Accordion header="resources ігнорується, а не об'єднується">
328
+
329
+ На відміну від деяких інших адаптерів, `@intlayer/i18next` не використовує вбудовані `resources` як резервний варіант. Кожен ключ повинен існувати в синхронізованих словниках, що перевіряє `intlayer test`.
330
+
331
+ </Accordion>
332
+ <Accordion header="App Router вимагає редагування провайдера">
333
+
334
+ Один файл, показаний вище. Pages Router з `appWithTranslation` не вимагає жодних змін.
335
+
336
+ </Accordion>
337
+ <Accordion header="next-i18next.config.js не читається">
338
+
339
+ `localePath`, `fallbackLng`, `reloadOnPrerender` та аналоги не мають еквівалентів; локалі та резервні варіанти надходять з `intlayer.config.ts`.
340
+
341
+ </Accordion>
342
+ <Accordion header="Адаптер не безкоштовний">
343
+
344
+ 9.4 КБ рантайму та +9.4 КБ на сторінку порівняно з `next-intlayer`. Як тільки кожен компонент перейде на `useIntlayer`, видаліть його.
345
+
346
+ </Accordion>
347
+ </AccordionGroup>
305
348
 
306
349
  ## Коли що використовувати?
307
350
 
308
- - **Залишайтеся на `i18next`**, якщо ваш додаток критично залежить від бекендів часу виконання (переклади віддаються CMS у момент запиту), екосистеми плагінів або платформи, яка не підтримується адаптерами (не React).
309
- - **Використовуйте `@intlayer/*`**, якщо ви працюєте з `react-i18next` / `next-i18next` і хочете отримати економію 68 KB, у 8 разів менші компоненти, 0% витоку, типізовані ключі та перевірки в CI без переписування коду. Це оптимальний вхідний квиток для наявної кодової бази `i18next`.
310
- - **Переходьте на нативний варіант (`next-intlayer` / `react-intlayer`)** для нових проєктів або після того, як адаптер виконав своє завдання. Це найлегший із трьох варіантів (5.5 KB, +0.3 KB на сторінку), що підтримує синхронні серверні компоненти та файли `.content.ts` для окремих компонентів.
351
+ <AccordionGroup>
352
+ <Accordion header="Залишитися на i18next">
353
+
354
+ Ваш додаток залежить від бекендів часу виконання (переклади, що надаються CMS під час запиту), від екосистеми плагінів або від платформи без React, яку адаптери не підтримують.
355
+
356
+ </Accordion>
357
+ <Accordion header="Використовувати @intlayer/*">
358
+
359
+ Ви використовуєте `react-i18next` / `next-i18next` і хочете отримати 68 КБ економії, у 8 разів менші компоненти, 0% витоків, типізовані ключі та перевірки CI без переписування коду. Це відправна точка для існуючої кодової бази `i18next`.
360
+
361
+ </Accordion>
362
+ <Accordion header="Перейти на нативний (next-intlayer / react-intlayer)">
363
+
364
+ Для нових проєктів або коли адаптер виконав своє завдання. Він має найлегший рантайм (5.5 КБ, +0.3 КБ на сторінку) і відкриває доступ до синхронних Server Components та файлів `.content.ts` для кожного компонента. Почніть з [Intlayer з Next.js](https://intlayer.org/uk/doc/environment/nextjs) або [з Vite та React](https://intlayer.org/uk/doc/environment/vite-and-react).
365
+
366
+ </Accordion>
367
+ </AccordionGroup>
368
+
369
+ ## Часті запитання
370
+
371
+ <FAQ>
372
+
373
+ <Question title="Звідки беруться 68 КБ?">
374
+
375
+ З `resources: { en, fr, ... }`. Стандартне налаштування `next-i18next` імпортує JSON кожної локалі в `init()`, тому кожна сторінка містить кожен простір імен на кожній мові: **218.5 КБ** на сторінку. Адаптер ніколи не включає цей блок повністю; він передає кожному компоненту лише названий словник на активній мові.
376
+
377
+ </Question>
378
+
379
+ <Question title="Чи продовжують працювати мої компоненти <Trans>?">
380
+
381
+ Так, з `components`, нумерованими тегами `<1>...</1>` та `values`. Також підтримуються `{{interpolation}}`, вкладеність `$t(key)`, форми множини `key_one` / `key_other` (обчислювані за допомогою `Intl.PluralRules`), суфікси контексту та `returnObjects`.
382
+
383
+ </Question>
384
+
385
+ <Question title="Що робити, якщо я використовую один translation.json для кожної локалі?">
386
+
387
+ Встановіть `splitKeys: false` у плагіні `syncJSON`. Весь файл залишається одним словником, і звичайний виклик `useTranslation()` продовжує розпізнаватися відносно нього.
388
+
389
+ </Question>
390
+
391
+ <Question title="Це те саме, що й міграція на Intlayer?">
392
+
393
+ Ні, це міст. Адаптер зберігає API `i18next` і потребує 9.4 КБ рантайму; нативний `next-intlayer` коштує 5.5 КБ і додає синхронні Server Components та файли `.content.ts` поруч із компонентами. Ви можете мігрувати покомпонентно, оскільки словники JSON та `.content.ts` співіснують.
394
+
395
+ </Question>
396
+
397
+ <Question title="Чи можуть перекладачі продовжувати працювати так, як вони звикли?">
398
+
399
+ Так. `locales/{lng}/{ns}.json` залишається джерелом правди: `syncJSON` зчитує його з діалектом i18next і записує переклади назад при оновленні через CLI або CMS.
400
+
401
+ </Question>
402
+
403
+ </FAQ>
311
404
 
312
405
  ## Схожі порівняння
313
406
 
314
- - [i18next проти Intlayer](https://intlayer.org/uk/blog/i18next-vs-intlayer) (порівняння бібліотек, той самий бенчмарк)
315
- - [next-intl проти @intlayer/next-intl](https://intlayer.org/uk/blog/next-intl-vs-intlayer-next-intl) (та сама серія адаптерів)
316
- - [Lingui проти @intlayer/lingui](https://intlayer.org/uk/blog/lingui-vs-intlayer-lingui) (та сама серія адаптерів)
317
- - [vue-i18n проти @intlayer/vue-i18n](https://intlayer.org/uk/blog/vue-i18n-vs-intlayer-vue-i18n) (та сама серія адаптерів)
318
- - Посібники з міграції: [i18next](https://intlayer.org/uk/doc/migration/i18next), [react-i18next](https://intlayer.org/uk/doc/migration/react-i18next), [next-i18next](https://intlayer.org/uk/doc/migration/next-i18next)
319
- - Довідка з адаптерів сумісності: [i18next](https://intlayer.org/uk/doc/compatibility/i18next), [react-i18next](https://intlayer.org/uk/doc/compatibility/react-i18next), [next-i18next](https://intlayer.org/uk/doc/compatibility/next-i18next)
407
+ Та ж серія адаптерів:
408
+
409
+ - [next-intl vs @intlayer/next-intl](https://intlayer.org/uk/blog/next-intl-vs-intlayer-next-intl)
410
+ - [Lingui vs @intlayer/lingui](https://intlayer.org/uk/blog/lingui-vs-intlayer-lingui)
411
+ - [vue-i18n vs @intlayer/vue-i18n](https://intlayer.org/uk/blog/vue-i18n-vs-intlayer-vue-i18n)
412
+
413
+ Пряме порівняння бібліотек:
414
+
415
+ - [i18next vs Intlayer](https://intlayer.org/uk/blog/i18next-vs-intlayer), same benchmark
416
+ - [next-i18next vs next-intl vs Intlayer](https://intlayer.org/uk/blog/next-i18next-vs-next-intl-vs-intlayer)
417
+ - [react-i18next vs react-intl vs Intlayer](https://intlayer.org/uk/blog/react-i18next-vs-react-intl-vs-intlayer)
418
+ - [Is i18next outdated?](https://intlayer.org/uk/blog/is-i18next-outdated)
419
+
420
+ Довідкова документація:
421
+
422
+ - Compat adapters: [i18next](https://intlayer.org/uk/doc/compatibility/i18next), [react-i18next](https://intlayer.org/uk/doc/compatibility/react-i18next), [next-i18next](https://intlayer.org/uk/doc/compatibility/next-i18next)
423
+ - Migration guides: [i18next](https://intlayer.org/uk/doc/migration/i18next), [react-i18next](https://intlayer.org/uk/doc/migration/react-i18next), [next-i18next](https://intlayer.org/uk/doc/migration/next-i18next)
424
+ - [Next.js benchmark report](https://intlayer.org/uk/doc/benchmark/nextjs) and [TanStack Start benchmark report](https://intlayer.org/uk/doc/benchmark/tanstack)
425
+ - [Bundle optimization](https://intlayer.org/uk/doc/concept/bundle-optimization) and [the Intlayer compiler](https://intlayer.org/uk/doc/compiler)
426
+ - [Visual Editor](https://intlayer.org/uk/doc/concept/editor), [CMS](https://intlayer.org/uk/doc/concept/cms) and [AI translation](https://intlayer.org/uk/doc/concept/auto-fill)
320
427
 
321
428
  ## Висновок
322
429