@intlayer/docs 9.5.6 → 9.5.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (601) hide show
  1. package/blog/ar/i18next_vs_intlayer-i18next.md +122 -15
  2. package/blog/ar/i18next_vs_intlayer.md +130 -16
  3. package/blog/ar/lingui_vs_intlayer.md +122 -15
  4. package/blog/ar/next-intl_vs_intlayer-next-intl.md +124 -15
  5. package/blog/ar/next-intl_vs_intlayer.md +136 -20
  6. package/blog/ar/vue-i18n_vs_intlayer-vue-i18n.md +119 -17
  7. package/blog/ar/vue-i18n_vs_intlayer.md +193 -31
  8. package/blog/ar/vue-i18n_vs_intlayer_benchmark.md +361 -0
  9. package/blog/de/i18next_vs_intlayer-i18next.md +122 -15
  10. package/blog/de/i18next_vs_intlayer.md +128 -14
  11. package/blog/de/lingui_vs_intlayer.md +122 -15
  12. package/blog/de/next-intl_vs_intlayer-next-intl.md +124 -15
  13. package/blog/de/next-intl_vs_intlayer.md +125 -15
  14. package/blog/de/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  15. package/blog/de/vue-i18n_vs_intlayer.md +193 -31
  16. package/blog/en/i18next_vs_intlayer-i18next.md +121 -14
  17. package/blog/en/i18next_vs_intlayer.md +128 -14
  18. package/blog/en/lingui_vs_intlayer.md +124 -15
  19. package/blog/en/next-intl_vs_intlayer-next-intl.md +123 -14
  20. package/blog/en/next-intl_vs_intlayer.md +125 -13
  21. package/blog/en/vue-i18n_vs_intlayer-vue-i18n.md +115 -15
  22. package/blog/en/vue-i18n_vs_intlayer.md +188 -27
  23. package/blog/en-GB/i18next_vs_intlayer-i18next.md +121 -14
  24. package/blog/en-GB/i18next_vs_intlayer.md +128 -14
  25. package/blog/en-GB/lingui_vs_intlayer.md +122 -15
  26. package/blog/en-GB/next-intl_vs_intlayer-next-intl.md +124 -15
  27. package/blog/en-GB/next-intl_vs_intlayer.md +125 -15
  28. package/blog/en-GB/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  29. package/blog/en-GB/vue-i18n_vs_intlayer.md +187 -25
  30. package/blog/en-GB/vue-i18n_vs_intlayer_benchmark.md +116 -0
  31. package/blog/es/i18next_vs_intlayer-i18next.md +122 -15
  32. package/blog/es/i18next_vs_intlayer.md +128 -14
  33. package/blog/es/lingui_vs_intlayer.md +122 -15
  34. package/blog/es/next-intl_vs_intlayer-next-intl.md +124 -15
  35. package/blog/es/next-intl_vs_intlayer.md +125 -15
  36. package/blog/es/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  37. package/blog/es/vue-i18n_vs_intlayer.md +193 -31
  38. package/blog/fr/i18next_vs_intlayer-i18next.md +122 -15
  39. package/blog/fr/i18next_vs_intlayer.md +128 -14
  40. package/blog/fr/lingui_vs_intlayer.md +122 -15
  41. package/blog/fr/next-intl_vs_intlayer-next-intl.md +124 -15
  42. package/blog/fr/next-intl_vs_intlayer.md +127 -15
  43. package/blog/fr/vue-i18n_vs_intlayer-vue-i18n.md +118 -17
  44. package/blog/fr/vue-i18n_vs_intlayer.md +192 -31
  45. package/blog/fr/vue-i18n_vs_intlayer_benchmark.md +329 -7
  46. package/blog/hi/i18next_vs_intlayer-i18next.md +122 -15
  47. package/blog/hi/i18next_vs_intlayer.md +130 -16
  48. package/blog/hi/lingui_vs_intlayer.md +122 -15
  49. package/blog/hi/next-intl_vs_intlayer-next-intl.md +124 -15
  50. package/blog/hi/next-intl_vs_intlayer.md +135 -19
  51. package/blog/hi/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  52. package/blog/hi/vue-i18n_vs_intlayer.md +193 -31
  53. package/blog/hi/vue-i18n_vs_intlayer_benchmark.md +361 -0
  54. package/blog/id/i18next_vs_intlayer-i18next.md +122 -15
  55. package/blog/id/i18next_vs_intlayer.md +128 -14
  56. package/blog/id/lingui_vs_intlayer.md +122 -15
  57. package/blog/id/next-intl_vs_intlayer-next-intl.md +124 -15
  58. package/blog/id/next-intl_vs_intlayer.md +135 -19
  59. package/blog/id/vue-i18n_vs_intlayer-vue-i18n.md +354 -2
  60. package/blog/id/vue-i18n_vs_intlayer.md +188 -26
  61. package/blog/id/vue-i18n_vs_intlayer_benchmark.md +327 -7
  62. package/blog/it/i18next_vs_intlayer-i18next.md +122 -15
  63. package/blog/it/i18next_vs_intlayer.md +128 -14
  64. package/blog/it/lingui_vs_intlayer.md +122 -15
  65. package/blog/it/next-intl_vs_intlayer-next-intl.md +124 -15
  66. package/blog/it/next-intl_vs_intlayer.md +125 -15
  67. package/blog/it/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  68. package/blog/it/vue-i18n_vs_intlayer.md +191 -31
  69. package/blog/it/vue-i18n_vs_intlayer_benchmark.md +332 -5
  70. package/blog/ja/i18next_vs_intlayer-i18next.md +122 -15
  71. package/blog/ja/i18next_vs_intlayer.md +129 -17
  72. package/blog/ja/lingui_vs_intlayer.md +122 -15
  73. package/blog/ja/next-intl_vs_intlayer-next-intl.md +124 -15
  74. package/blog/ja/next-intl_vs_intlayer.md +124 -14
  75. package/blog/ja/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  76. package/blog/ja/vue-i18n_vs_intlayer.md +193 -31
  77. package/blog/ja/vue-i18n_vs_intlayer_benchmark.md +361 -0
  78. package/blog/ko/i18next_vs_intlayer-i18next.md +122 -15
  79. package/blog/ko/i18next_vs_intlayer.md +129 -17
  80. package/blog/ko/lingui_vs_intlayer.md +122 -15
  81. package/blog/ko/next-intl_vs_intlayer-next-intl.md +124 -15
  82. package/blog/ko/next-intl_vs_intlayer.md +134 -18
  83. package/blog/ko/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  84. package/blog/ko/vue-i18n_vs_intlayer.md +193 -31
  85. package/blog/pl/i18next_vs_intlayer-i18next.md +122 -15
  86. package/blog/pl/i18next_vs_intlayer.md +128 -14
  87. package/blog/pl/lingui_vs_intlayer.md +122 -15
  88. package/blog/pl/next-intl_vs_intlayer-next-intl.md +124 -15
  89. package/blog/pl/next-intl_vs_intlayer.md +134 -18
  90. package/blog/pl/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  91. package/blog/pl/vue-i18n_vs_intlayer.md +188 -26
  92. package/blog/pl/vue-i18n_vs_intlayer_benchmark.md +361 -0
  93. package/blog/pt/i18next_vs_intlayer-i18next.md +122 -15
  94. package/blog/pt/i18next_vs_intlayer.md +128 -14
  95. package/blog/pt/lingui_vs_intlayer.md +122 -15
  96. package/blog/pt/next-intl_vs_intlayer-next-intl.md +124 -15
  97. package/blog/pt/next-intl_vs_intlayer.md +131 -15
  98. package/blog/pt/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  99. package/blog/pt/vue-i18n_vs_intlayer.md +193 -31
  100. package/blog/pt/vue-i18n_vs_intlayer_benchmark.md +361 -0
  101. package/blog/ru/i18next_vs_intlayer-i18next.md +122 -15
  102. package/blog/ru/i18next_vs_intlayer.md +130 -16
  103. package/blog/ru/lingui_vs_intlayer.md +122 -15
  104. package/blog/ru/next-intl_vs_intlayer-next-intl.md +125 -16
  105. package/blog/ru/next-intl_vs_intlayer.md +123 -13
  106. package/blog/ru/vue-i18n_vs_intlayer-vue-i18n.md +127 -27
  107. package/blog/ru/vue-i18n_vs_intlayer.md +193 -31
  108. package/blog/ru/vue-i18n_vs_intlayer_benchmark.md +326 -19
  109. package/blog/tr/i18next_vs_intlayer-i18next.md +122 -15
  110. package/blog/tr/i18next_vs_intlayer.md +128 -14
  111. package/blog/tr/lingui_vs_intlayer.md +122 -15
  112. package/blog/tr/next-intl_vs_intlayer-next-intl.md +124 -15
  113. package/blog/tr/next-intl_vs_intlayer.md +136 -20
  114. package/blog/tr/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  115. package/blog/tr/vue-i18n_vs_intlayer.md +188 -26
  116. package/blog/tr/vue-i18n_vs_intlayer_benchmark.md +361 -0
  117. package/blog/uk/i18next_vs_intlayer-i18next.md +122 -15
  118. package/blog/uk/i18next_vs_intlayer.md +130 -16
  119. package/blog/uk/lingui_vs_intlayer.md +122 -15
  120. package/blog/uk/next-intl_vs_intlayer-next-intl.md +124 -15
  121. package/blog/uk/next-intl_vs_intlayer.md +135 -19
  122. package/blog/uk/vue-i18n_vs_intlayer-vue-i18n.md +135 -17
  123. package/blog/uk/vue-i18n_vs_intlayer.md +188 -27
  124. package/blog/uk/vue-i18n_vs_intlayer_benchmark.md +361 -0
  125. package/blog/vi/i18next_vs_intlayer-i18next.md +122 -15
  126. package/blog/vi/i18next_vs_intlayer.md +128 -14
  127. package/blog/vi/lingui_vs_intlayer.md +122 -15
  128. package/blog/vi/next-intl_vs_intlayer-next-intl.md +124 -15
  129. package/blog/vi/next-intl_vs_intlayer.md +135 -19
  130. package/blog/vi/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  131. package/blog/vi/vue-i18n_vs_intlayer.md +188 -26
  132. package/blog/vi/vue-i18n_vs_intlayer_benchmark.md +361 -0
  133. package/blog/zh/i18next_vs_intlayer-i18next.md +122 -15
  134. package/blog/zh/i18next_vs_intlayer.md +128 -14
  135. package/blog/zh/lingui_vs_intlayer.md +122 -15
  136. package/blog/zh/next-intl_vs_intlayer-next-intl.md +124 -15
  137. package/blog/zh/next-intl_vs_intlayer.md +125 -15
  138. package/blog/zh/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  139. package/blog/zh/vue-i18n_vs_intlayer.md +192 -31
  140. package/blog/zh/vue-i18n_vs_intlayer_benchmark.md +340 -9
  141. package/dist/cjs/generated/docs.entry.cjs +40 -40
  142. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  143. package/dist/cjs/index.cjs +2 -2
  144. package/dist/esm/generated/docs.entry.mjs +40 -40
  145. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  146. package/dist/esm/index.mjs +2 -2
  147. package/dist/types/generated/docs.entry.d.ts +2 -2
  148. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  149. package/docs/ar/benchmark/nextjs.md +13 -13
  150. package/docs/ar/benchmark/solid.md +5 -5
  151. package/docs/ar/benchmark/svelte.md +4 -4
  152. package/docs/ar/benchmark/tanstack.md +14 -13
  153. package/docs/ar/benchmark/vue.md +5 -5
  154. package/docs/ar/chrome_extension.md +130 -0
  155. package/docs/ar/cli/index.md +6 -1
  156. package/docs/ar/cli/infra.md +162 -0
  157. package/docs/ar/cli/init.md +24 -1
  158. package/docs/ar/dictionary/html.md +173 -5
  159. package/docs/ar/dictionary/markdown.md +263 -1
  160. package/docs/ar/intlayer_with_analog.md +23 -1
  161. package/docs/ar/intlayer_with_angular_19.md +24 -1
  162. package/docs/ar/intlayer_with_angular_21.md +24 -1
  163. package/docs/ar/intlayer_with_astro.md +24 -1
  164. package/docs/ar/intlayer_with_astro_lit.md +25 -1
  165. package/docs/ar/intlayer_with_astro_preact.md +26 -1
  166. package/docs/ar/intlayer_with_astro_react.md +26 -1
  167. package/docs/ar/intlayer_with_astro_solid.md +26 -1
  168. package/docs/ar/intlayer_with_astro_svelte.md +25 -1
  169. package/docs/ar/intlayer_with_astro_vue.md +25 -1
  170. package/docs/ar/intlayer_with_remix_3.md +22 -1
  171. package/docs/ar/self_hosting.md +406 -231
  172. package/docs/de/benchmark/nextjs.md +13 -13
  173. package/docs/de/benchmark/solid.md +5 -5
  174. package/docs/de/benchmark/svelte.md +4 -4
  175. package/docs/de/benchmark/tanstack.md +14 -13
  176. package/docs/de/benchmark/vue.md +5 -5
  177. package/docs/de/chrome_extension.md +130 -0
  178. package/docs/de/cli/index.md +6 -1
  179. package/docs/de/cli/infra.md +162 -0
  180. package/docs/de/cli/init.md +24 -1
  181. package/docs/de/dictionary/html.md +173 -5
  182. package/docs/de/dictionary/markdown.md +263 -1
  183. package/docs/de/intlayer_with_analog.md +23 -1
  184. package/docs/de/intlayer_with_angular_19.md +24 -1
  185. package/docs/de/intlayer_with_angular_21.md +24 -1
  186. package/docs/de/intlayer_with_astro.md +24 -1
  187. package/docs/de/intlayer_with_astro_lit.md +25 -1
  188. package/docs/de/intlayer_with_astro_preact.md +26 -1
  189. package/docs/de/intlayer_with_astro_react.md +26 -1
  190. package/docs/de/intlayer_with_astro_solid.md +26 -1
  191. package/docs/de/intlayer_with_astro_svelte.md +25 -1
  192. package/docs/de/intlayer_with_astro_vue.md +25 -1
  193. package/docs/de/intlayer_with_remix_3.md +22 -1
  194. package/docs/de/self_hosting.md +404 -227
  195. package/docs/en/benchmark/nextjs.md +13 -13
  196. package/docs/en/benchmark/solid.md +5 -5
  197. package/docs/en/benchmark/svelte.md +4 -4
  198. package/docs/en/benchmark/tanstack.md +14 -13
  199. package/docs/en/benchmark/vue.md +5 -5
  200. package/docs/en/chrome_extension.md +130 -0
  201. package/docs/en/cli/index.md +6 -1
  202. package/docs/en/cli/infra.md +175 -0
  203. package/docs/en/cli/init.md +25 -1
  204. package/docs/en/dictionary/html.md +173 -5
  205. package/docs/en/dictionary/markdown.md +263 -1
  206. package/docs/en/intlayer_with_analog.md +23 -1
  207. package/docs/en/intlayer_with_angular_19.md +24 -1
  208. package/docs/en/intlayer_with_angular_21.md +24 -1
  209. package/docs/en/intlayer_with_astro.md +24 -1
  210. package/docs/en/intlayer_with_astro_lit.md +25 -1
  211. package/docs/en/intlayer_with_astro_preact.md +26 -1
  212. package/docs/en/intlayer_with_astro_react.md +26 -1
  213. package/docs/en/intlayer_with_astro_solid.md +26 -1
  214. package/docs/en/intlayer_with_astro_svelte.md +25 -1
  215. package/docs/en/intlayer_with_astro_vue.md +25 -1
  216. package/docs/en/intlayer_with_remix_3.md +22 -1
  217. package/docs/en/self_hosting.md +418 -176
  218. package/docs/en-GB/benchmark/nextjs.md +13 -13
  219. package/docs/en-GB/benchmark/solid.md +5 -5
  220. package/docs/en-GB/benchmark/svelte.md +4 -4
  221. package/docs/en-GB/benchmark/tanstack.md +14 -13
  222. package/docs/en-GB/benchmark/vue.md +5 -5
  223. package/docs/en-GB/chrome_extension.md +130 -0
  224. package/docs/en-GB/cli/index.md +6 -1
  225. package/docs/en-GB/cli/infra.md +162 -0
  226. package/docs/en-GB/cli/init.md +24 -1
  227. package/docs/en-GB/dictionary/html.md +173 -5
  228. package/docs/en-GB/dictionary/markdown.md +263 -1
  229. package/docs/en-GB/intlayer_with_analog.md +23 -1
  230. package/docs/en-GB/intlayer_with_angular_19.md +24 -1
  231. package/docs/en-GB/intlayer_with_angular_21.md +24 -1
  232. package/docs/en-GB/intlayer_with_astro.md +24 -1
  233. package/docs/en-GB/intlayer_with_astro_lit.md +25 -1
  234. package/docs/en-GB/intlayer_with_astro_preact.md +26 -1
  235. package/docs/en-GB/intlayer_with_astro_react.md +26 -1
  236. package/docs/en-GB/intlayer_with_astro_solid.md +26 -1
  237. package/docs/en-GB/intlayer_with_astro_svelte.md +25 -1
  238. package/docs/en-GB/intlayer_with_astro_vue.md +25 -1
  239. package/docs/en-GB/intlayer_with_remix_3.md +22 -1
  240. package/docs/en-GB/self_hosting.md +381 -206
  241. package/docs/es/benchmark/nextjs.md +13 -13
  242. package/docs/es/benchmark/solid.md +5 -5
  243. package/docs/es/benchmark/svelte.md +4 -4
  244. package/docs/es/benchmark/tanstack.md +14 -13
  245. package/docs/es/benchmark/vue.md +5 -5
  246. package/docs/es/chrome_extension.md +130 -0
  247. package/docs/es/cli/index.md +6 -1
  248. package/docs/es/cli/infra.md +162 -0
  249. package/docs/es/cli/init.md +24 -1
  250. package/docs/es/dictionary/html.md +173 -5
  251. package/docs/es/dictionary/markdown.md +263 -1
  252. package/docs/es/intlayer_with_analog.md +23 -1
  253. package/docs/es/intlayer_with_angular_19.md +24 -1
  254. package/docs/es/intlayer_with_angular_21.md +24 -1
  255. package/docs/es/intlayer_with_astro.md +24 -1
  256. package/docs/es/intlayer_with_astro_lit.md +25 -1
  257. package/docs/es/intlayer_with_astro_preact.md +26 -1
  258. package/docs/es/intlayer_with_astro_react.md +26 -1
  259. package/docs/es/intlayer_with_astro_solid.md +26 -1
  260. package/docs/es/intlayer_with_astro_svelte.md +25 -1
  261. package/docs/es/intlayer_with_astro_vue.md +25 -1
  262. package/docs/es/intlayer_with_remix_3.md +22 -1
  263. package/docs/es/self_hosting.md +400 -223
  264. package/docs/fr/benchmark/nextjs.md +13 -13
  265. package/docs/fr/benchmark/solid.md +5 -5
  266. package/docs/fr/benchmark/svelte.md +4 -4
  267. package/docs/fr/benchmark/tanstack.md +14 -13
  268. package/docs/fr/benchmark/vue.md +5 -5
  269. package/docs/fr/chrome_extension.md +130 -0
  270. package/docs/fr/cli/index.md +6 -1
  271. package/docs/fr/cli/infra.md +162 -0
  272. package/docs/fr/cli/init.md +24 -1
  273. package/docs/fr/dictionary/html.md +173 -5
  274. package/docs/fr/dictionary/markdown.md +265 -4
  275. package/docs/fr/intlayer_with_analog.md +23 -1
  276. package/docs/fr/intlayer_with_angular_19.md +24 -1
  277. package/docs/fr/intlayer_with_angular_21.md +24 -1
  278. package/docs/fr/intlayer_with_astro.md +24 -1
  279. package/docs/fr/intlayer_with_astro_lit.md +25 -1
  280. package/docs/fr/intlayer_with_astro_preact.md +26 -1
  281. package/docs/fr/intlayer_with_astro_react.md +26 -1
  282. package/docs/fr/intlayer_with_astro_solid.md +26 -1
  283. package/docs/fr/intlayer_with_astro_svelte.md +25 -1
  284. package/docs/fr/intlayer_with_astro_vue.md +25 -1
  285. package/docs/fr/intlayer_with_remix_3.md +22 -1
  286. package/docs/fr/self_hosting.md +401 -224
  287. package/docs/hi/benchmark/nextjs.md +13 -13
  288. package/docs/hi/benchmark/solid.md +5 -5
  289. package/docs/hi/benchmark/svelte.md +4 -4
  290. package/docs/hi/benchmark/tanstack.md +14 -13
  291. package/docs/hi/benchmark/vue.md +5 -5
  292. package/docs/hi/chrome_extension.md +130 -0
  293. package/docs/hi/cli/index.md +6 -1
  294. package/docs/hi/cli/infra.md +162 -0
  295. package/docs/hi/cli/init.md +24 -1
  296. package/docs/hi/dictionary/html.md +173 -5
  297. package/docs/hi/dictionary/markdown.md +263 -1
  298. package/docs/hi/intlayer_with_analog.md +23 -1
  299. package/docs/hi/intlayer_with_angular_19.md +24 -1
  300. package/docs/hi/intlayer_with_angular_21.md +24 -1
  301. package/docs/hi/intlayer_with_astro.md +24 -1
  302. package/docs/hi/intlayer_with_astro_lit.md +25 -1
  303. package/docs/hi/intlayer_with_astro_preact.md +26 -1
  304. package/docs/hi/intlayer_with_astro_react.md +26 -1
  305. package/docs/hi/intlayer_with_astro_solid.md +26 -1
  306. package/docs/hi/intlayer_with_astro_svelte.md +25 -1
  307. package/docs/hi/intlayer_with_astro_vue.md +25 -1
  308. package/docs/hi/intlayer_with_remix_3.md +22 -1
  309. package/docs/hi/self_hosting.md +409 -235
  310. package/docs/id/benchmark/nextjs.md +13 -13
  311. package/docs/id/benchmark/solid.md +5 -5
  312. package/docs/id/benchmark/svelte.md +4 -4
  313. package/docs/id/benchmark/tanstack.md +14 -13
  314. package/docs/id/benchmark/vue.md +5 -5
  315. package/docs/id/chrome_extension.md +130 -0
  316. package/docs/id/cli/index.md +6 -1
  317. package/docs/id/cli/infra.md +162 -0
  318. package/docs/id/cli/init.md +24 -1
  319. package/docs/id/dictionary/html.md +173 -5
  320. package/docs/id/dictionary/markdown.md +263 -1
  321. package/docs/id/intlayer_with_analog.md +23 -1
  322. package/docs/id/intlayer_with_angular_19.md +24 -1
  323. package/docs/id/intlayer_with_angular_21.md +24 -1
  324. package/docs/id/intlayer_with_astro.md +24 -1
  325. package/docs/id/intlayer_with_astro_lit.md +25 -1
  326. package/docs/id/intlayer_with_astro_preact.md +26 -1
  327. package/docs/id/intlayer_with_astro_react.md +26 -1
  328. package/docs/id/intlayer_with_astro_solid.md +26 -1
  329. package/docs/id/intlayer_with_astro_svelte.md +25 -1
  330. package/docs/id/intlayer_with_astro_vue.md +25 -1
  331. package/docs/id/intlayer_with_remix_3.md +22 -1
  332. package/docs/id/self_hosting.md +416 -243
  333. package/docs/it/benchmark/nextjs.md +13 -13
  334. package/docs/it/benchmark/solid.md +5 -5
  335. package/docs/it/benchmark/svelte.md +4 -4
  336. package/docs/it/benchmark/tanstack.md +14 -13
  337. package/docs/it/benchmark/vue.md +5 -5
  338. package/docs/it/chrome_extension.md +130 -0
  339. package/docs/it/cli/index.md +6 -1
  340. package/docs/it/cli/infra.md +162 -0
  341. package/docs/it/cli/init.md +24 -1
  342. package/docs/it/dictionary/html.md +173 -5
  343. package/docs/it/dictionary/markdown.md +263 -1
  344. package/docs/it/intlayer_with_analog.md +23 -1
  345. package/docs/it/intlayer_with_angular_19.md +24 -1
  346. package/docs/it/intlayer_with_angular_21.md +24 -1
  347. package/docs/it/intlayer_with_astro.md +24 -1
  348. package/docs/it/intlayer_with_astro_lit.md +25 -1
  349. package/docs/it/intlayer_with_astro_preact.md +26 -1
  350. package/docs/it/intlayer_with_astro_react.md +26 -1
  351. package/docs/it/intlayer_with_astro_solid.md +26 -1
  352. package/docs/it/intlayer_with_astro_svelte.md +25 -1
  353. package/docs/it/intlayer_with_astro_vue.md +25 -1
  354. package/docs/it/intlayer_with_remix_3.md +22 -1
  355. package/docs/it/self_hosting.md +412 -237
  356. package/docs/ja/benchmark/nextjs.md +13 -13
  357. package/docs/ja/benchmark/solid.md +5 -5
  358. package/docs/ja/benchmark/svelte.md +4 -4
  359. package/docs/ja/benchmark/tanstack.md +13 -12
  360. package/docs/ja/benchmark/vue.md +5 -5
  361. package/docs/ja/chrome_extension.md +130 -0
  362. package/docs/ja/cli/index.md +6 -1
  363. package/docs/ja/cli/infra.md +162 -0
  364. package/docs/ja/cli/init.md +24 -1
  365. package/docs/ja/dictionary/html.md +173 -5
  366. package/docs/ja/dictionary/markdown.md +263 -1
  367. package/docs/ja/intlayer_with_analog.md +23 -1
  368. package/docs/ja/intlayer_with_angular_19.md +24 -1
  369. package/docs/ja/intlayer_with_angular_21.md +24 -1
  370. package/docs/ja/intlayer_with_astro.md +24 -1
  371. package/docs/ja/intlayer_with_astro_lit.md +25 -1
  372. package/docs/ja/intlayer_with_astro_preact.md +26 -1
  373. package/docs/ja/intlayer_with_astro_react.md +26 -1
  374. package/docs/ja/intlayer_with_astro_solid.md +26 -1
  375. package/docs/ja/intlayer_with_astro_svelte.md +25 -1
  376. package/docs/ja/intlayer_with_astro_vue.md +25 -1
  377. package/docs/ja/intlayer_with_remix_3.md +22 -1
  378. package/docs/ja/self_hosting.md +398 -223
  379. package/docs/ko/benchmark/nextjs.md +13 -13
  380. package/docs/ko/benchmark/solid.md +5 -5
  381. package/docs/ko/benchmark/svelte.md +4 -4
  382. package/docs/ko/benchmark/tanstack.md +14 -13
  383. package/docs/ko/benchmark/vue.md +5 -5
  384. package/docs/ko/chrome_extension.md +130 -0
  385. package/docs/ko/cli/index.md +6 -1
  386. package/docs/ko/cli/infra.md +162 -0
  387. package/docs/ko/cli/init.md +24 -1
  388. package/docs/ko/dictionary/html.md +173 -5
  389. package/docs/ko/dictionary/markdown.md +263 -1
  390. package/docs/ko/intlayer_with_analog.md +23 -1
  391. package/docs/ko/intlayer_with_angular_19.md +24 -1
  392. package/docs/ko/intlayer_with_angular_21.md +24 -1
  393. package/docs/ko/intlayer_with_astro.md +24 -1
  394. package/docs/ko/intlayer_with_astro_lit.md +25 -1
  395. package/docs/ko/intlayer_with_astro_preact.md +26 -1
  396. package/docs/ko/intlayer_with_astro_react.md +26 -1
  397. package/docs/ko/intlayer_with_astro_solid.md +26 -1
  398. package/docs/ko/intlayer_with_astro_svelte.md +25 -1
  399. package/docs/ko/intlayer_with_astro_vue.md +25 -1
  400. package/docs/ko/intlayer_with_remix_3.md +22 -1
  401. package/docs/ko/self_hosting.md +411 -238
  402. package/docs/pl/benchmark/nextjs.md +13 -13
  403. package/docs/pl/benchmark/solid.md +5 -5
  404. package/docs/pl/benchmark/svelte.md +4 -4
  405. package/docs/pl/benchmark/tanstack.md +14 -13
  406. package/docs/pl/benchmark/vue.md +5 -5
  407. package/docs/pl/chrome_extension.md +130 -0
  408. package/docs/pl/cli/index.md +6 -1
  409. package/docs/pl/cli/infra.md +162 -0
  410. package/docs/pl/cli/init.md +24 -1
  411. package/docs/pl/dictionary/html.md +173 -5
  412. package/docs/pl/dictionary/markdown.md +263 -1
  413. package/docs/pl/intlayer_with_analog.md +23 -1
  414. package/docs/pl/intlayer_with_angular_19.md +24 -1
  415. package/docs/pl/intlayer_with_angular_21.md +24 -1
  416. package/docs/pl/intlayer_with_astro.md +24 -1
  417. package/docs/pl/intlayer_with_astro_lit.md +25 -1
  418. package/docs/pl/intlayer_with_astro_preact.md +26 -1
  419. package/docs/pl/intlayer_with_astro_react.md +26 -1
  420. package/docs/pl/intlayer_with_astro_solid.md +26 -1
  421. package/docs/pl/intlayer_with_astro_svelte.md +25 -1
  422. package/docs/pl/intlayer_with_astro_vue.md +25 -1
  423. package/docs/pl/intlayer_with_remix_3.md +22 -1
  424. package/docs/pl/self_hosting.md +408 -233
  425. package/docs/pt/benchmark/nextjs.md +13 -13
  426. package/docs/pt/benchmark/solid.md +5 -5
  427. package/docs/pt/benchmark/svelte.md +4 -4
  428. package/docs/pt/benchmark/tanstack.md +14 -13
  429. package/docs/pt/benchmark/vue.md +5 -5
  430. package/docs/pt/chrome_extension.md +130 -0
  431. package/docs/pt/cli/index.md +6 -1
  432. package/docs/pt/cli/infra.md +162 -0
  433. package/docs/pt/cli/init.md +24 -1
  434. package/docs/pt/dictionary/html.md +173 -5
  435. package/docs/pt/dictionary/markdown.md +263 -1
  436. package/docs/pt/intlayer_with_analog.md +23 -1
  437. package/docs/pt/intlayer_with_angular_19.md +24 -1
  438. package/docs/pt/intlayer_with_angular_21.md +24 -1
  439. package/docs/pt/intlayer_with_astro.md +24 -1
  440. package/docs/pt/intlayer_with_astro_lit.md +25 -1
  441. package/docs/pt/intlayer_with_astro_preact.md +26 -1
  442. package/docs/pt/intlayer_with_astro_react.md +26 -1
  443. package/docs/pt/intlayer_with_astro_solid.md +26 -1
  444. package/docs/pt/intlayer_with_astro_svelte.md +25 -1
  445. package/docs/pt/intlayer_with_astro_vue.md +25 -1
  446. package/docs/pt/intlayer_with_remix_3.md +22 -1
  447. package/docs/pt/self_hosting.md +399 -224
  448. package/docs/ru/benchmark/nextjs.md +13 -13
  449. package/docs/ru/benchmark/solid.md +5 -5
  450. package/docs/ru/benchmark/svelte.md +4 -4
  451. package/docs/ru/benchmark/tanstack.md +14 -13
  452. package/docs/ru/benchmark/vue.md +5 -5
  453. package/docs/ru/chrome_extension.md +130 -0
  454. package/docs/ru/cli/index.md +6 -1
  455. package/docs/ru/cli/infra.md +162 -0
  456. package/docs/ru/cli/init.md +24 -1
  457. package/docs/ru/dictionary/html.md +173 -5
  458. package/docs/ru/dictionary/markdown.md +263 -1
  459. package/docs/ru/intlayer_with_analog.md +23 -1
  460. package/docs/ru/intlayer_with_angular_19.md +24 -1
  461. package/docs/ru/intlayer_with_angular_21.md +24 -1
  462. package/docs/ru/intlayer_with_astro.md +24 -1
  463. package/docs/ru/intlayer_with_astro_lit.md +25 -1
  464. package/docs/ru/intlayer_with_astro_preact.md +26 -1
  465. package/docs/ru/intlayer_with_astro_react.md +26 -1
  466. package/docs/ru/intlayer_with_astro_solid.md +26 -1
  467. package/docs/ru/intlayer_with_astro_svelte.md +25 -1
  468. package/docs/ru/intlayer_with_astro_vue.md +25 -1
  469. package/docs/ru/intlayer_with_remix_3.md +22 -1
  470. package/docs/ru/self_hosting.md +403 -228
  471. package/docs/tr/benchmark/nextjs.md +13 -13
  472. package/docs/tr/benchmark/solid.md +5 -5
  473. package/docs/tr/benchmark/svelte.md +4 -4
  474. package/docs/tr/benchmark/tanstack.md +14 -13
  475. package/docs/tr/benchmark/vue.md +5 -5
  476. package/docs/tr/chrome_extension.md +130 -0
  477. package/docs/tr/cli/index.md +6 -1
  478. package/docs/tr/cli/infra.md +162 -0
  479. package/docs/tr/cli/init.md +24 -1
  480. package/docs/tr/dictionary/html.md +173 -5
  481. package/docs/tr/dictionary/markdown.md +263 -1
  482. package/docs/tr/intlayer_with_analog.md +23 -1
  483. package/docs/tr/intlayer_with_angular_19.md +24 -1
  484. package/docs/tr/intlayer_with_angular_21.md +24 -1
  485. package/docs/tr/intlayer_with_astro.md +24 -1
  486. package/docs/tr/intlayer_with_astro_lit.md +25 -1
  487. package/docs/tr/intlayer_with_astro_preact.md +26 -1
  488. package/docs/tr/intlayer_with_astro_react.md +26 -1
  489. package/docs/tr/intlayer_with_astro_solid.md +26 -1
  490. package/docs/tr/intlayer_with_astro_svelte.md +25 -1
  491. package/docs/tr/intlayer_with_astro_vue.md +25 -1
  492. package/docs/tr/intlayer_with_remix_3.md +22 -1
  493. package/docs/tr/self_hosting.md +410 -234
  494. package/docs/uk/benchmark/nextjs.md +13 -13
  495. package/docs/uk/benchmark/solid.md +5 -5
  496. package/docs/uk/benchmark/svelte.md +4 -4
  497. package/docs/uk/benchmark/tanstack.md +14 -13
  498. package/docs/uk/benchmark/vue.md +5 -5
  499. package/docs/uk/chrome_extension.md +130 -0
  500. package/docs/uk/cli/index.md +6 -1
  501. package/docs/uk/cli/infra.md +162 -0
  502. package/docs/uk/cli/init.md +24 -1
  503. package/docs/uk/dictionary/html.md +173 -5
  504. package/docs/uk/dictionary/markdown.md +263 -1
  505. package/docs/uk/intlayer_with_analog.md +23 -1
  506. package/docs/uk/intlayer_with_angular_19.md +24 -1
  507. package/docs/uk/intlayer_with_angular_21.md +24 -1
  508. package/docs/uk/intlayer_with_astro.md +24 -1
  509. package/docs/uk/intlayer_with_astro_lit.md +25 -1
  510. package/docs/uk/intlayer_with_astro_preact.md +26 -1
  511. package/docs/uk/intlayer_with_astro_react.md +26 -1
  512. package/docs/uk/intlayer_with_astro_solid.md +26 -1
  513. package/docs/uk/intlayer_with_astro_svelte.md +25 -1
  514. package/docs/uk/intlayer_with_astro_vue.md +25 -1
  515. package/docs/uk/intlayer_with_remix_3.md +22 -1
  516. package/docs/uk/self_hosting.md +413 -238
  517. package/docs/vi/benchmark/nextjs.md +13 -13
  518. package/docs/vi/benchmark/solid.md +5 -5
  519. package/docs/vi/benchmark/svelte.md +4 -4
  520. package/docs/vi/benchmark/tanstack.md +14 -13
  521. package/docs/vi/benchmark/vue.md +5 -5
  522. package/docs/vi/chrome_extension.md +130 -0
  523. package/docs/vi/cli/index.md +6 -1
  524. package/docs/vi/cli/infra.md +162 -0
  525. package/docs/vi/cli/init.md +24 -1
  526. package/docs/vi/dictionary/html.md +173 -5
  527. package/docs/vi/dictionary/markdown.md +263 -1
  528. package/docs/vi/intlayer_with_analog.md +23 -1
  529. package/docs/vi/intlayer_with_angular_19.md +24 -1
  530. package/docs/vi/intlayer_with_angular_21.md +24 -1
  531. package/docs/vi/intlayer_with_astro.md +24 -1
  532. package/docs/vi/intlayer_with_astro_lit.md +25 -1
  533. package/docs/vi/intlayer_with_astro_preact.md +26 -1
  534. package/docs/vi/intlayer_with_astro_react.md +26 -1
  535. package/docs/vi/intlayer_with_astro_solid.md +26 -1
  536. package/docs/vi/intlayer_with_astro_svelte.md +25 -1
  537. package/docs/vi/intlayer_with_astro_vue.md +25 -1
  538. package/docs/vi/intlayer_with_remix_3.md +22 -1
  539. package/docs/vi/self_hosting.md +408 -234
  540. package/docs/zh/benchmark/nextjs.md +13 -13
  541. package/docs/zh/benchmark/solid.md +5 -5
  542. package/docs/zh/benchmark/svelte.md +4 -4
  543. package/docs/zh/benchmark/tanstack.md +14 -13
  544. package/docs/zh/benchmark/vue.md +5 -5
  545. package/docs/zh/chrome_extension.md +130 -0
  546. package/docs/zh/cli/index.md +6 -1
  547. package/docs/zh/cli/infra.md +162 -0
  548. package/docs/zh/cli/init.md +24 -1
  549. package/docs/zh/dictionary/html.md +172 -5
  550. package/docs/zh/dictionary/markdown.md +262 -1
  551. package/docs/zh/intlayer_with_analog.md +23 -1
  552. package/docs/zh/intlayer_with_angular_19.md +24 -1
  553. package/docs/zh/intlayer_with_angular_21.md +24 -1
  554. package/docs/zh/intlayer_with_astro.md +24 -1
  555. package/docs/zh/intlayer_with_astro_lit.md +25 -1
  556. package/docs/zh/intlayer_with_astro_preact.md +26 -1
  557. package/docs/zh/intlayer_with_astro_react.md +26 -1
  558. package/docs/zh/intlayer_with_astro_solid.md +26 -1
  559. package/docs/zh/intlayer_with_astro_svelte.md +25 -1
  560. package/docs/zh/intlayer_with_astro_vue.md +25 -1
  561. package/docs/zh/intlayer_with_remix_3.md +22 -1
  562. package/docs/zh/self_hosting.md +410 -237
  563. package/legal/ar/privacy_notice.md +9 -3
  564. package/legal/de/privacy_notice.md +9 -3
  565. package/legal/en/privacy_notice.md +10 -3
  566. package/legal/en-GB/privacy_notice.md +9 -3
  567. package/legal/es/privacy_notice.md +9 -3
  568. package/legal/fr/privacy_notice.md +9 -3
  569. package/legal/hi/privacy_notice.md +9 -3
  570. package/legal/id/privacy_notice.md +9 -3
  571. package/legal/it/privacy_notice.md +9 -3
  572. package/legal/ja/privacy_notice.md +9 -3
  573. package/legal/ko/privacy_notice.md +9 -3
  574. package/legal/pl/privacy_notice.md +9 -3
  575. package/legal/pt/privacy_notice.md +9 -3
  576. package/legal/ru/privacy_notice.md +9 -3
  577. package/legal/tr/privacy_notice.md +9 -3
  578. package/legal/uk/privacy_notice.md +9 -3
  579. package/legal/vi/privacy_notice.md +9 -3
  580. package/legal/zh/privacy_notice.md +9 -3
  581. package/package.json +1 -1
  582. package/src/generated/docs.entry.ts +40 -40
  583. package/docs/ar/roadmap.md +0 -321
  584. package/docs/de/roadmap.md +0 -322
  585. package/docs/en/intlayer_with_astro_vanilla.md +0 -713
  586. package/docs/en/roadmap.md +0 -325
  587. package/docs/en-GB/roadmap.md +0 -322
  588. package/docs/es/roadmap.md +0 -322
  589. package/docs/fr/roadmap.md +0 -322
  590. package/docs/hi/roadmap.md +0 -322
  591. package/docs/id/roadmap.md +0 -325
  592. package/docs/it/roadmap.md +0 -322
  593. package/docs/ja/roadmap.md +0 -322
  594. package/docs/ko/roadmap.md +0 -322
  595. package/docs/pl/roadmap.md +0 -325
  596. package/docs/pt/roadmap.md +0 -322
  597. package/docs/ru/roadmap.md +0 -322
  598. package/docs/tr/roadmap.md +0 -325
  599. package/docs/uk/roadmap.md +0 -325
  600. package/docs/vi/roadmap.md +0 -325
  601. package/docs/zh/roadmap.md +0 -322
