@intlayer/docs 9.5.6 → 9.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (643) hide show
  1. package/blog/ar/i18next_vs_intlayer-i18next.md +122 -15
  2. package/blog/ar/i18next_vs_intlayer.md +130 -16
  3. package/blog/ar/is_intlayer_lighter_than_paraglide.md +284 -0
  4. package/blog/ar/lingui_vs_intlayer.md +122 -15
  5. package/blog/ar/next-intl_vs_intlayer-next-intl.md +124 -15
  6. package/blog/ar/next-intl_vs_intlayer.md +136 -20
  7. package/blog/ar/vue-i18n_vs_intlayer-vue-i18n.md +119 -17
  8. package/blog/ar/vue-i18n_vs_intlayer.md +193 -31
  9. package/blog/ar/vue-i18n_vs_intlayer_benchmark.md +361 -0
  10. package/blog/de/i18next_vs_intlayer-i18next.md +122 -15
  11. package/blog/de/i18next_vs_intlayer.md +128 -14
  12. package/blog/de/is_intlayer_lighter_than_paraglide.md +284 -0
  13. package/blog/de/lingui_vs_intlayer.md +122 -15
  14. package/blog/de/next-intl_vs_intlayer-next-intl.md +124 -15
  15. package/blog/de/next-intl_vs_intlayer.md +125 -15
  16. package/blog/de/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  17. package/blog/de/vue-i18n_vs_intlayer.md +193 -31
  18. package/blog/en/i18next_vs_intlayer-i18next.md +121 -14
  19. package/blog/en/i18next_vs_intlayer.md +128 -14
  20. package/blog/en/is_intlayer_lighter_than_paraglide.md +288 -0
  21. package/blog/en/lingui_vs_intlayer.md +124 -15
  22. package/blog/en/next-intl_vs_intlayer-next-intl.md +123 -14
  23. package/blog/en/next-intl_vs_intlayer.md +125 -13
  24. package/blog/en/vue-i18n_vs_intlayer-vue-i18n.md +115 -15
  25. package/blog/en/vue-i18n_vs_intlayer.md +188 -27
  26. package/blog/en-GB/i18next_vs_intlayer-i18next.md +121 -14
  27. package/blog/en-GB/i18next_vs_intlayer.md +128 -14
  28. package/blog/en-GB/is_intlayer_lighter_than_paraglide.md +285 -0
  29. package/blog/en-GB/lingui_vs_intlayer.md +122 -15
  30. package/blog/en-GB/next-intl_vs_intlayer-next-intl.md +124 -15
  31. package/blog/en-GB/next-intl_vs_intlayer.md +125 -15
  32. package/blog/en-GB/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  33. package/blog/en-GB/vue-i18n_vs_intlayer.md +187 -25
  34. package/blog/en-GB/vue-i18n_vs_intlayer_benchmark.md +116 -0
  35. package/blog/es/i18next_vs_intlayer-i18next.md +122 -15
  36. package/blog/es/i18next_vs_intlayer.md +128 -14
  37. package/blog/es/is_intlayer_lighter_than_paraglide.md +284 -0
  38. package/blog/es/lingui_vs_intlayer.md +122 -15
  39. package/blog/es/next-intl_vs_intlayer-next-intl.md +124 -15
  40. package/blog/es/next-intl_vs_intlayer.md +125 -15
  41. package/blog/es/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  42. package/blog/es/vue-i18n_vs_intlayer.md +193 -31
  43. package/blog/fr/i18next_vs_intlayer-i18next.md +122 -15
  44. package/blog/fr/i18next_vs_intlayer.md +128 -14
  45. package/blog/fr/is_intlayer_lighter_than_paraglide.md +284 -0
  46. package/blog/fr/lingui_vs_intlayer.md +122 -15
  47. package/blog/fr/next-intl_vs_intlayer-next-intl.md +124 -15
  48. package/blog/fr/next-intl_vs_intlayer.md +127 -15
  49. package/blog/fr/vue-i18n_vs_intlayer-vue-i18n.md +118 -17
  50. package/blog/fr/vue-i18n_vs_intlayer.md +192 -31
  51. package/blog/fr/vue-i18n_vs_intlayer_benchmark.md +329 -7
  52. package/blog/hi/i18next_vs_intlayer-i18next.md +122 -15
  53. package/blog/hi/i18next_vs_intlayer.md +130 -16
  54. package/blog/hi/is_intlayer_lighter_than_paraglide.md +284 -0
  55. package/blog/hi/lingui_vs_intlayer.md +122 -15
  56. package/blog/hi/next-intl_vs_intlayer-next-intl.md +124 -15
  57. package/blog/hi/next-intl_vs_intlayer.md +135 -19
  58. package/blog/hi/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  59. package/blog/hi/vue-i18n_vs_intlayer.md +193 -31
  60. package/blog/hi/vue-i18n_vs_intlayer_benchmark.md +361 -0
  61. package/blog/id/i18next_vs_intlayer-i18next.md +122 -15
  62. package/blog/id/i18next_vs_intlayer.md +128 -14
  63. package/blog/id/is_intlayer_lighter_than_paraglide.md +284 -0
  64. package/blog/id/lingui_vs_intlayer.md +122 -15
  65. package/blog/id/next-intl_vs_intlayer-next-intl.md +124 -15
  66. package/blog/id/next-intl_vs_intlayer.md +135 -19
  67. package/blog/id/vue-i18n_vs_intlayer-vue-i18n.md +354 -2
  68. package/blog/id/vue-i18n_vs_intlayer.md +188 -26
  69. package/blog/id/vue-i18n_vs_intlayer_benchmark.md +327 -7
  70. package/blog/it/i18next_vs_intlayer-i18next.md +122 -15
  71. package/blog/it/i18next_vs_intlayer.md +128 -14
  72. package/blog/it/is_intlayer_lighter_than_paraglide.md +284 -0
  73. package/blog/it/lingui_vs_intlayer.md +122 -15
  74. package/blog/it/next-intl_vs_intlayer-next-intl.md +124 -15
  75. package/blog/it/next-intl_vs_intlayer.md +125 -15
  76. package/blog/it/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  77. package/blog/it/vue-i18n_vs_intlayer.md +191 -31
  78. package/blog/it/vue-i18n_vs_intlayer_benchmark.md +332 -5
  79. package/blog/ja/i18next_vs_intlayer-i18next.md +122 -15
  80. package/blog/ja/i18next_vs_intlayer.md +129 -17
  81. package/blog/ja/is_intlayer_lighter_than_paraglide.md +284 -0
  82. package/blog/ja/lingui_vs_intlayer.md +122 -15
  83. package/blog/ja/next-intl_vs_intlayer-next-intl.md +124 -15
  84. package/blog/ja/next-intl_vs_intlayer.md +124 -14
  85. package/blog/ja/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  86. package/blog/ja/vue-i18n_vs_intlayer.md +193 -31
  87. package/blog/ja/vue-i18n_vs_intlayer_benchmark.md +361 -0
  88. package/blog/ko/i18next_vs_intlayer-i18next.md +122 -15
  89. package/blog/ko/i18next_vs_intlayer.md +129 -17
  90. package/blog/ko/is_intlayer_lighter_than_paraglide.md +284 -0
  91. package/blog/ko/lingui_vs_intlayer.md +122 -15
  92. package/blog/ko/next-intl_vs_intlayer-next-intl.md +124 -15
  93. package/blog/ko/next-intl_vs_intlayer.md +134 -18
  94. package/blog/ko/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  95. package/blog/ko/vue-i18n_vs_intlayer.md +193 -31
  96. package/blog/pl/i18next_vs_intlayer-i18next.md +122 -15
  97. package/blog/pl/i18next_vs_intlayer.md +128 -14
  98. package/blog/pl/is_intlayer_lighter_than_paraglide.md +284 -0
  99. package/blog/pl/lingui_vs_intlayer.md +122 -15
  100. package/blog/pl/next-intl_vs_intlayer-next-intl.md +124 -15
  101. package/blog/pl/next-intl_vs_intlayer.md +134 -18
  102. package/blog/pl/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  103. package/blog/pl/vue-i18n_vs_intlayer.md +188 -26
  104. package/blog/pl/vue-i18n_vs_intlayer_benchmark.md +361 -0
  105. package/blog/pt/i18next_vs_intlayer-i18next.md +122 -15
  106. package/blog/pt/i18next_vs_intlayer.md +128 -14
  107. package/blog/pt/is_intlayer_lighter_than_paraglide.md +284 -0
  108. package/blog/pt/lingui_vs_intlayer.md +122 -15
  109. package/blog/pt/next-intl_vs_intlayer-next-intl.md +124 -15
  110. package/blog/pt/next-intl_vs_intlayer.md +131 -15
  111. package/blog/pt/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  112. package/blog/pt/vue-i18n_vs_intlayer.md +193 -31
  113. package/blog/pt/vue-i18n_vs_intlayer_benchmark.md +361 -0
  114. package/blog/ru/i18next_vs_intlayer-i18next.md +122 -15
  115. package/blog/ru/i18next_vs_intlayer.md +130 -16
  116. package/blog/ru/is_intlayer_lighter_than_paraglide.md +284 -0
  117. package/blog/ru/lingui_vs_intlayer.md +122 -15
  118. package/blog/ru/next-intl_vs_intlayer-next-intl.md +125 -16
  119. package/blog/ru/next-intl_vs_intlayer.md +123 -13
  120. package/blog/ru/vue-i18n_vs_intlayer-vue-i18n.md +127 -27
  121. package/blog/ru/vue-i18n_vs_intlayer.md +193 -31
  122. package/blog/ru/vue-i18n_vs_intlayer_benchmark.md +326 -19
  123. package/blog/tr/i18next_vs_intlayer-i18next.md +122 -15
  124. package/blog/tr/i18next_vs_intlayer.md +128 -14
  125. package/blog/tr/is_intlayer_lighter_than_paraglide.md +284 -0
  126. package/blog/tr/lingui_vs_intlayer.md +122 -15
  127. package/blog/tr/next-intl_vs_intlayer-next-intl.md +124 -15
  128. package/blog/tr/next-intl_vs_intlayer.md +136 -20
  129. package/blog/tr/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  130. package/blog/tr/vue-i18n_vs_intlayer.md +188 -26
  131. package/blog/tr/vue-i18n_vs_intlayer_benchmark.md +361 -0
  132. package/blog/uk/i18next_vs_intlayer-i18next.md +122 -15
  133. package/blog/uk/i18next_vs_intlayer.md +130 -16
  134. package/blog/uk/is_intlayer_lighter_than_paraglide.md +284 -0
  135. package/blog/uk/lingui_vs_intlayer.md +122 -15
  136. package/blog/uk/next-intl_vs_intlayer-next-intl.md +124 -15
  137. package/blog/uk/next-intl_vs_intlayer.md +135 -19
  138. package/blog/uk/vue-i18n_vs_intlayer-vue-i18n.md +135 -17
  139. package/blog/uk/vue-i18n_vs_intlayer.md +188 -27
  140. package/blog/uk/vue-i18n_vs_intlayer_benchmark.md +361 -0
  141. package/blog/vi/i18next_vs_intlayer-i18next.md +122 -15
  142. package/blog/vi/i18next_vs_intlayer.md +128 -14
  143. package/blog/vi/is_intlayer_lighter_than_paraglide.md +284 -0
  144. package/blog/vi/lingui_vs_intlayer.md +122 -15
  145. package/blog/vi/next-intl_vs_intlayer-next-intl.md +124 -15
  146. package/blog/vi/next-intl_vs_intlayer.md +135 -19
  147. package/blog/vi/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  148. package/blog/vi/vue-i18n_vs_intlayer.md +188 -26
  149. package/blog/vi/vue-i18n_vs_intlayer_benchmark.md +361 -0
  150. package/blog/zh/i18next_vs_intlayer-i18next.md +122 -15
  151. package/blog/zh/i18next_vs_intlayer.md +128 -14
  152. package/blog/zh/is_intlayer_lighter_than_paraglide.md +284 -0
  153. package/blog/zh/lingui_vs_intlayer.md +122 -15
  154. package/blog/zh/next-intl_vs_intlayer-next-intl.md +124 -15
  155. package/blog/zh/next-intl_vs_intlayer.md +125 -15
  156. package/blog/zh/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  157. package/blog/zh/vue-i18n_vs_intlayer.md +192 -31
  158. package/blog/zh/vue-i18n_vs_intlayer_benchmark.md +340 -9
  159. package/dist/cjs/generated/blog.entry.cjs +20 -0
  160. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  161. package/dist/cjs/generated/docs.entry.cjs +60 -40
  162. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  163. package/dist/esm/generated/blog.entry.mjs +20 -0
  164. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  165. package/dist/esm/generated/docs.entry.mjs +60 -40
  166. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  167. package/dist/types/generated/blog.entry.d.ts +1 -0
  168. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  169. package/dist/types/generated/docs.entry.d.ts +3 -2
  170. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  171. package/docs/ar/benchmark/nextjs.md +19 -16
  172. package/docs/ar/benchmark/solid.md +26 -9
  173. package/docs/ar/benchmark/svelte.md +22 -7
  174. package/docs/ar/benchmark/tanstack.md +20 -16
  175. package/docs/ar/benchmark/vue.md +19 -10
  176. package/docs/ar/chrome_extension.md +130 -0
  177. package/docs/ar/cli/index.md +11 -1
  178. package/docs/ar/cli/infra.md +162 -0
  179. package/docs/ar/cli/init.md +24 -1
  180. package/docs/ar/cli/upgrade.md +125 -0
  181. package/docs/ar/dictionary/html.md +173 -5
  182. package/docs/ar/dictionary/markdown.md +263 -1
  183. package/docs/ar/intlayer_with_analog.md +23 -1
  184. package/docs/ar/intlayer_with_angular_19.md +24 -1
  185. package/docs/ar/intlayer_with_angular_21.md +24 -1
  186. package/docs/ar/intlayer_with_astro.md +24 -1
  187. package/docs/ar/intlayer_with_astro_lit.md +25 -1
  188. package/docs/ar/intlayer_with_astro_preact.md +26 -1
  189. package/docs/ar/intlayer_with_astro_react.md +26 -1
  190. package/docs/ar/intlayer_with_astro_solid.md +26 -1
  191. package/docs/ar/intlayer_with_astro_svelte.md +25 -1
  192. package/docs/ar/intlayer_with_astro_vue.md +25 -1
  193. package/docs/ar/intlayer_with_remix_3.md +22 -1
  194. package/docs/ar/self_hosting.md +406 -231
  195. package/docs/de/benchmark/nextjs.md +19 -16
  196. package/docs/de/benchmark/solid.md +26 -9
  197. package/docs/de/benchmark/svelte.md +22 -7
  198. package/docs/de/benchmark/tanstack.md +20 -16
  199. package/docs/de/benchmark/vue.md +19 -10
  200. package/docs/de/chrome_extension.md +130 -0
  201. package/docs/de/cli/index.md +11 -1
  202. package/docs/de/cli/infra.md +162 -0
  203. package/docs/de/cli/init.md +24 -1
  204. package/docs/de/cli/upgrade.md +125 -0
  205. package/docs/de/dictionary/html.md +173 -5
  206. package/docs/de/dictionary/markdown.md +263 -1
  207. package/docs/de/intlayer_with_analog.md +23 -1
  208. package/docs/de/intlayer_with_angular_19.md +24 -1
  209. package/docs/de/intlayer_with_angular_21.md +24 -1
  210. package/docs/de/intlayer_with_astro.md +24 -1
  211. package/docs/de/intlayer_with_astro_lit.md +25 -1
  212. package/docs/de/intlayer_with_astro_preact.md +26 -1
  213. package/docs/de/intlayer_with_astro_react.md +26 -1
  214. package/docs/de/intlayer_with_astro_solid.md +26 -1
  215. package/docs/de/intlayer_with_astro_svelte.md +25 -1
  216. package/docs/de/intlayer_with_astro_vue.md +25 -1
  217. package/docs/de/intlayer_with_remix_3.md +22 -1
  218. package/docs/de/self_hosting.md +404 -227
  219. package/docs/en/agent_skills.md +29 -1
  220. package/docs/en/benchmark/nextjs.md +19 -16
  221. package/docs/en/benchmark/solid.md +26 -9
  222. package/docs/en/benchmark/svelte.md +22 -7
  223. package/docs/en/benchmark/tanstack.md +21 -17
  224. package/docs/en/benchmark/vue.md +20 -11
  225. package/docs/en/chrome_extension.md +130 -0
  226. package/docs/en/cli/index.md +11 -1
  227. package/docs/en/cli/infra.md +175 -0
  228. package/docs/en/cli/init.md +25 -1
  229. package/docs/en/cli/upgrade.md +125 -0
  230. package/docs/en/dictionary/html.md +173 -5
  231. package/docs/en/dictionary/markdown.md +263 -1
  232. package/docs/en/intlayer_with_analog.md +23 -1
  233. package/docs/en/intlayer_with_angular_19.md +24 -1
  234. package/docs/en/intlayer_with_angular_21.md +24 -1
  235. package/docs/en/intlayer_with_astro.md +24 -1
  236. package/docs/en/intlayer_with_astro_lit.md +25 -1
  237. package/docs/en/intlayer_with_astro_preact.md +26 -1
  238. package/docs/en/intlayer_with_astro_react.md +26 -1
  239. package/docs/en/intlayer_with_astro_solid.md +26 -1
  240. package/docs/en/intlayer_with_astro_svelte.md +25 -1
  241. package/docs/en/intlayer_with_astro_vue.md +25 -1
  242. package/docs/en/intlayer_with_remix_3.md +22 -1
  243. package/docs/en/self_hosting.md +418 -176
  244. package/docs/en-GB/benchmark/nextjs.md +19 -16
  245. package/docs/en-GB/benchmark/solid.md +26 -9
  246. package/docs/en-GB/benchmark/svelte.md +22 -7
  247. package/docs/en-GB/benchmark/tanstack.md +20 -16
  248. package/docs/en-GB/benchmark/vue.md +20 -11
  249. package/docs/en-GB/chrome_extension.md +130 -0
  250. package/docs/en-GB/cli/index.md +11 -1
  251. package/docs/en-GB/cli/infra.md +162 -0
  252. package/docs/en-GB/cli/init.md +24 -1
  253. package/docs/en-GB/cli/upgrade.md +125 -0
  254. package/docs/en-GB/dictionary/html.md +173 -5
  255. package/docs/en-GB/dictionary/markdown.md +263 -1
  256. package/docs/en-GB/intlayer_with_analog.md +23 -1
  257. package/docs/en-GB/intlayer_with_angular_19.md +24 -1
  258. package/docs/en-GB/intlayer_with_angular_21.md +24 -1
  259. package/docs/en-GB/intlayer_with_astro.md +24 -1
  260. package/docs/en-GB/intlayer_with_astro_lit.md +25 -1
  261. package/docs/en-GB/intlayer_with_astro_preact.md +26 -1
  262. package/docs/en-GB/intlayer_with_astro_react.md +26 -1
  263. package/docs/en-GB/intlayer_with_astro_solid.md +26 -1
  264. package/docs/en-GB/intlayer_with_astro_svelte.md +25 -1
  265. package/docs/en-GB/intlayer_with_astro_vue.md +25 -1
  266. package/docs/en-GB/intlayer_with_remix_3.md +22 -1
  267. package/docs/en-GB/self_hosting.md +381 -206
  268. package/docs/es/benchmark/nextjs.md +19 -16
  269. package/docs/es/benchmark/solid.md +26 -9
  270. package/docs/es/benchmark/svelte.md +22 -7
  271. package/docs/es/benchmark/tanstack.md +20 -16
  272. package/docs/es/benchmark/vue.md +19 -10
  273. package/docs/es/chrome_extension.md +130 -0
  274. package/docs/es/cli/index.md +11 -1
  275. package/docs/es/cli/infra.md +162 -0
  276. package/docs/es/cli/init.md +24 -1
  277. package/docs/es/cli/upgrade.md +125 -0
  278. package/docs/es/dictionary/html.md +173 -5
  279. package/docs/es/dictionary/markdown.md +263 -1
  280. package/docs/es/intlayer_with_analog.md +23 -1
  281. package/docs/es/intlayer_with_angular_19.md +24 -1
  282. package/docs/es/intlayer_with_angular_21.md +24 -1
  283. package/docs/es/intlayer_with_astro.md +24 -1
  284. package/docs/es/intlayer_with_astro_lit.md +25 -1
  285. package/docs/es/intlayer_with_astro_preact.md +26 -1
  286. package/docs/es/intlayer_with_astro_react.md +26 -1
  287. package/docs/es/intlayer_with_astro_solid.md +26 -1
  288. package/docs/es/intlayer_with_astro_svelte.md +25 -1
  289. package/docs/es/intlayer_with_astro_vue.md +25 -1
  290. package/docs/es/intlayer_with_remix_3.md +22 -1
  291. package/docs/es/self_hosting.md +400 -223
  292. package/docs/fr/benchmark/nextjs.md +19 -16
  293. package/docs/fr/benchmark/solid.md +26 -9
  294. package/docs/fr/benchmark/svelte.md +22 -7
  295. package/docs/fr/benchmark/tanstack.md +20 -16
  296. package/docs/fr/benchmark/vue.md +20 -11
  297. package/docs/fr/chrome_extension.md +130 -0
  298. package/docs/fr/cli/index.md +11 -1
  299. package/docs/fr/cli/infra.md +162 -0
  300. package/docs/fr/cli/init.md +24 -1
  301. package/docs/fr/cli/upgrade.md +125 -0
  302. package/docs/fr/dictionary/html.md +173 -5
  303. package/docs/fr/dictionary/markdown.md +265 -4
  304. package/docs/fr/intlayer_with_analog.md +23 -1
  305. package/docs/fr/intlayer_with_angular_19.md +24 -1
  306. package/docs/fr/intlayer_with_angular_21.md +24 -1
  307. package/docs/fr/intlayer_with_astro.md +24 -1
  308. package/docs/fr/intlayer_with_astro_lit.md +25 -1
  309. package/docs/fr/intlayer_with_astro_preact.md +26 -1
  310. package/docs/fr/intlayer_with_astro_react.md +26 -1
  311. package/docs/fr/intlayer_with_astro_solid.md +26 -1
  312. package/docs/fr/intlayer_with_astro_svelte.md +25 -1
  313. package/docs/fr/intlayer_with_astro_vue.md +25 -1
  314. package/docs/fr/intlayer_with_remix_3.md +22 -1
  315. package/docs/fr/self_hosting.md +401 -224
  316. package/docs/hi/benchmark/nextjs.md +19 -16
  317. package/docs/hi/benchmark/solid.md +26 -9
  318. package/docs/hi/benchmark/svelte.md +22 -7
  319. package/docs/hi/benchmark/tanstack.md +20 -16
  320. package/docs/hi/benchmark/vue.md +20 -11
  321. package/docs/hi/chrome_extension.md +130 -0
  322. package/docs/hi/cli/index.md +11 -1
  323. package/docs/hi/cli/infra.md +162 -0
  324. package/docs/hi/cli/init.md +24 -1
  325. package/docs/hi/cli/upgrade.md +125 -0
  326. package/docs/hi/dictionary/html.md +173 -5
  327. package/docs/hi/dictionary/markdown.md +263 -1
  328. package/docs/hi/intlayer_with_analog.md +23 -1
  329. package/docs/hi/intlayer_with_angular_19.md +24 -1
  330. package/docs/hi/intlayer_with_angular_21.md +24 -1
  331. package/docs/hi/intlayer_with_astro.md +24 -1
  332. package/docs/hi/intlayer_with_astro_lit.md +25 -1
  333. package/docs/hi/intlayer_with_astro_preact.md +26 -1
  334. package/docs/hi/intlayer_with_astro_react.md +26 -1
  335. package/docs/hi/intlayer_with_astro_solid.md +26 -1
  336. package/docs/hi/intlayer_with_astro_svelte.md +25 -1
  337. package/docs/hi/intlayer_with_astro_vue.md +25 -1
  338. package/docs/hi/intlayer_with_remix_3.md +22 -1
  339. package/docs/hi/self_hosting.md +409 -235
  340. package/docs/id/benchmark/nextjs.md +19 -16
  341. package/docs/id/benchmark/solid.md +26 -9
  342. package/docs/id/benchmark/svelte.md +22 -7
  343. package/docs/id/benchmark/tanstack.md +20 -16
  344. package/docs/id/benchmark/vue.md +20 -11
  345. package/docs/id/chrome_extension.md +130 -0
  346. package/docs/id/cli/index.md +11 -1
  347. package/docs/id/cli/infra.md +162 -0
  348. package/docs/id/cli/init.md +24 -1
  349. package/docs/id/cli/upgrade.md +125 -0
  350. package/docs/id/dictionary/html.md +173 -5
  351. package/docs/id/dictionary/markdown.md +263 -1
  352. package/docs/id/intlayer_with_analog.md +23 -1
  353. package/docs/id/intlayer_with_angular_19.md +24 -1
  354. package/docs/id/intlayer_with_angular_21.md +24 -1
  355. package/docs/id/intlayer_with_astro.md +24 -1
  356. package/docs/id/intlayer_with_astro_lit.md +25 -1
  357. package/docs/id/intlayer_with_astro_preact.md +26 -1
  358. package/docs/id/intlayer_with_astro_react.md +26 -1
  359. package/docs/id/intlayer_with_astro_solid.md +26 -1
  360. package/docs/id/intlayer_with_astro_svelte.md +25 -1
  361. package/docs/id/intlayer_with_astro_vue.md +25 -1
  362. package/docs/id/intlayer_with_remix_3.md +22 -1
  363. package/docs/id/self_hosting.md +416 -243
  364. package/docs/it/benchmark/nextjs.md +19 -16
  365. package/docs/it/benchmark/solid.md +26 -9
  366. package/docs/it/benchmark/svelte.md +22 -7
  367. package/docs/it/benchmark/tanstack.md +20 -16
  368. package/docs/it/benchmark/vue.md +19 -10
  369. package/docs/it/chrome_extension.md +130 -0
  370. package/docs/it/cli/index.md +11 -1
  371. package/docs/it/cli/infra.md +162 -0
  372. package/docs/it/cli/init.md +24 -1
  373. package/docs/it/cli/upgrade.md +125 -0
  374. package/docs/it/dictionary/html.md +173 -5
  375. package/docs/it/dictionary/markdown.md +263 -1
  376. package/docs/it/intlayer_with_analog.md +23 -1
  377. package/docs/it/intlayer_with_angular_19.md +24 -1
  378. package/docs/it/intlayer_with_angular_21.md +24 -1
  379. package/docs/it/intlayer_with_astro.md +24 -1
  380. package/docs/it/intlayer_with_astro_lit.md +25 -1
  381. package/docs/it/intlayer_with_astro_preact.md +26 -1
  382. package/docs/it/intlayer_with_astro_react.md +26 -1
  383. package/docs/it/intlayer_with_astro_solid.md +26 -1
  384. package/docs/it/intlayer_with_astro_svelte.md +25 -1
  385. package/docs/it/intlayer_with_astro_vue.md +25 -1
  386. package/docs/it/intlayer_with_remix_3.md +22 -1
  387. package/docs/it/self_hosting.md +412 -237
  388. package/docs/ja/benchmark/nextjs.md +19 -16
  389. package/docs/ja/benchmark/solid.md +26 -9
  390. package/docs/ja/benchmark/svelte.md +22 -7
  391. package/docs/ja/benchmark/tanstack.md +18 -14
  392. package/docs/ja/benchmark/vue.md +19 -10
  393. package/docs/ja/chrome_extension.md +130 -0
  394. package/docs/ja/cli/index.md +11 -1
  395. package/docs/ja/cli/infra.md +162 -0
  396. package/docs/ja/cli/init.md +24 -1
  397. package/docs/ja/cli/upgrade.md +125 -0
  398. package/docs/ja/dictionary/html.md +173 -5
  399. package/docs/ja/dictionary/markdown.md +263 -1
  400. package/docs/ja/intlayer_with_analog.md +23 -1
  401. package/docs/ja/intlayer_with_angular_19.md +24 -1
  402. package/docs/ja/intlayer_with_angular_21.md +24 -1
  403. package/docs/ja/intlayer_with_astro.md +24 -1
  404. package/docs/ja/intlayer_with_astro_lit.md +25 -1
  405. package/docs/ja/intlayer_with_astro_preact.md +26 -1
  406. package/docs/ja/intlayer_with_astro_react.md +26 -1
  407. package/docs/ja/intlayer_with_astro_solid.md +26 -1
  408. package/docs/ja/intlayer_with_astro_svelte.md +25 -1
  409. package/docs/ja/intlayer_with_astro_vue.md +25 -1
  410. package/docs/ja/intlayer_with_remix_3.md +22 -1
  411. package/docs/ja/self_hosting.md +398 -223
  412. package/docs/ko/benchmark/nextjs.md +19 -16
  413. package/docs/ko/benchmark/solid.md +26 -9
  414. package/docs/ko/benchmark/svelte.md +22 -7
  415. package/docs/ko/benchmark/tanstack.md +20 -16
  416. package/docs/ko/benchmark/vue.md +20 -11
  417. package/docs/ko/chrome_extension.md +130 -0
  418. package/docs/ko/cli/index.md +11 -1
  419. package/docs/ko/cli/infra.md +162 -0
  420. package/docs/ko/cli/init.md +24 -1
  421. package/docs/ko/cli/upgrade.md +126 -0
  422. package/docs/ko/dictionary/html.md +173 -5
  423. package/docs/ko/dictionary/markdown.md +263 -1
  424. package/docs/ko/intlayer_with_analog.md +23 -1
  425. package/docs/ko/intlayer_with_angular_19.md +24 -1
  426. package/docs/ko/intlayer_with_angular_21.md +24 -1
  427. package/docs/ko/intlayer_with_astro.md +24 -1
  428. package/docs/ko/intlayer_with_astro_lit.md +25 -1
  429. package/docs/ko/intlayer_with_astro_preact.md +26 -1
  430. package/docs/ko/intlayer_with_astro_react.md +26 -1
  431. package/docs/ko/intlayer_with_astro_solid.md +26 -1
  432. package/docs/ko/intlayer_with_astro_svelte.md +25 -1
  433. package/docs/ko/intlayer_with_astro_vue.md +25 -1
  434. package/docs/ko/intlayer_with_remix_3.md +22 -1
  435. package/docs/ko/self_hosting.md +411 -238
  436. package/docs/pl/benchmark/nextjs.md +19 -16
  437. package/docs/pl/benchmark/solid.md +26 -9
  438. package/docs/pl/benchmark/svelte.md +22 -7
  439. package/docs/pl/benchmark/tanstack.md +20 -16
  440. package/docs/pl/benchmark/vue.md +20 -11
  441. package/docs/pl/chrome_extension.md +130 -0
  442. package/docs/pl/cli/index.md +11 -1
  443. package/docs/pl/cli/infra.md +162 -0
  444. package/docs/pl/cli/init.md +24 -1
  445. package/docs/pl/cli/upgrade.md +125 -0
  446. package/docs/pl/dictionary/html.md +173 -5
  447. package/docs/pl/dictionary/markdown.md +263 -1
  448. package/docs/pl/intlayer_with_analog.md +23 -1
  449. package/docs/pl/intlayer_with_angular_19.md +24 -1
  450. package/docs/pl/intlayer_with_angular_21.md +24 -1
  451. package/docs/pl/intlayer_with_astro.md +24 -1
  452. package/docs/pl/intlayer_with_astro_lit.md +25 -1
  453. package/docs/pl/intlayer_with_astro_preact.md +26 -1
  454. package/docs/pl/intlayer_with_astro_react.md +26 -1
  455. package/docs/pl/intlayer_with_astro_solid.md +26 -1
  456. package/docs/pl/intlayer_with_astro_svelte.md +25 -1
  457. package/docs/pl/intlayer_with_astro_vue.md +25 -1
  458. package/docs/pl/intlayer_with_remix_3.md +22 -1
  459. package/docs/pl/self_hosting.md +408 -233
  460. package/docs/pt/benchmark/nextjs.md +19 -16
  461. package/docs/pt/benchmark/solid.md +26 -9
  462. package/docs/pt/benchmark/svelte.md +22 -7
  463. package/docs/pt/benchmark/tanstack.md +20 -16
  464. package/docs/pt/benchmark/vue.md +19 -10
  465. package/docs/pt/chrome_extension.md +130 -0
  466. package/docs/pt/cli/index.md +11 -1
  467. package/docs/pt/cli/infra.md +162 -0
  468. package/docs/pt/cli/init.md +24 -1
  469. package/docs/pt/cli/upgrade.md +125 -0
  470. package/docs/pt/dictionary/html.md +173 -5
  471. package/docs/pt/dictionary/markdown.md +263 -1
  472. package/docs/pt/intlayer_with_analog.md +23 -1
  473. package/docs/pt/intlayer_with_angular_19.md +24 -1
  474. package/docs/pt/intlayer_with_angular_21.md +24 -1
  475. package/docs/pt/intlayer_with_astro.md +24 -1
  476. package/docs/pt/intlayer_with_astro_lit.md +25 -1
  477. package/docs/pt/intlayer_with_astro_preact.md +26 -1
  478. package/docs/pt/intlayer_with_astro_react.md +26 -1
  479. package/docs/pt/intlayer_with_astro_solid.md +26 -1
  480. package/docs/pt/intlayer_with_astro_svelte.md +25 -1
  481. package/docs/pt/intlayer_with_astro_vue.md +25 -1
  482. package/docs/pt/intlayer_with_remix_3.md +22 -1
  483. package/docs/pt/self_hosting.md +399 -224
  484. package/docs/ru/benchmark/nextjs.md +19 -16
  485. package/docs/ru/benchmark/solid.md +26 -9
  486. package/docs/ru/benchmark/svelte.md +22 -7
  487. package/docs/ru/benchmark/tanstack.md +20 -16
  488. package/docs/ru/benchmark/vue.md +20 -11
  489. package/docs/ru/chrome_extension.md +130 -0
  490. package/docs/ru/cli/index.md +11 -1
  491. package/docs/ru/cli/infra.md +162 -0
  492. package/docs/ru/cli/init.md +24 -1
  493. package/docs/ru/cli/upgrade.md +125 -0
  494. package/docs/ru/dictionary/html.md +173 -5
  495. package/docs/ru/dictionary/markdown.md +263 -1
  496. package/docs/ru/intlayer_with_analog.md +23 -1
  497. package/docs/ru/intlayer_with_angular_19.md +24 -1
  498. package/docs/ru/intlayer_with_angular_21.md +24 -1
  499. package/docs/ru/intlayer_with_astro.md +24 -1
  500. package/docs/ru/intlayer_with_astro_lit.md +25 -1
  501. package/docs/ru/intlayer_with_astro_preact.md +26 -1
  502. package/docs/ru/intlayer_with_astro_react.md +26 -1
  503. package/docs/ru/intlayer_with_astro_solid.md +26 -1
  504. package/docs/ru/intlayer_with_astro_svelte.md +25 -1
  505. package/docs/ru/intlayer_with_astro_vue.md +25 -1
  506. package/docs/ru/intlayer_with_remix_3.md +22 -1
  507. package/docs/ru/self_hosting.md +403 -228
  508. package/docs/tr/benchmark/nextjs.md +19 -16
  509. package/docs/tr/benchmark/solid.md +26 -9
  510. package/docs/tr/benchmark/svelte.md +22 -7
  511. package/docs/tr/benchmark/tanstack.md +20 -16
  512. package/docs/tr/benchmark/vue.md +20 -11
  513. package/docs/tr/chrome_extension.md +130 -0
  514. package/docs/tr/cli/index.md +11 -1
  515. package/docs/tr/cli/infra.md +162 -0
  516. package/docs/tr/cli/init.md +24 -1
  517. package/docs/tr/cli/upgrade.md +125 -0
  518. package/docs/tr/dictionary/html.md +173 -5
  519. package/docs/tr/dictionary/markdown.md +263 -1
  520. package/docs/tr/intlayer_with_analog.md +23 -1
  521. package/docs/tr/intlayer_with_angular_19.md +24 -1
  522. package/docs/tr/intlayer_with_angular_21.md +24 -1
  523. package/docs/tr/intlayer_with_astro.md +24 -1
  524. package/docs/tr/intlayer_with_astro_lit.md +25 -1
  525. package/docs/tr/intlayer_with_astro_preact.md +26 -1
  526. package/docs/tr/intlayer_with_astro_react.md +26 -1
  527. package/docs/tr/intlayer_with_astro_solid.md +26 -1
  528. package/docs/tr/intlayer_with_astro_svelte.md +25 -1
  529. package/docs/tr/intlayer_with_astro_vue.md +25 -1
  530. package/docs/tr/intlayer_with_remix_3.md +22 -1
  531. package/docs/tr/self_hosting.md +410 -234
  532. package/docs/uk/benchmark/nextjs.md +19 -16
  533. package/docs/uk/benchmark/solid.md +26 -9
  534. package/docs/uk/benchmark/svelte.md +22 -7
  535. package/docs/uk/benchmark/tanstack.md +20 -16
  536. package/docs/uk/benchmark/vue.md +20 -11
  537. package/docs/uk/chrome_extension.md +130 -0
  538. package/docs/uk/cli/index.md +11 -1
  539. package/docs/uk/cli/infra.md +162 -0
  540. package/docs/uk/cli/init.md +24 -1
  541. package/docs/uk/cli/upgrade.md +125 -0
  542. package/docs/uk/dictionary/html.md +173 -5
  543. package/docs/uk/dictionary/markdown.md +263 -1
  544. package/docs/uk/intlayer_with_analog.md +23 -1
  545. package/docs/uk/intlayer_with_angular_19.md +24 -1
  546. package/docs/uk/intlayer_with_angular_21.md +24 -1
  547. package/docs/uk/intlayer_with_astro.md +24 -1
  548. package/docs/uk/intlayer_with_astro_lit.md +25 -1
  549. package/docs/uk/intlayer_with_astro_preact.md +26 -1
  550. package/docs/uk/intlayer_with_astro_react.md +26 -1
  551. package/docs/uk/intlayer_with_astro_solid.md +26 -1
  552. package/docs/uk/intlayer_with_astro_svelte.md +25 -1
  553. package/docs/uk/intlayer_with_astro_vue.md +25 -1
  554. package/docs/uk/intlayer_with_remix_3.md +22 -1
  555. package/docs/uk/self_hosting.md +413 -238
  556. package/docs/vi/benchmark/nextjs.md +19 -16
  557. package/docs/vi/benchmark/solid.md +26 -9
  558. package/docs/vi/benchmark/svelte.md +22 -7
  559. package/docs/vi/benchmark/tanstack.md +20 -16
  560. package/docs/vi/benchmark/vue.md +20 -11
  561. package/docs/vi/chrome_extension.md +130 -0
  562. package/docs/vi/cli/index.md +11 -1
  563. package/docs/vi/cli/infra.md +162 -0
  564. package/docs/vi/cli/init.md +24 -1
  565. package/docs/vi/cli/upgrade.md +125 -0
  566. package/docs/vi/dictionary/html.md +173 -5
  567. package/docs/vi/dictionary/markdown.md +263 -1
  568. package/docs/vi/intlayer_with_analog.md +23 -1
  569. package/docs/vi/intlayer_with_angular_19.md +24 -1
  570. package/docs/vi/intlayer_with_angular_21.md +24 -1
  571. package/docs/vi/intlayer_with_astro.md +24 -1
  572. package/docs/vi/intlayer_with_astro_lit.md +25 -1
  573. package/docs/vi/intlayer_with_astro_preact.md +26 -1
  574. package/docs/vi/intlayer_with_astro_react.md +26 -1
  575. package/docs/vi/intlayer_with_astro_solid.md +26 -1
  576. package/docs/vi/intlayer_with_astro_svelte.md +25 -1
  577. package/docs/vi/intlayer_with_astro_vue.md +25 -1
  578. package/docs/vi/intlayer_with_remix_3.md +22 -1
  579. package/docs/vi/self_hosting.md +408 -234
  580. package/docs/zh/benchmark/nextjs.md +19 -16
  581. package/docs/zh/benchmark/solid.md +26 -9
  582. package/docs/zh/benchmark/svelte.md +22 -7
  583. package/docs/zh/benchmark/tanstack.md +19 -15
  584. package/docs/zh/benchmark/vue.md +20 -11
  585. package/docs/zh/chrome_extension.md +130 -0
  586. package/docs/zh/cli/index.md +11 -1
  587. package/docs/zh/cli/infra.md +162 -0
  588. package/docs/zh/cli/init.md +24 -1
  589. package/docs/zh/cli/upgrade.md +125 -0
  590. package/docs/zh/dictionary/html.md +172 -5
  591. package/docs/zh/dictionary/markdown.md +262 -1
  592. package/docs/zh/intlayer_with_analog.md +23 -1
  593. package/docs/zh/intlayer_with_angular_19.md +24 -1
  594. package/docs/zh/intlayer_with_angular_21.md +24 -1
  595. package/docs/zh/intlayer_with_astro.md +24 -1
  596. package/docs/zh/intlayer_with_astro_lit.md +25 -1
  597. package/docs/zh/intlayer_with_astro_preact.md +26 -1
  598. package/docs/zh/intlayer_with_astro_react.md +26 -1
  599. package/docs/zh/intlayer_with_astro_solid.md +26 -1
  600. package/docs/zh/intlayer_with_astro_svelte.md +25 -1
  601. package/docs/zh/intlayer_with_astro_vue.md +25 -1
  602. package/docs/zh/intlayer_with_remix_3.md +22 -1
  603. package/docs/zh/self_hosting.md +410 -237
  604. package/legal/ar/privacy_notice.md +9 -3
  605. package/legal/de/privacy_notice.md +9 -3
  606. package/legal/en/privacy_notice.md +10 -3
  607. package/legal/en-GB/privacy_notice.md +9 -3
  608. package/legal/es/privacy_notice.md +9 -3
  609. package/legal/fr/privacy_notice.md +9 -3
  610. package/legal/hi/privacy_notice.md +9 -3
  611. package/legal/id/privacy_notice.md +9 -3
  612. package/legal/it/privacy_notice.md +9 -3
  613. package/legal/ja/privacy_notice.md +9 -3
  614. package/legal/ko/privacy_notice.md +9 -3
  615. package/legal/pl/privacy_notice.md +9 -3
  616. package/legal/pt/privacy_notice.md +9 -3
  617. package/legal/ru/privacy_notice.md +9 -3
  618. package/legal/tr/privacy_notice.md +9 -3
  619. package/legal/uk/privacy_notice.md +9 -3
  620. package/legal/vi/privacy_notice.md +9 -3
  621. package/legal/zh/privacy_notice.md +9 -3
  622. package/package.json +6 -6
  623. package/src/generated/blog.entry.ts +20 -0
  624. package/src/generated/docs.entry.ts +60 -40
  625. package/docs/ar/roadmap.md +0 -321
  626. package/docs/de/roadmap.md +0 -322
  627. package/docs/en/intlayer_with_astro_vanilla.md +0 -713
  628. package/docs/en/roadmap.md +0 -325
  629. package/docs/en-GB/roadmap.md +0 -322
  630. package/docs/es/roadmap.md +0 -322
  631. package/docs/fr/roadmap.md +0 -322
  632. package/docs/hi/roadmap.md +0 -322
  633. package/docs/id/roadmap.md +0 -325
  634. package/docs/it/roadmap.md +0 -322
  635. package/docs/ja/roadmap.md +0 -322
  636. package/docs/ko/roadmap.md +0 -322
  637. package/docs/pl/roadmap.md +0 -325
  638. package/docs/pt/roadmap.md +0 -322
  639. package/docs/ru/roadmap.md +0 -322
  640. package/docs/tr/roadmap.md +0 -325
  641. package/docs/uk/roadmap.md +0 -325
  642. package/docs/vi/roadmap.md +0 -325
  643. package/docs/zh/roadmap.md +0 -322
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-04-20
3
- updatedAt: 2026-09-11
3
+ updatedAt: 2026-09-23
4
4
  title: Giải pháp i18n tốt nhất cho Next.js năm 2026 - Báo cáo Benchmark