@@ -1,16 +1,16 @@
1
1
  ---
2
2
  createdAt: 2026-09-13
3
3
  updatedAt: 2026-09-13
4
- title: "vue-i18n vs Intlayer: 2026 基准测试"
5
- description: 在相同的 Vite + Vue 3 应用上测量 vue-i18n 和 Intlayer。库大小、每页 JavaScript、内容泄漏、组件大小和语言切换响应性,附带详细数据说明。
4
+ title: "vue-i18n vs Intlayer:2026 基准测试"
5
+ description: 在同一个 Vite + Vue 3 应用上测量 vue-i18n 与 Intlayer。库体积、每页 JavaScript、内容泄漏、组件体积以及语言切换的响应速度,并对数字加以解释。
6
6
  keywords:
7
7
  - vue-i18n
8
8
  - Intlayer
9
- - 国际化
9
+ - Internationalization
10
10
  - i18n
11
- - 基准测试
12
- - 包大小
13
- - 博客
11
+ - Benchmark
12
+ - Bundle size
13
+ - Blog
14
14
  - Vue
15
15
  - Nuxt
16
16
  - Vite
@@ -21,10 +21,341 @@ slugs:
21
21
  author: aymericzip
22
22
  ---
23
23
 
24
- # vue-i18n vs Intlayer | Vue 国际化(i18n)基准测试
24
+ # vue-i18n VS Intlayer | Vue 国际化 (i18n) 基准测试
25
25
 
26
- `vue-i18n` 是 Vue 的参考 i18n 库。Intlayer 是一个基于编译器、组件作用域的替代方案,具有 Vue 集成(`vue-intlayer`)。我们已经比较过它们的[功能和开发体验](https://intlayer.org/blog/vue-i18n-vs-intlayer)。本文着眼于每个库在应用构建后的成本。
26
+ `vue-i18n` 是 Vue 的参考 i18n 库。Intlayer 是一个基于编译器、按组件作用域划分内容的替代方案,并提供 Vue 集成(`vue-intlayer`)。我们已经比较过它们的[功能和开发体验](https://intlayer.org/blog/vue-i18n-vs-intlayer)。本文关注的是应用构建完成后,每个库各自的成本。
27
27
 
28
- 数据来自 [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom),这是一个开源套件,使用每个库构建相同的应用程序,并记录浏览器实际下载和执行的内容。
28
+ 数据来自 [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom),这是一个开源套件,它用每个库构建同一个应用程序,并记录浏览器实际下载和执行的内容。
29
29
 
30
30
  <TOC/>
31
+
32
+ > **tl;dr**:在同一个 Vite + Vue 3 应用上,`vue-i18n` 每页交付 **134.9 KB** 的 gzip 压缩 JavaScript,而无 i18n 的应用为 **41.3 KB**。Intlayer 交付 **57.1 KB**。仅 `vue-i18n` 的运行时就重达 **24.3 KB gzip**(是 Intlayer 3.9 KB 的 6 倍),每个页面携带 **90% 的其他页面字符串**,而单独编译的组件会拖入 **196 KB**,因为它绑定到全局消息树。`@intlayer/vue-i18n` 适配器保留了 `vue-i18n` 的 API,测得每页 **47.0 KB**。
33
+
34
+ ## 简而言之
35
+
36
+ - **vue-i18n** - Vue 2 / Vue 3 事实上的 i18n 库,也是 `@nuxtjs/i18n` 的核心。ICU 风格的消息、SFC `<i18n>` 块、`v-t` 指令、`d()` / `n()` 格式化器、庞大的生态系统。消息在 `createI18n()` 时注册到全局实例上;按语言的懒加载是手动的 `setLocaleMessage()` 模式,按路由拆分需要你自己构建。
37
+ - **Intlayer** - 以组件为中心的内容模型。`.content.ts` 字典与其服务的组件放在一起,构建时编译器(`vite-intlayer`)按组件、按语言进行 tree-shaking 和懒加载,从你的内容生成严格的 TypeScript 类型,缺失的翻译在构建时报错。附带路由 / SEO 辅助工具、可视化编辑器 / CMS 以及 AI 辅助翻译。
38
+
39
+ | 库 | GitHub Stars | 总提交数 | 最后提交 | 首个版本 | 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 年 4 月 | [![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 年 12 月 | [![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 集成** | ✅ 从内容自动生成严格类型 | ✅ 类型良好;严格的键安全需要为 schema 定义类型并保持纪律 |
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
+ | **AI 翻译** | ✅ 内置,使用你自己的提供商密钥 | ❌ 否 |
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**:只导入 i18n 库的空组件的 gzip 体积。运行时的固定成本。
78
+ - **Page JS**:每页下载的 gzip JavaScript,对所有页面和语言取平均。
79
+ - **Locale leak %**:下载的 JS 中,属于用户**未**查看语言的翻译字符串所占比例(以 `en` 和 `fr` 做指纹,因此 50% 意味着“另一种被测语言完整存在”;打包 10 种语言时,实际浪费更高)。
80
+ - **Page leak %**:下载的 JS 中,属于用户**不在**的页面的翻译字符串所占比例。
81
+ - **Component avg**:每个组件单独编译时的平均 gzip 体积。显示单个组件拖入了多少 i18n 运行时和目录。
82
+ - **E2E reactivity**:从选择新语言到 DOM 中 `html[lang]` 更新之间的实际耗时(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 库时,指纹识别会捕获共享 chunk 中硬编码的字符串,该数字没有意义。
97
+
98
+ **如何解读**
99
+
100
+ - **运行时成本。** `vue-i18n` 是整个基准测试中最重的运行时之一:只导入它的空组件就要 **24.3 KB gzip / 83.2 KB 压缩后**。`vue-intlayer` 只要 3.9 KB gzip。无论你有多少字符串,这个差距在每个页面上都要付出。
101
+ - **每页 JavaScript。** 无 i18n 的应用重 41.3 KB。`vue-i18n` 让它增至三倍多,达到 **134.9 KB**;Intlayer 落在 **57.1 KB**,+15.8 KB,其中大部分是打包的十种语言(见下一点)。
102
+ - **泄漏。** 使用 `createI18n({ messages: { en, fr, ... } })` 时,每个页面都交付所有语言和所有页面的字符串:**50% 的语言泄漏**(在两种指纹语言上)和 **90% 的页面泄漏**。Intlayer 的 `static` 模式也打包所有语言(因此语言泄漏数字相当),但**页面泄漏为 0%**:一个页面只拉取它渲染的组件的字典。切换到 `importMode: 'dynamic'` 还能消除语言泄漏;该配置不在本次 Vue 运行范围内。
103
+ - **组件体积是架构差异的体现。** 调用 `useI18n()` 的组件平均编译为 **196 KB**,因为 `t()` 绑定到持有所有语言所有消息的全局实例。同一个组件使用 `useIntlayer()` 编译为 **7.7 KB**:它只触及自己的字典。
104
+ - **响应速度**对两者都不是问题(2-5 ms)。一旦消息在内存中,Vue 的响应式系统让语言切换非常廉价。
105
+ - **`@intlayer/vue-i18n`**,即插即用的适配器,保留了 `vue-i18n` 的 API,测得**每页 47.0 KB**、**每组件 8.4 KB**,应用代码未做改动。
106
+
107
+ > 作为参考,同一次运行测得 `fluent-vue` 每页 171.8 KB、运行时 29.7 KB、每组件 217 KB。
108
+
109
+ ## 差距从何而来?全局实例 vs 编译后的字典
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
+ > 若还想丢弃未使用的语言,在 `intlayer.config.ts` 中设置 `dictionary.importMode: 'dynamic'`。参见 [bundle 优化文档](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
+ 在你自己为消息 schema 定义类型之前,`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 的 API,获得 Intlayer 的输出
316
+
317
+ `@intlayer/vue-i18n` 是一个即插即用的适配器:`useI18n()`、`t()`、`d()`、`n()`、`{name}` 和 `{0}` 插值、管道复数(`"car | cars"`)、`v-t` 和 `i18n.global.locale` 都继续工作,但由 `vite-intlayer` 编译的 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 KB 降到 47.0 KB**,每组件从 **196 KB 降到 8.4 KB**,组件未做改动。通过 JSON 同步插件,你现有的 `locales/{locale}.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。如果 bundle 体积很重要,请预留时间来拆分目录并按路由懒加载。
336
+ - **选择 Intlayer**,如果你想要**按组件作用域的内容**、**严格的 TypeScript**、**构建时的缺失键错误**、**零成本的 tree-shaking 和懒加载**,以及内置的编辑工具(可视化编辑器、CMS、AI 翻译、MCP 服务器)。对大型模块化 Vue / Nuxt 代码库和设计系统尤其适用。
337
+ - **选择 `@intlayer/vue-i18n`**,如果你已经在用 `vue-i18n`,想在不重写的情况下获得 bundle 收益。
338
+
339
+ ## 相关对比
340
+
341
+ - [next-intl vs Intlayer](https://intlayer.org/blog/next-intl-vs-intlayer)(同一基准测试)
342
+ - [i18next vs Intlayer](https://intlayer.org/blog/i18next-vs-intlayer)(同一基准测试)
343
+ - [Lingui vs Intlayer](https://intlayer.org/blog/lingui-vs-intlayer)(同一基准测试)
344
+ - [vue-i18n vs Intlayer(功能与 DX)](https://intlayer.org/blog/vue-i18n-vs-intlayer)
345
+ - [vue-i18n 过时了吗?](https://intlayer.org/blog/is-vue-i18n-outdated)
346
+
347
+ ## GitHub Star
348
+
349
+ GitHub star 是项目受欢迎程度、社区信任度和长期相关性的有力指标。虽然不是技术质量的直接衡量,但它反映了有多少开发者认为该项目有用、关注其进展并可能采用它。
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 KB gzip 的运行时**,一个无 i18n 时仅 41 KB 的应用**每页 134.9 KB**,每个页面上 **90% 是其他页面的内容**,以及每个都达到 **196 KB** 的组件,因为它们挂在全局消息树上。
356
+
357
+ Intlayer 把工作移进编译器。按组件的字典和无用内容清除是构建产物,而不是约定。在同一应用上:**3.9 KB 运行时**、**每页 57.1 KB**、**0% 页面泄漏**、组件**小 25 倍**。如果重写不在考虑之列,`@intlayer/vue-i18n` 可以在不改动组件的情况下走完大部分路程。
358
+
359
+ 所有原始数据、测试应用和脚本都在 [Benchmark Bloom 仓库](https://github.com/intlayer-org/benchmark-bloom)中。自己跑一遍吧。
360
+
361
+ 更多细节请参阅[“为什么选择 Intlayer?”文档](https://intlayer.org/doc/why)。
@@ -274,6 +274,26 @@ const docsEntry = {
274
274
  vi: readLocale("bundle_optimization.md", "vi"),
275
275
  uk: readLocale("bundle_optimization.md", "uk")
276
276
  },
277
+ "./docs/en/chrome_extension.md": {
278
+ en: readLocale("chrome_extension.md", "en"),
279
+ es: readLocale("chrome_extension.md", "es"),
280
+ ru: readLocale("chrome_extension.md", "ru"),
281
+ ja: readLocale("chrome_extension.md", "ja"),
282
+ fr: readLocale("chrome_extension.md", "fr"),
283
+ ko: readLocale("chrome_extension.md", "ko"),
284
+ zh: readLocale("chrome_extension.md", "zh"),
285
+ de: readLocale("chrome_extension.md", "de"),
286
+ ar: readLocale("chrome_extension.md", "ar"),
287
+ it: readLocale("chrome_extension.md", "it"),
288
+ "en-GB": readLocale("chrome_extension.md", "en-GB"),
289
+ pt: readLocale("chrome_extension.md", "pt"),
290
+ hi: readLocale("chrome_extension.md", "hi"),
291
+ tr: readLocale("chrome_extension.md", "tr"),
292
+ pl: readLocale("chrome_extension.md", "pl"),
293
+ id: readLocale("chrome_extension.md", "id"),
294
+ vi: readLocale("chrome_extension.md", "vi"),
295
+ uk: readLocale("chrome_extension.md", "uk")
296
+ },
277
297
  "./docs/en/cli/build.md": {
278
298
  en: readLocale("cli/build.md", "en"),
279
299
  es: readLocale("cli/build.md", "es"),
@@ -454,6 +474,26 @@ const docsEntry = {
454
474
  vi: readLocale("cli/index.md", "vi"),
455
475
  uk: readLocale("cli/index.md", "uk")
456
476
  },
477
+ "./docs/en/cli/infra.md": {
478
+ en: readLocale("cli/infra.md", "en"),
479
+ es: readLocale("cli/infra.md", "es"),
480
+ ru: readLocale("cli/infra.md", "ru"),
481
+ ja: readLocale("cli/infra.md", "ja"),
482
+ fr: readLocale("cli/infra.md", "fr"),
483
+ ko: readLocale("cli/infra.md", "ko"),
484
+ zh: readLocale("cli/infra.md", "zh"),
485
+ de: readLocale("cli/infra.md", "de"),
486
+ ar: readLocale("cli/infra.md", "ar"),
487
+ it: readLocale("cli/infra.md", "it"),
488
+ "en-GB": readLocale("cli/infra.md", "en-GB"),
489
+ pt: readLocale("cli/infra.md", "pt"),
490
+ hi: readLocale("cli/infra.md", "hi"),
491
+ tr: readLocale("cli/infra.md", "tr"),
492
+ pl: readLocale("cli/infra.md", "pl"),
493
+ id: readLocale("cli/infra.md", "id"),
494
+ vi: readLocale("cli/infra.md", "vi"),
495
+ uk: readLocale("cli/infra.md", "uk")
496
+ },
457
497
  "./docs/en/cli/init.md": {
458
498
  en: readLocale("cli/init.md", "en"),
459
499
  es: readLocale("cli/init.md", "es"),
@@ -1754,26 +1794,6 @@ const docsEntry = {
1754
1794
  vi: readLocale("intlayer_with_astro_svelte.md", "vi"),
1755
1795
  uk: readLocale("intlayer_with_astro_svelte.md", "uk")
1756
1796
  },
1757
- "./docs/en/intlayer_with_astro_vanilla.md": {
1758
- en: readLocale("intlayer_with_astro_vanilla.md", "en"),
1759
- es: readLocale("intlayer_with_astro_vanilla.md", "es"),
1760
- ru: readLocale("intlayer_with_astro_vanilla.md", "ru"),
1761
- ja: readLocale("intlayer_with_astro_vanilla.md", "ja"),
1762
- fr: readLocale("intlayer_with_astro_vanilla.md", "fr"),
1763
- ko: readLocale("intlayer_with_astro_vanilla.md", "ko"),
1764
- zh: readLocale("intlayer_with_astro_vanilla.md", "zh"),
1765
- de: readLocale("intlayer_with_astro_vanilla.md", "de"),
1766
- ar: readLocale("intlayer_with_astro_vanilla.md", "ar"),
1767
- it: readLocale("intlayer_with_astro_vanilla.md", "it"),
1768
- "en-GB": readLocale("intlayer_with_astro_vanilla.md", "en-GB"),
1769
- pt: readLocale("intlayer_with_astro_vanilla.md", "pt"),
1770
- hi: readLocale("intlayer_with_astro_vanilla.md", "hi"),
1771
- tr: readLocale("intlayer_with_astro_vanilla.md", "tr"),
1772
- pl: readLocale("intlayer_with_astro_vanilla.md", "pl"),
1773
- id: readLocale("intlayer_with_astro_vanilla.md", "id"),
1774
- vi: readLocale("intlayer_with_astro_vanilla.md", "vi"),
1775
- uk: readLocale("intlayer_with_astro_vanilla.md", "uk")
1776
- },
1777
1797
  "./docs/en/intlayer_with_astro_vue.md": {
1778
1798
  en: readLocale("intlayer_with_astro_vue.md", "en"),
1779
1799
  es: readLocale("intlayer_with_astro_vue.md", "es"),
@@ -4594,26 +4614,6 @@ const docsEntry = {
4594
4614
  vi: readLocale("releases/v9.md", "vi"),
4595
4615
  uk: readLocale("releases/v9.md", "uk")
4596
4616
  },
4597
- "./docs/en/roadmap.md": {
4598
- en: readLocale("roadmap.md", "en"),
4599
- es: readLocale("roadmap.md", "es"),
4600
- ru: readLocale("roadmap.md", "ru"),
4601
- ja: readLocale("roadmap.md", "ja"),
4602
- fr: readLocale("roadmap.md", "fr"),
4603
- ko: readLocale("roadmap.md", "ko"),
4604
- zh: readLocale("roadmap.md", "zh"),
4605
- de: readLocale("roadmap.md", "de"),
4606
- ar: readLocale("roadmap.md", "ar"),
4607
- it: readLocale("roadmap.md", "it"),
4608
- "en-GB": readLocale("roadmap.md", "en-GB"),
4609
- pt: readLocale("roadmap.md", "pt"),
4610
- hi: readLocale("roadmap.md", "hi"),
4611
- tr: readLocale("roadmap.md", "tr"),
4612
- pl: readLocale("roadmap.md", "pl"),
4613
- id: readLocale("roadmap.md", "id"),
4614
- vi: readLocale("roadmap.md", "vi"),
4615
- uk: readLocale("roadmap.md", "uk")
4616
- },
4617
4617
  "./docs/en/self_hosting.md": {
4618
4618
  en: readLocale("self_hosting.md", "en"),
4619
4619
  es: readLocale("self_hosting.md", "es"),