5
5
  description: So sánh các thư viện quốc tế hóa (i18n) cho Next.js như next-intl, next-i18next và Intlayer. Báo cáo hiệu năng chi tiết về kích thước bundle bundle, rò rỉ dữ liệu và tính phản ứng.
6
6
  keywords:
@@ -17,6 +17,9 @@ slugs:
17
17
  author: aymericzip
18
18
  applicationTemplate: https://github.com/intlayer-org/benchmark-i18n
19
19
  history:
20
+ - version: 9.5.7
21
+ date: 2026-09-23
22
+ changes: "Cập nhật kết quả benchmark"
20
23
  - version: 9.5.1
21
24
  date: 2026-09-11
22
25
  changes: "Cập nhật kết quả benchmark"
@@ -112,19 +115,19 @@ Cuối cùng, `Intlayer` áp dụng một tối ưu hóa tại thời điểm bu
112
115
  Đối với benchmark này, chúng tôi đã so sánh các thư viện sau:
113
116
 
114
117
  - `Base App` (Không sử dụng thư viện i18n)
115
- - `next-intlayer` (v9.5.1)
116
- - [`@intlayer/next-intl`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/compat/next-intl.md) (v9.5.1)
117
- - [`@intlayer/next-i18next`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/compat/next-i18next.md) (v9.5.1)
118
- - `next-i18next` (v16.3.0)
119
- - `next-intl` (v4.14.2)
120
- - `@lingui/core` (v6.6.0)
121
- - `next-translate` (v3.2.0)
122
- - `next-international` (v1.3.1)
123
- - `@inlang/paraglide-js` (v2.15.1)
124
- - `@tolgee/react` (v7.2.0)
125
- - `@lingo.dev/compiler` (v0.4.12)
126
- - `wuchale` (v0.26.6)
127
- - `gt-next` (v11.1.24)
118
+ - [`next-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/packages/next-intlayer/exports.md) (v9.5.6)
119
+ - [`@intlayer/next-intl`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/compat/next-intl.md) (v9.5.6)
120
+ - [`@intlayer/next-i18next`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/compat/next-i18next.md) (v9.5.6)
121
+ - [`next-i18next`](https://github.com/i18next/next-i18next) (v16.3.0)
122
+ - [`next-intl`](https://github.com/amannn/next-intl) (v4.14.2)
123
+ - [`@lingui/core`](https://github.com/lingui/js-lingui) (v6.6.0)
124
+ - [`next-translate`](https://github.com/aralroca/next-translate) (v3.2.0)
125
+ - [`next-international`](https://github.com/QuiiBz/next-international) (v1.3.1)
126
+ - [`@inlang/paraglide-js`](https://github.com/opral/paraglide-js) (v2.15.1)
127
+ - [`@tolgee/react`](https://github.com/tolgee/tolgee-js) (v7.2.0)
128
+ - [`@lingo.dev/compiler`](https://github.com/lingodotdev/lingo.dev) (v0.4.12)
129
+ - [`wuchale`](https://github.com/wuchalejs/wuchale) (v0.26.6)
130
+ - [`gt-next`](https://github.com/generaltranslation/gt) (v11.1.24)
128
131
 
129
132
  Tôi đã sử dụng phiên bản `Next.js` `16.3.4` với App Router.
130
133
 
@@ -213,7 +216,7 @@ Cuối cùng, so với các giải pháp khác, Paraglide không sử dụng sto
213
216
 
214
217
  **(Tolgee)** (`@tolgee/react@7.2.0`):
215
218
 
216
- `Tolgee` giải quyết được nhiều vấn đề đã đề cập trước đó. Tôi thấy việc áp dụng nó khó hơn so với các công cụ tương tự. Nó không cung cấp tính an toàn kiểu dữ liệu (type safety), điều này cũng khiến việc phát hiện các khóa bị thiếu tại thời điểm biên dịch trở nên khó khăn hơn. Tôi đã phải bao bọc các hàm của Tolgee bằng các hàm của riêng mình để thêm tính năng phát hiện khóa bị thiếu.
219
+ `Tolgee` giải quyết được nhiều vấn đề đã đề cập trước đó. Tôi thấy việc áp dụng nó khó hơn so với các công cụ tương tự. Nó không cung cấp tính an toàn kiểu dữ liệu (type safety), điều này cũng khiến việc phát hiện các khóa bị thiếu tại thời điểm biên dịch trở nên khó khăn hơn. Tôi đã phải bao bọc các hàm của Tolgee bằng các hàm của riêng mình để thêm tính năng phát hiện khóa bị thiếu. Gói này cũng tương đối nặng (~14.3kb, gấp khoảng 2.8 lần `next-intlayer`).
217
220
 
218
221
  **(Next Intl)** (`next-intl@4.14.2`):
219
222
 
@@ -239,7 +242,7 @@ Các định dạng thông báo cũng khác nhau: `next-intl` sử dụng ICU Me
239
242
 
240
243
  `next-translate` là khuyến nghị chính của tôi nếu bạn thích một API theo kiểu `t()`. Nó vận hành thanh thoát thông qua `next-translate-plugin`, tải các namespace qua `getStaticProps` với một trình tải Webpack / Turbopack. Nó cũng là một trong những tùy chọn nhẹ nhất ở đây (~3.5kb). Đối với việc phân namespace, việc định nghĩa các namespace theo từng trang hoặc route trong cấu hình được cân nhắc kỹ lưỡng và dễ bảo trì hơn so với các lựa chọn thay thế chính như **next-intl** hay **next-i18next**. Ở phiên bản `3.1.2`, tôi nhận thấy rằng việc render tĩnh không hoạt động; Next.js đã quay trở lại việc render động.
241
244
 
242
- **(Intlayer)** (`next-intlayer@9.5.1`):
245
+ **(Intlayer)** (`next-intlayer@9.5.6`):
243
246
 
244
247
  Tôi sẽ không đích thân đánh giá `next-intlayer` vì tính khách quan, vì đây là giải pháp của riêng tôi.
245
248
 
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  createdAt: 2026-04-20
3
- updatedAt: 2026-09-11
3
+ updatedAt: 2026-09-23
4
4
  title: Giải pháp i18n tốt nhất cho Solid năm 2026 - Báo cáo Benchmark
5
- description: So sánh các thư viện quốc tế hóa (i18n) Solid như solid-primitives, solid-i18next và Intlayer. Báo cáo hiệu suất chi tiết về kích thước bundle, rò rỉ và tính phản ứng.
5
+ description: So sánh các thư viện quốc tế hóa (i18n) Solid như solid-primitives, solid-i18next, Tolgee và Intlayer. Báo cáo hiệu suất chi tiết về kích thước bundle, rò rỉ và tính phản ứng.
6
6
  keywords:
7
7
  - benchmark
8
8
  - i18n
@@ -17,6 +17,9 @@ slugs:
17
17
  author: aymericzip
18
18
  applicationTemplate: https://github.com/intlayer-org/benchmark-i18n-solid-template
19
19
  history:
20
+ - version: 9.5.7
21
+ date: 2026-09-23
22
+ changes: "Cập nhật kết quả benchmark"
20
23
  - version: 9.5.1
21
24
  date: 2026-09-11
22
25
  changes: "Cập nhật kết quả benchmark"
@@ -65,9 +68,10 @@ Tác động khác là đối với trải nghiệm nhà phát triển (DX): cá
65
68
 
66
69
  ## TL;DR
67
70
 
68
- - **Intlayer**: Lựa chọn được đề xuất cho các ứng dụng Solid chuyên nghiệp cần các tính năng nâng cao và tối ưu hóa (v9.5.0).
71
+ - **Intlayer**: Lựa chọn được đề xuất cho các ứng dụng Solid chuyên nghiệp cần các tính năng nâng cao và tối ưu hóa (v9.5.6).
69
72
  - **@solid-primitives/i18n**: Giải pháp thay thế gọn nhẹ tuyệt vời cho các dự án đơn giản, mặc dù thiếu các tính năng nâng cao như lazy loading.
70
73
  - **solid-i18next**: Tùy chọn tiêu chuẩn nhưng nặng (~3.5 lần Intlayer) với các nhược điểm tương tự như React i18next.
74
+ - **Tolgee**: Nền tảng dịch thuật giàu tính năng, nhưng khá nặng (~12.7kb, gấp khoảng 3.0 lần Intlayer), thiếu các primitive Solid chuyên dụng (dựa vào @tolgee/web), và trong cấu hình tĩnh có thể rò rỉ bản dịch giữa các trang (90% rò rỉ trang).
71
75
  - **Paraglide**: Cách tiếp cận sáng tạo nhưng DX phức tạp và vấn đề tree-shaking trong một số thiết lập.
72
76
 
73
77
  ## Kiểm tra ứng dụng của bạn
@@ -100,10 +104,11 @@ Các cú pháp được xây dựng xung quanh `t('a.b.c')` rất tiện lợi n
100
104
  Đối với benchmark này, chúng tôi đã so sánh các thư viện sau:
101
105
 
102
106
  - `Base App` (Không có thư viện i18n)
103
- - `solid-intlayer` (v9.5.0)
104
- - `@solid-primitives/i18n` (v2.2.1)
105
- - `i18next` (v26.0.8) + `@mbarzda/solid-i18next` (v1.4.1)
106
- - `@inlang/paraglide-js` (v2.25.1)
107
+ - [`solid-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/packages/solid-intlayer/exports.md) (v9.5.6)
108
+ - [`@solid-primitives/i18n`](https://github.com/solidjs-community/solid-primitives/tree/main/packages/i18n) (v2.2.1)
109
+ - [`i18next`](https://github.com/i18next/i18next) (v26.0.8) + [`@mbarzda/solid-i18next`](https://github.com/mbarzda/solid-i18next) (v1.4.1)
110
+ - [`@tolgee/web`](https://github.com/tolgee/tolgee-js) (v7.2.0)
111
+ - [`@inlang/paraglide-js`](https://github.com/opral/paraglide-js) (v2.25.1)
107
112
 
108
113
  Framework là `Solid` với một ứng dụng đa ngôn ngữ gồm **10 trang** và **10 ngôn ngữ**.
109
114
 
@@ -147,7 +152,7 @@ Tôi chạy cùng một ứng dụng đa ngôn ngữ trong trình duyệt thực
147
152
 
148
153
  Sao GitHub là một chỉ số mạnh mẽ về mức độ phổ biến của dự án, sự tin tưởng của cộng đồng và mức độ phù hợp lâu dài. Mặc dù không phải là thước đo trực tiếp về chất lượng kỹ thuật, chúng phản ánh số lượng nhà phát triển thấy dự án hữu ích, theo dõi tiến trình của nó và có khả năng áp dụng nó. Để ước tính giá trị của một dự án, các ngôi sao giúp so sánh sức hút giữa các lựa chọn thay thế và cung cấp thông tin chi tiết về sự phát triển của hệ sinh thái.
149
154
 
150
- [![Star History Chart](https://api.star-history.com/chart?repos=solidjs-community%2Fsolid-primitives%2Cmbarzda%2Fsolid-i18next%2Copral%2Fparaglide-js%2Caymericzip%2Fintlayer&type=date&legend=top-left)](https://star-history.com/#solidjs-community/solid-primitives&mbarzda/solid-i18next&opral/paraglide-js&aymericzip/intlayer)
155
+ [![Star History Chart](https://api.star-history.com/chart?repos=solidjs-community%2Fsolid-primitives%2Cmbarzda%2Fsolid-i18next%2Copral%2Fparaglide-js%2Ctolgee%2Ftolgee-js%2Caymericzip%2Fintlayer&type=date&legend=top-left)](https://star-history.com/#solidjs-community/solid-primitives&mbarzda/solid-i18next&opral/paraglide-js&tolgee/tolgee-js&aymericzip/intlayer)
151
156
 
152
157
  ## Kết quả chi tiết
153
158
 
@@ -170,6 +175,18 @@ Tuy nhiên, nó có cùng những nhược điểm chính như các stack đư
170
175
  Solid primitive cực kỳ nhẹ và hiệu quả. Tôi khuyên dùng giải pháp đó cho các dự án nhẹ, nhưng nó có thể nhanh chóng thiếu các tính năng cho các giải pháp chuyên nghiệp bao gồm quản lý cookie, chuyển hướng proxy, formatter, v.v.
171
176
  Nó cũng thiếu lazy loading và scoping namespace để tối ưu hóa kích thước trang.
172
177
 
178
+ **(Tolgee)** (`@tolgee/web@7.2.0`):
179
+
180
+ `Tolgee` cung cấp một nền tảng quản lý bản dịch toàn diện với các tính năng chỉnh sửa in-context.
181
+
182
+ Trên Solid, hiện tại không có adapter chính thức chuyên dụng (như `@tolgee/solid`), đòi hỏi các nhà phát triển phải tích hợp qua `@tolgee/web` với các signal tùy chỉnh.
183
+
184
+ Gói này tương đối nặng (~12.7kb, gấp khoảng 3.0 lần `solid-intlayer`).
185
+
186
+ Nếu không có cơ chế chia nhỏ theo từng trang trong Solid, tất cả các bản dịch sẽ được tải vào bộ nhớ ngay từ đầu trong cấu hình tĩnh. Điều này dẫn đến tình trạng rò rỉ bundle nghiêm trọng (44.5% rò rỉ ngôn ngữ, 90.0% rò rỉ trang) và kích thước bundle trung bình mỗi trang là ~91.8kb (so với ~35.8kb của Intlayer).
187
+
188
+ Khả năng phản ứng khi chuyển đổi ngôn ngữ rất nhanh (0.6ms), phù hợp với tính phản ứng chi tiết của Solid, mặc dù chi phí hydration cao hơn một chút (~5.6ms so với ~3.0ms của Intlayer).
189
+
173
190
  **(Paraglide)** (`@inlang/paraglide-js@2.25.1`):
174
191
 
175
192
  `Paraglide` đưa ra một cách tiếp cận sáng tạo, được cân nhắc kỹ lưỡng. Mặc dù vậy, trong benchmark này, tree-shaking mà công ty họ quảng cáo đã không hoạt động cho triển khai của tôi. Workflow và DX cũng phức tạp hơn các tùy chọn khác.
@@ -178,7 +195,7 @@ Cuối cùng, so với các giải pháp khác, Paraglide không sử dụng sto
178
195
 
179
196
  ### 3 - Khuyến nghị
180
197
 
181
- **(Intlayer)** (`solid-intlayer@9.5.0`):
198
+ **(Intlayer)** (`solid-intlayer@9.5.6`):
182
199
 
183
200
  Tôi sẽ không đích thân đánh giá `solid-intlayer` vì tính khách quan, vì đó là giải pháp của chính tôi.
184
201
 
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  createdAt: 2026-04-20
3
- updatedAt: 2026-09-11
3
+ updatedAt: 2026-09-23
4
4
  title: Giải pháp i18n tốt nhất cho Svelte năm 2026 - Báo cáo Benchmark
5
- description: So sánh các thư viện quốc tế hóa (i18n) Svelte như svelte-i18n, Paraglide và Intlayer. Báo cáo hiệu suất chi tiết về kích thước bundle, rò rỉ và tính phản ứng.
5
+ description: So sánh các thư viện quốc tế hóa (i18n) Svelte như svelte-i18n, Paraglide, Tolgee và Intlayer. Báo cáo hiệu suất chi tiết về kích thước bundle, rò rỉ và tính phản ứng.
6
6
  keywords:
7
7
  - benchmark
8
8
  - i18n
@@ -17,6 +17,9 @@ slugs:
17
17
  author: aymericzip
18
18
  applicationTemplate: https://github.com/intlayer-org/benchmark-i18n-svelte-template
19
19
  history:
20
+ - version: 9.5.7
21
+ date: 2026-09-23
22
+ changes: "Update benchmark results"
20
23
  - version: 9.5.1
21
24
  date: 2026-09-11
22
25
  changes: "Cập nhật kết quả benchmark"
@@ -65,8 +68,9 @@ Tác động khác là đối với trải nghiệm nhà phát triển (DX): cá
65
68
 
66
69
  ## TL;DR
67
70
 
68
- - **Intlayer**: Lựa chọn hiệu quả nhất về hiệu suất (v9.5.0) với dấu chân (footprint) nhỏ nhất.
71
+ - **Intlayer**: Lựa chọn hiệu quả nhất về hiệu suất (v9.5.6) với dấu chân (footprint) nhỏ nhất.
69
72
  - **Paraglide**: Đối thủ nặng ký cho tree-shaking nhưng có trải nghiệm nhà phát triển phức tạp hơn và overhead về tính phản ứng.
73
+ - **Tolgee**: Nền tảng dịch thuật giàu tính năng với khả năng chỉnh sửa in-context, nhưng khá nặng (~13.0kb, gấp khoảng 3.6 lần Intlayer), và trong cấu hình tĩnh gây rò rỉ bản dịch đáng kể giữa các trang (90% rò rỉ trang).
70
74
  - **svelte-i18n**: Toàn diện và tiêu chuẩn cho Svelte, nhưng mang trọng lượng bundle lớn hơn nhiều (~4.5 lần Intlayer).
71
75
 
72
76
  ## Kiểm tra ứng dụng của bạn
@@ -99,9 +103,10 @@ Các cú pháp được xây dựng xung quanh `t('a.b.c')` rất tiện lợi n
99
103
  Đối với benchmark này, chúng tôi đã so sánh các thư viện sau:
100
104
 
101
105
  - `Base App` (Không có thư viện i18n)
102
- - `svelte-intlayer` (v9.5.0)
103
- - `svelte-i18n` (v4.0.1)
104
- - `@inlang/paraglide-js` (v2.25.1)
106
+ - [`svelte-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/packages/svelte-intlayer/exports.md) (v9.5.6)
107
+ - [`svelte-i18n`](https://github.com/kaisermann/svelte-i18n) (v4.0.1)
108
+ - [`@tolgee/svelte`](https://github.com/tolgee/tolgee-js) (v7.2.1)
109
+ - [`@inlang/paraglide-js`](https://github.com/opral/paraglide-js) (v2.25.1)
105
110
 
106
111
  Framework là `Svelte` với một ứng dụng đa ngôn ngữ gồm **10 trang** và **10 ngôn ngữ**.
107
112
 
@@ -145,7 +150,7 @@ Tôi đã chạy cùng một ứng dụng đa ngôn ngữ trong trình duyệt t
145
150
 
146
151
  Sao GitHub là một chỉ số mạnh mẽ về mức độ phổ biến của dự án, sự tin tưởng của cộng đồng và mức độ phù hợp lâu dài. Mặc dù không phải là thước đo trực tiếp về chất lượng kỹ thuật, chúng phản ánh số lượng nhà phát triển thấy dự án hữu ích, theo dõi tiến trình của nó và có khả năng áp dụng nó. Để ước tính giá trị của một dự án, các ngôi sao giúp so sánh sức hút giữa các lựa chọn thay thế và cung cấp thông tin chi tiết về sự phát triển của hệ sinh thái.
147
152
 
148
- [![Star History Chart](https://api.star-history.com/chart?repos=kaisermann%2Fsvelte-i18n%2Copral%2Fparaglide-js%2Caymericzip%2Fintlayer&type=date&legend=top-left)](https://star-history.com/#kaisermann/svelte-i18n&opral/paraglide-js&aymericzip/intlayer)
153
+ [![Star History Chart](https://api.star-history.com/chart?repos=kaisermann%2Fsvelte-i18n%2Copral%2Fparaglide-js%2Ctolgee%2Ftolgee-js%2Caymericzip%2Fintlayer&type=date&legend=top-left)](https://star-history.com/#kaisermann/svelte-i18n&opral/paraglide-js&tolgee/tolgee-js&aymericzip/intlayer)
149
154
 
150
155
  ## Kết quả chi tiết
151
156
 
@@ -165,6 +170,16 @@ Cuối cùng, so với các giải pháp khác, Paraglide không sử dụng sto
165
170
 
166
171
  > Lưu ý về paraglide: giải pháp này đưa mã vào mã nguồn của bạn cho các import; do đó, chỉ số 'lib size' trong báo cáo benchmark gần như bằng 0. Việc tạo mã (Code generation) là một điều tốt, bởi vì hàm được sử dụng sẽ chỉ bao gồm logic cần thiết (prefix ở mọi nơi so với không prefix, cookie so với storage, v.v.). So với đó, Intlayer thực hiện việc lọc này thông qua việc đưa biến môi trường vào build để buộc bundler thực hiện tree-shaking nội dung tùy thuộc vào logic. Nhờ đó, paraglide và intlayer cuối cùng là các giải pháp nhẹ hơn từ 6 đến 10 lần so với i18next hoặc next-intl.
167
172
 
173
+ **(Tolgee)** (`@tolgee/svelte@7.2.1`):
174
+
175
+ `Tolgee` cung cấp một nền tảng bản địa hóa toàn diện với tính năng chỉnh sửa in-context và tích hợp chính thức cho Svelte thông qua `@tolgee/svelte`.
176
+
177
+ Gói này tương đối nặng (~13.0kb, gấp khoảng 3.6 lần `svelte-intlayer`).
178
+
179
+ Nếu không có cơ chế chia nhỏ theo từng trang trong Svelte, tất cả các bản dịch sẽ được tải vào bộ nhớ ngay từ đầu trong cấu hình tĩnh. Điều này gây ra hiện tượng rò rỉ bundle đáng kể (50.0% rò rỉ ngôn ngữ, 90.0% rò rỉ trang) và kích thước bundle trung bình mỗi trang là ~100.7kb (so với ~59.0kb của Intlayer).
180
+
181
+ Khả năng phản ứng khi chuyển đổi ngôn ngữ rất nhanh (0.5ms), được hưởng lợi từ các store phản ứng của Svelte, mặc dù chi phí hydration cao hơn một chút (~6.2ms so với ~5.5ms của Intlayer).
182
+
168
183
  **(svelte-i18n)** (`svelte-i18n@4.0.1`):
169
184
 
170
185
  Giải pháp này đáp ứng tất cả các nhu cầu i18n trong một dự án Svelte. Nhưng giống như trường hợp của i18next hoặc các giải pháp i18n lớn khác, nó hơi nặng (~16.6kb, gấp khoảng 4.5 lần `svelte-intlayer`).
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-04-20
3
- updatedAt: 2026-09-11
3
+ updatedAt: 2026-09-23
4
4
  title: Giải pháp i18n tốt nhất cho TanStack Start năm 2026 - Báo cáo Benchmark
5
5
  description: So sánh các thư viện quốc tế hóa cho TanStack Start như react-i18next, use-intl và Intlayer. Báo cáo hiệu năng chi tiết về kích thước bundle bundle, rò rỉ dữ liệu và tính phản ứng.
6
6
  keywords:
@@ -17,6 +17,9 @@ slugs:
17
17
  author: aymericzip
18
18
  applicationTemplate: https://github.com/intlayer-org/benchmark-i18n-tanstack-start-template
19
19
  history:
20
+ - version: 9.5.7
21
+ date: 2026-09-23
22
+ changes: "Cập nhật kết quả benchmark"
20
23
  - version: 9.5.1
21
24
  date: 2026-09-11
22
25
  changes: "Cập nhật kết quả benchmark"
@@ -65,7 +68,7 @@ Tác động khác là đối với trải nghiệm phát triển (DX): cách b
65
68
 
66
69
  ## TL;DR
67
70
 
68
- - **Intlayer**: Cung cấp hiệu năng tốt nhất và kích thước bundle nhỏ nhất (v9.5.1) cho TanStack Start.
71
+ - **Intlayer**: Cung cấp hiệu năng tốt nhất và kích thước bundle nhỏ nhất (v9.5.6) cho TanStack Start.
69
72
  - **react-i18next** & **use-intl**: Các lựa chọn thay thế thuần thục với hệ sinh thái lớn, nhưng nặng hơn đáng kể và phức tạp hơn để tối ưu hóa.
70
73
  - **Paraglide**: Ý tưởng tree-shaking sáng tạo nhưng không hoạt động trong thực tế. DX phức tạp và chi phí phản ứng trên TanStack Start.
71
74
  - **Cần tránh**: **General Translation (GT)** và **Lingo.dev** do các vấn đề hiệu năng nghiêm trọng, giới hạn hạn mức AI và bị ràng buộc vào nhà cung cấp (vendor lock-in).
@@ -100,18 +103,19 @@ Các cú pháp được xây dựng xung quanh `const t = useTranslation()` + `t
100
103
  Đối với benchmark này, chúng tôi đã so sánh các thư viện sau:
101
104
 
102
105
  - `Base App` (Không sử dụng thư viện i18n)
103
- - `react-intlayer` (v9.5.1)
104
- - `@intlayer/use-intl` (v9.5.1)
105
- - [`@intlayer/lingui`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/compat/lingui.md) (v9.5.1)
106
- - `react-i18next` (v17.0.13)
107
- - `use-intl` (v4.14.2)
108
- - `@lingui/core` (v6.6.0)
109
- - `@inlang/paraglide-js` (v2.15.1)
110
- - `@tolgee/react` (v7.2.0)
111
- - `react-intl` (v10.1.26)
112
- - `wuchale` (v0.26.6)
113
- - `gt-react` (v10.18.3)
114
- - `lingo.dev` (v0.138.7)
106
+ - [`react-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/packages/react-intlayer/exports.md) (v9.5.6)
107
+ - [`@intlayer/use-intl`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/compat/next-intl.md) (v9.5.6)
108
+ - [`@intlayer/lingui`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/compat/lingui.md) (v9.5.6)
109
+ - [`@intlayer/react-i18next`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/compat/react-i18next.md) (v9.5.6)
110
+ - [`react-i18next`](https://github.com/i18next/react-i18next) (v17.0.13)
111
+ - [`use-intl`](https://github.com/amannn/next-intl/tree/main/packages/use-intl) (v4.14.2)
112
+ - [`@lingui/core`](https://github.com/lingui/js-lingui) (v6.6.0)
113
+ - [`@inlang/paraglide-js`](https://github.com/opral/paraglide-js) (v2.15.1)
114
+ - [`@tolgee/react`](https://github.com/tolgee/tolgee-js) (v7.2.0)
115
+ - [`react-intl`](https://github.com/formatjs/formatjs) (v10.1.26)
116
+ - [`wuchale`](https://github.com/wuchalejs/wuchale) (v0.26.6)
117
+ - [`gt-react`](https://github.com/generaltranslation/gt) (v10.18.3)
118
+ - [`lingo.dev`](https://github.com/lingodotdev/lingo.dev) (v0.138.7)
115
119
 
116
120
  Framework được sử dụng là `TanStack Start` với một ứng dụng đa ngôn ngữ gồm **10 trang** và **10 ngôn ngữ**.
117
121
 
@@ -199,7 +203,7 @@ Các vấn đề gặp phải:
199
203
 
200
204
  `Tolgee` giải quyết được nhiều vấn đề đã đề cập trước đó. Tôi thấy việc bắt đầu với Tolgee khó khăn hơn so với các công cụ khác có phương pháp tiếp cận tương tự. Nó không cung cấp tính an toàn kiểu dữ liệu, điều này cũng khiến việc phát hiện các khóa bị thiếu tại thời điểm biên dịch trở nên khó khăn hơn nhiều. Tôi đã phải bao bọc các API của Tolgee bằng các API của riêng mình để thêm tính năng phát hiện khóa bị thiếu.
201
205
 
202
- Package này khá nặng (~11.1kb, gấp hơn 2× `react-intlayer`).
206
+ Package này khá nặng (~13.8 kb, gấp hơn 2.9× `react-intlayer`).
203
207
 
204
208
  Trên TanStack Start, tôi cũng gặp vấn đề về tính phản ứng: khi ngôn ngữ thay đổi, tôi phải ép buộc provider render lại và đăng ký vào các sự kiện thay đổi ngôn ngữ để việc tải ở một ngôn ngữ khác hoạt động chính xác.
205
209
 
@@ -233,7 +237,7 @@ Package cũng khá nặng (~15.3kb, tức là khoảng 3× `react-intlayer`).
233
237
 
234
238
  Benchmark TanStack Start này không có đối trọng trực tiếp cho `next-translate` (Next.js plugin + `getStaticProps`). Đối với các nhóm thực sự muốn một API `t()` với một hệ sinh thái chín muồi, `react-i18next` và `use-intl` vẫn là những lựa chọn "hợp lý", nhưng hãy chuẩn bị đầu tư nhiều thời gian tối ưu hóa để tránh rò rỉ.
235
239
 
236
- **(Intlayer)** (`react-intlayer@9.5.1`):
240
+ **(Intlayer)** (`react-intlayer@9.5.6`):
237
241
 
238
242
  Tôi sẽ không đích thân đánh giá `react-intlayer` vì tính khách quan, vì đây là giải pháp của riêng tôi.
239
243
 
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  createdAt: 2026-04-20
3
- updatedAt: 2026-09-11
3
+ updatedAt: 2026-09-23
4
4
  title: Giải pháp i18n tốt nhất cho Vue năm 2026 - Báo cáo Benchmark
5
- description: So sánh các thư viện quốc tế hóa (i18n) Vue như vue-i18n, fluent-vue và Intlayer. Báo cáo hiệu suất chi tiết về kích thước bundle, rò rỉ và tính phản ứng.
5
+ description: So sánh các thư viện quốc tế hóa (i18n) Vue như vue-i18n, fluent-vue, Tolgee và Intlayer. Báo cáo hiệu suất chi tiết về kích thước bundle, rò rỉ và tính phản ứng.
6
6
  keywords:
7
7
  - benchmark
8
8
  - i18n
@@ -17,6 +17,9 @@ slugs:
17
17
  author: aymericzip
18
18
  applicationTemplate: https://github.com/intlayer-org/benchmark-i18n-vue-template
19
19
  history:
20
+ - version: 9.5.7
21
+ date: 2026-09-23
22
+ changes: "Cập nhật kết quả benchmark và thêm Tolgee"
20
23
  - version: 9.5.1
21
24
  date: 2026-09-11
22
25
  changes: "Cập nhật kết quả benchmark"
@@ -65,7 +68,8 @@ Tác động khác là đối với trải nghiệm nhà phát triển (DX): cá
65
68
 
66
69
  ## TL;DR
67
70
 
68
- - **Intlayer**: Giải pháp nhẹ nhất (v9.5.0) với tính năng scoping và tải động gốc.
71
+ - **Intlayer**: Giải pháp nhẹ nhất (v9.5.6) với tính năng scoping và tải động gốc.
72
+ - **Tolgee**: Tải động hiệu quả mà không bị rò rỉ trong chế độ động, nhưng nặng hơn (~3.7× Intlayer) và thiếu tính an toàn kiểu dữ liệu lúc biên dịch.
69
73
  - **vue-i18n**: Tiêu chuẩn ngành với hệ sinh thái phong phú, nhưng có thể trở nên nặng hơn đáng kể và khó tối ưu hóa cho code-splitting trong các ứng dụng lớn.
70
74
  - **fluent-vue**: Tổ chức thông báo sáng tạo nhưng thiếu an toàn kiểu (type-safety) và hóa ra là một giải pháp cực kỳ nặng.
71
75
 
@@ -99,10 +103,11 @@ Các cú pháp được xây dựng xung quanh `const { t } = useI18n()` + `t('a
99
103
  Đối với benchmark này, chúng tôi đã so sánh các thư viện sau:
100
104
 
101
105
  - `Base App` (Không có thư viện i18n)
102
- - `vue-intlayer` (v9.5.0)
103
- - [`@intlayer/vue-i18n`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/compat/vue-i18n.md) (v9.5.1)
104
- - `vue-i18n` (v11.4.0)
105
- - `fluent-vue` (v3.8.2)
106
+ - [`vue-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/packages/vue-intlayer/exports.md) (v9.5.6)
107
+ - [`@intlayer/vue-i18n`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/compat/vue-i18n.md) (v9.5.6)
108
+ - [`vue-i18n`](https://github.com/intlify/vue-i18n) (v11.4.0)
109
+ - [`fluent-vue`](https://github.com/fluent-vue/fluent-vue) (v3.8.2)
110
+ - [`@tolgee/vue`](https://github.com/tolgee/tolgee-js) (v7.2.0)
106
111
 
107
112
  Framework là `Vue` với một ứng dụng đa ngôn ngữ gồm **10 trang** và **10 ngôn ngữ**.
108
113
 
@@ -146,7 +151,7 @@ Tôi đã chạy cùng một ứng dụng đa ngôn ngữ trong một trình duy
146
151
 
147
152
  Sao GitHub là một chỉ số mạnh mẽ về mức độ phổ biến của dự án, sự tin tưởng của cộng đồng và mức độ phù hợp lâu dài. Mặc dù không phải là thước đo trực tiếp về chất lượng kỹ thuật, chúng phản ánh số lượng nhà phát triển thấy dự án hữu ích, theo dõi tiến trình của nó và có khả năng áp dụng nó. Để ước tính giá trị của một dự án, các ngôi sao giúp so sánh sức hút giữa các lựa chọn thay thế và cung cấp thông tin chi tiết về sự phát triển của hệ sinh thái.
148
153
 
149
- [![Star History Chart](https://api.star-history.com/chart?repos=intlify%2Fvue-i18n%2Cfluent-vue%2Ffluent-vue%2Caymericzip%2Fintlayer&type=date&legend=top-left)](https://star-history.com/#intlify/vue-i18n&fluent-vue/fluent-vue&aymericzip/intlayer)
154
+ [![Star History Chart](https://api.star-history.com/chart?repos=intlify%2Fvue-i18n%2Cfluent-vue%2Ffluent-vue%2Ctolgee%2Ftolgee-js%2Caymericzip%2Fintlayer&type=date&legend=top-left)](https://star-history.com/#intlify/vue-i18n&fluent-vue/fluent-vue&tolgee/tolgee-js&aymericzip/intlayer)
150
155
 
151
156
  ## Kết quả chi tiết
152
157
 
@@ -156,18 +161,22 @@ Sao GitHub là một chỉ số mạnh mẽ về mức độ phổ biến của
156
161
 
157
162
  ### 2 - Các giải pháp chấp nhận được
158
163
 
164
+ **(Tolgee)** (`@tolgee/vue@7.2.0`):
165
+
166
+ `Tolgee` giải quyết nhiều vấn đề đã đề cập trước đó, cung cấp khả năng tải động giúp loại bỏ thành công rò rỉ ngôn ngữ và trang (giảm dung lượng JS của trang xuống còn khoảng 58.8kb). Tuy nhiên, nó không cung cấp tính an toàn kiểu dữ liệu lúc biên dịch cho các khóa, khiến việc phát hiện các khóa bị thiếu trở nên khó khăn hơn. Ngoài ra, kích thước thư viện tương đối nặng (~13.8kb, gấp khoảng 3.7 lần `vue-intlayer`).
167
+
159
168
  **(vue-i18n)** (`vue-i18n@11.4.0`):
160
169
 
161
170
  - **vue-i18n** chắc chắn là thư viện i18n được sử dụng nhiều nhất cho Vue, nó có rất nhiều tính năng và một hệ sinh thái khổng lồ. Nhưng thực tế giải pháp này khá nặng. Ngay cả khi vue-i18n tích hợp lazy loading cho các tin nhắn, nó vẫn thiếu tính năng scoping. Trong trường hợp ứng dụng Vue SPA cổ điển thì không có vấn đề gì, nhưng đối với ứng dụng Nuxt, sử dụng @nuxt/i18n, nó dẫn đến việc bao gồm tin nhắn từ tất cả các trang vào một trang duy nhất. Đối với một ứng dụng Nuxt lớn bao gồm hơn 10 trang, nó có thể trở nên thực sự rắc rối.
162
171
 
163
- Package này rất nặng (~24.3kb, gấp khoảng 6 lần `vue-intlayer`).
172
+ Package này rất nặng (~24.1 kb, gấp khoảng 6.5 lần `vue-intlayer`).
164
173
 
165
174
  **(fluent-vue)** (`fluent-vue@3.8.2`):
166
175
 
167
- - **fluent-vue** đưa ra một nỗ lực đổi mới thông qua định dạng .ftl. Tổ chức tin nhắn tuyệt vời, dễ dàng bắt đầu hơn. Nhưng trong thực tế, việc thiếu an toàn kiểu làm tăng rủi ro lỗi và có thể nhanh chóng trở nên tốn thời gian để debug. Hơn nữa, giải pháp đó tải các tin nhắn bằng một plugin vite bắt buộc tải tất cả nội dung ở tất cả các ngôn ngữ vào mỗi trang. Ngoài ra, đây là một giải pháp cực kỳ nặng (~29.7kb, gấp khoảng 7.5 lần `vue-intlayer`).
176
+ - **fluent-vue** đưa ra một nỗ lực đổi mới thông qua định dạng .ftl. Tổ chức tin nhắn tuyệt vời, dễ dàng bắt đầu hơn. Nhưng trong thực tế, việc thiếu an toàn kiểu làm tăng rủi ro lỗi và có thể nhanh chóng trở nên tốn thời gian để debug. Hơn nữa, giải pháp đó tải các tin nhắn bằng một plugin vite bắt buộc tải tất cả nội dung ở tất cả các ngôn ngữ vào mỗi trang. Ngoài ra, đây là một giải pháp cực kỳ nặng (~29.7kb, gấp khoảng 8 lần `vue-intlayer`).
168
177
 
169
178
  ### 3 - Khuyến nghị
170
179
 
171
- **(Intlayer)** (`vue-intlayer@9.5.0`):
180
+ **(Intlayer)** (`vue-intlayer@9.5.6`):
172
181
 
173
182
  Tôi sẽ không đích thân đánh giá `vue-intlayer` vì tính khách quan, vì đó là giải pháp của chính tôi.
@@ -0,0 +1,130 @@
1
+ ---
2
+ createdAt: 2026-09-22
3
+ updatedAt: 2026-09-22
4
+ title: Tiện ích mở rộng Chrome & Firefox, Trình quét i18n & SEO
5
+ description: Kiểm tra cấu hình i18n của bất kỳ trang web nào bằng tiện ích mở rộng Intlayer cho Chrome. Phát hiện framework, thư viện i18n, ngôn ngữ, thẻ hreflang và SEO, đồng thời chạy kiểm tra toàn diện i18n SEO.
6
+ keywords:
7
+ - Tiện ích mở rộng Chrome
8
+ - Trình quét i18n
9
+ - Kiểm tra hreflang
10
+ - SEO đa ngôn ngữ
11
+ - Intlayer
12
+ - Bản địa hóa
13
+ - Công cụ phát triển
14
+ slugs:
15
+ - doc
16
+ - chrome-extension
17
+ history:
18
+ - version: 9.5.6
19
+ date: 2026-09-22
20
+ changes: "Khởi tạo lịch sử"
21
+ author: aymericzip
22
+ ---
23
+
24
+ # Tiện ích mở rộng Chrome & Firefox: Trình quét i18n & SEO
25
+
26
+ ## Tổng quan
27
+
28
+ [**Intlayer i18n Scanner**](https://chromewebstore.google.com/detail/intlayer_i18n_scanner/pmlehcgmjmfimmjnembihbakhnheiabc) là tiện ích mở rộng Chrome chính thức dành cho **Intlayer**. Mở tiện ích trên bất kỳ trang web nào để xem cách trang web đó xử lý quốc tế hóa: sử dụng framework và thư viện i18n nào, hỗ trợ những ngôn ngữ (locales) nào và liệu các thẻ SEO đa ngôn ngữ đã được thiết lập chính xác hay chưa.
29
+
30
+ Tiện ích hoạt động trên mọi trang web, cho dù trang web đó có sử dụng Intlayer hay không.
31
+
32
+ ![Tiện ích mở rộng Intlayer cho Chrome](https://github.com/aymericzip/intlayer/blob/main/docs/assets/chrome_extension.png?raw=true)
33
+
34
+ [Liên kết tiện ích Chrome](https://chromewebstore.google.com/detail/intlayer_i18n_scanner/pmlehcgmjmfimmjnembihbakhnheiabc)
35
+
36
+ [Liên kết tiện ích Firefox](https://addons.mozilla.org/en-US/firefox/addon/intlayer-i18n-scanner/)
37
+
38
+ ## Tính năng
39
+
40
+ - **Phát hiện công nghệ**: nhận diện framework (Next.js, Nuxt, Astro, SvelteKit, Angular, Vue.js, Qwik, React, Gatsby, WordPress) và thư viện i18n (Intlayer, i18next, Vue I18n, @nuxtjs/i18n, Angular @angular/localize, next-intl / next-i18next, Weglot, Localize, WPML, Polylang). Mỗi phát hiện sẽ hiển thị bằng chứng kích hoạt nó, chẳng hạn như biến toàn cục (global variable), cookie hoặc dấu hiệu DOM.
41
+ - **Ngôn ngữ (Locales)**: liệt kê các ngôn ngữ được tìm thấy trong thuộc tính `lang`, thẻ hreflang và `og:locale`, tiền tố ngôn ngữ trên URL, cùng với cookie hoặc mục lưu trữ ngôn ngữ.
42
+ - **Thẻ SEO i18n**: kiểm tra `html lang`, `html dir`, liên kết chuẩn (canonical), thẻ hreflang, `x-default`, `og:locale` và tỷ lệ các liên kết nội bộ được bản địa hóa.
43
+ - **Điều hướng giữa các locale**: chuyển trang hiện tại sang bất kỳ phiên bản bản địa hóa nào chỉ với một cú nhấp, dựa trên các thẻ hreflang.
44
+ - **Tìm kiếm trong sitemap**: tìm kiếm mọi trang được liệt kê trong sitemap của trang web và mở trang đó trong tab hiện tại.
45
+ - **Kiểm tra toàn diện**: chạy cùng một quy trình kiểm tra như [Trình quét SEO i18n](https://intlayer.org/i18n-seo-scanner) và hiển thị điểm số trực tiếp.
46
+
47
+ ## Cài đặt
48
+
49
+ <Tabs group="browser">
50
+ <Tab label="Chrome" value="chrome">
51
+
52
+ Cài đặt [**Intlayer i18n Scanner**](https://chromewebstore.google.com/detail/intlayer_i18n_scanner/pmlehcgmjmfimmjnembihbakhnheiabc) từ Chrome Web Store, sau đó ghim tiện ích vào thanh công cụ của bạn.
53
+
54
+ Tiện ích mở rộng hoạt động trên Chrome và bất kỳ trình duyệt dựa trên Chromium nào hỗ trợ các tiện ích mở rộng của Chrome Web Store (Edge, Brave, Arc, Opera).
55
+
56
+ </Tab>
57
+ <Tab label="Firefox" value="firefox">
58
+
59
+ Cài đặt [**Intlayer i18n Scanner**](https://addons.mozilla.org/en-US/firefox/addon/intlayer-i18n-scanner/) từ Firefox Add-ons, sau đó ghim tiện ích vào thanh công cụ của bạn.
60
+
61
+ </Tab>
62
+ </Tabs>
63
+
64
+ ## Sử dụng
65
+
66
+ ### Kiểm tra một trang
67
+
68
+ 1. Mở trang web bạn muốn kiểm tra.
69
+ 2. Nhấp vào biểu tượng **Intlayer i18n Scanner** trên thanh công cụ.
70
+ 3. Cửa sổ bật lên sẽ hiển thị các phần **Công nghệ được phát hiện**, **Ngôn ngữ** và **Thẻ SEO i18n** cho trang hiện tại.
71
+
72
+ Quá trình phát hiện chạy cục bộ trong trình duyệt của bạn và chỉ trên tab hiện tại.
73
+
74
+ ### Điều hướng giữa các locale
75
+
76
+ ![Điều hướng của tiện ích mở rộng Intlayer cho Chrome](https://github.com/aymericzip/intlayer/blob/main/docs/assets/chrome_extension_navigation.png?raw=true)
77
+
78
+ Phần **Điều hướng** liệt kê các **Phiên bản bản địa hóa** của trang hiện tại, được đọc từ các thẻ hreflang của trang. Nhấp vào một locale để mở phiên bản đó trong tab hiện tại.
79
+
80
+ Trong **Các trang trong sitemap**, nhập để tìm kiếm các URL trong sitemap của trang web, rồi nhấp vào một kết quả để mở.
81
+
82
+ ### Chạy kiểm tra toàn diện
83
+
84
+ ![Điểm kiểm tra của tiện ích mở rộng Intlayer cho Chrome](https://github.com/aymericzip/intlayer/blob/main/docs/assets/chrome_extension_audit_score.png?raw=true)
85
+
86
+ Cuộn xuống phần **Kiểm tra toàn diện** và nhấp vào **Chạy kiểm tra i18n toàn diện**. Kết quả sẽ hiển thị ngay khi từng mục kiểm tra hoàn tất, được nhóm thành:
87
+
88
+ - **Trang**: thuộc tính `html lang` và `dir`, ngôn ngữ hiện tại, thẻ hreflang, `x-default`, liên kết canonical, liên kết nội bộ được bản địa hóa, bộ chọn ngôn ngữ, biểu tượng cờ và nội dung ngôn ngữ không sử dụng được đính kèm trong bundle JavaScript.
89
+ - **Robots.txt**: sự hiện diện và kiểm tra xem các đường dẫn ngôn ngữ có thể thu thập dữ liệu (crawlable) hay không.
90
+ - **Sitemap**: sự hiện diện, danh sách từng ngôn ngữ, liên kết thay thế và `x-default`.
91
+ - **Tên miền**: số lượng ngôn ngữ được phát hiện trên toàn bộ trang web.
92
+
93
+ Mỗi mục kiểm tra được đánh dấu là đạt, cảnh báo hoặc không đạt, và điểm số sẽ tóm tắt tình trạng SEO i18n tổng thể của trang.
94
+
95
+ ## Quyền riêng tư và cấp phép
96
+
97
+ Tiện ích mở rộng chỉ yêu cầu các quyền tối thiểu:
98
+
99
+ - **activeTab** và **scripting**: bộ phát hiện chỉ chạy trên tab bạn đang xem và chỉ khi bạn mở cửa sổ bật lên.
100
+ - **back.intlayer.org**: chỉ được sử dụng khi bạn chạy kiểm tra toàn diện. URL của trang hiện tại sẽ được gửi đến Intlayer API để quét.
101
+
102
+ Không có lịch sử duyệt web nào được thu thập và không có gì chạy ngầm.
103
+
104
+ ## Câu hỏi thường gặp
105
+
106
+ <FAQ>
107
+
108
+ <Question title="Trang web có cần phải sử dụng Intlayer không?">
109
+
110
+ Không. Tiện ích có thể kiểm tra bất kỳ trang web nào, bất kể trang đó sử dụng framework hay thư viện i18n nào.
111
+
112
+ </Question>
113
+ <Question title="Tại sao một công nghệ không được phát hiện?">
114
+
115
+ Việc phát hiện dựa trên những gì trang web hiển thị trong trình duyệt: biến toàn cục, cookie, thẻ meta và dấu hiệu DOM. Một số bản build production sẽ loại bỏ các dấu hiệu này, vì vậy một thư viện có thể đang được sử dụng mà không để lại dấu vết rõ ràng.
116
+
117
+ </Question>
118
+ <Question title="Làm cách nào để khắc phục các vấn đề phát hiện bởi kiểm tra?">
119
+
120
+ Hầu hết các mục kiểm tra đều tương ứng với cấu hình định tuyến hoặc siêu dữ liệu. Với Intlayer, hreflang, canonical, `x-default`, liên kết bản địa hóa, sitemap và robots.txt được tạo tự động từ [cấu hình](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/configuration.md) của bạn. Xem hướng dẫn tích hợp cho framework của bạn, ví dụ: [Next.js](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_with_nextjs_16.md), [Nuxt](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_with_nuxt.md) hoặc [TanStack Start](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_with_tanstack.md).
121
+
122
+ </Question>
123
+
124
+ </FAQ>
125
+
126
+ ## Công cụ liên quan
127
+
128
+ - [Tiện ích mở rộng VS Code](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/vs_code_extension.md)
129
+ - [Máy chủ MCP](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/mcp_server.md)
130
+ - [Máy chủ LSP](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/lsp.md)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2024-08-11
3
- updatedAt: 2026-09-12
3
+ updatedAt: 2026-09-23
4
4
  title: CLI - Tất cả các lệnh CLI của Intlayer cho trang web đa ngôn ngữ của bạn
5
5
  description: Tìm hiểu cách sử dụng Intlayer CLI để quản lý trang web đa ngôn ngữ của bạn. Làm theo các bước trong tài liệu trực tuyến này để thiết lập dự án của bạn trong vài phút.
6
6
  keywords:
@@ -17,6 +17,12 @@ slugs:
17
17
  - concept
18
18
  - cli
19
19
  history:
20
+ - version: 9.5.8
21
+ date: 2026-09-23
22
+ changes: "Thêm lệnh upgrade"
23
+ - version: 9.5.6
24
+ date: 2026-09-21
25
+ changes: "Thêm lệnh init infra"
20
26
  - version: 9.5.2
21
27
  date: 2026-09-12
22
28
  changes: "Thay thế lệnh `ci` bằng cờ `--ci`"
@@ -151,6 +157,8 @@ Intlayer chấp nhận nhiều định dạng tệp cấu hình khác nhau:
151
157
  ### Cấu hình
152
158
 
153
159
  - **[Khởi tạo Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/cli/init.md)** - Thiết lập Intlayer trong dự án của bạn với cấu hình tự động
160
+ - **[Thiết lập cơ sở hạ tầng](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/cli/infra.md)** - Cài đặt ứng dụng máy tính để bàn hoặc tự lưu trữ CMS với Docker (tất cả trong một hoặc Compose)
161
+ - **[Nâng cấp các gói Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/cli/upgrade.md)** - Liệt kê các gói Intlayer trong mỗi `package.json` và nâng cấp chúng lên phiên bản mới nhất
154
162
  - **[Quản lý cấu hình](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/cli/configuration.md)** - Nhận cấu hình Intlayer của bạn và đẩy lên CMS
155
163
 
156
164
  ### Quản lý tài liệu
@@ -177,6 +185,8 @@ Intlayer chấp nhận nhiều định dạng tệp cấu hình khác nhau:
177
185
  ```json fileName="package.json"
178
186
  "scripts": {
179
187
  "intlayer:init": "npx intlayer init",
188
+ "intlayer:infra": "npx intlayer init infra",
189
+ "intlayer:upgrade": "npx intlayer upgrade",
180
190
  "intlayer:login": "npx intlayer login",
181
191
  "intlayer:build": "npx intlayer build",
182
192
  "intlayer:watch": "npx intlayer build --watch",