@intlayer/docs 9.5.1 → 9.5.3

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 (997) hide show
  1. package/README.md +1 -1
  2. package/blog/ar/history_of_i18n.md +304 -0
  3. package/blog/ar/i18next_vs_intlayer-i18next.md +327 -0
  4. package/blog/ar/i18next_vs_intlayer.md +445 -0
  5. package/blog/ar/is_i18next_outdated.md +1 -1
  6. package/blog/ar/is_next-intl_outdated.md +1 -1
  7. package/blog/ar/is_vue-i18n_outdated.md +1 -1
  8. package/blog/ar/lingui_vs_intlayer-lingui.md +304 -0
  9. package/blog/ar/lingui_vs_intlayer.md +381 -0
  10. package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
  11. package/blog/ar/next-intl_vs_intlayer-next-intl.md +309 -0
  12. package/blog/ar/next-intl_vs_intlayer.md +397 -0
  13. package/blog/ar/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
  14. package/blog/ar/vue-i18n_vs_intlayer-vue-i18n.md +286 -0
  15. package/blog/ar/vue-i18n_vs_intlayer_benchmark.md +0 -0
  16. package/blog/de/history_of_i18n.md +304 -0
  17. package/blog/de/i18next_vs_intlayer-i18next.md +327 -0
  18. package/blog/de/i18next_vs_intlayer.md +445 -0
  19. package/blog/de/is_i18next_outdated.md +1 -1
  20. package/blog/de/is_next-intl_outdated.md +1 -1
  21. package/blog/de/is_vue-i18n_outdated.md +1 -1
  22. package/blog/de/lingui_vs_intlayer-lingui.md +304 -0
  23. package/blog/de/lingui_vs_intlayer.md +381 -0
  24. package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
  25. package/blog/de/next-intl_vs_intlayer-next-intl.md +309 -0
  26. package/blog/de/next-intl_vs_intlayer.md +415 -0
  27. package/blog/de/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  28. package/blog/de/vue-i18n_vs_intlayer_benchmark.md +355 -0
  29. package/blog/en/history_of_i18n.md +304 -0
  30. package/blog/en/i18next_vs_intlayer-i18next.md +327 -0
  31. package/blog/en/i18next_vs_intlayer.md +445 -0
  32. package/blog/en/is_i18next_outdated.md +1 -1
  33. package/blog/en/is_next-intl_outdated.md +1 -1
  34. package/blog/en/is_vue-i18n_outdated.md +1 -1
  35. package/blog/en/lingui_vs_intlayer-lingui.md +304 -0
  36. package/blog/en/lingui_vs_intlayer.md +381 -0
  37. package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
  38. package/blog/en/next-intl_vs_intlayer-next-intl.md +309 -0
  39. package/blog/en/next-intl_vs_intlayer.md +415 -0
  40. package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
  41. package/blog/en/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  42. package/blog/en/vue-i18n_vs_intlayer.md +1 -1
  43. package/blog/en/vue-i18n_vs_intlayer_benchmark.md +361 -0
  44. package/blog/en-GB/history_of_i18n.md +304 -0
  45. package/blog/en-GB/i18next_vs_intlayer-i18next.md +327 -0
  46. package/blog/en-GB/i18next_vs_intlayer.md +445 -0
  47. package/blog/en-GB/is_i18next_outdated.md +1 -1
  48. package/blog/en-GB/is_next-intl_outdated.md +1 -1
  49. package/blog/en-GB/is_vue-i18n_outdated.md +1 -1
  50. package/blog/en-GB/lingui_vs_intlayer-lingui.md +304 -0
  51. package/blog/en-GB/lingui_vs_intlayer.md +381 -0
  52. package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
  53. package/blog/en-GB/next-intl_vs_intlayer-next-intl.md +309 -0
  54. package/blog/en-GB/next-intl_vs_intlayer.md +415 -0
  55. package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
  56. package/blog/en-GB/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  57. package/blog/en-GB/vue-i18n_vs_intlayer.md +1 -1
  58. package/blog/en-GB/vue-i18n_vs_intlayer_benchmark.md +245 -0
  59. package/blog/es/history_of_i18n.md +304 -0
  60. package/blog/es/i18next_vs_intlayer-i18next.md +327 -0
  61. package/blog/es/i18next_vs_intlayer.md +445 -0
  62. package/blog/es/is_i18next_outdated.md +1 -1
  63. package/blog/es/is_next-intl_outdated.md +1 -1
  64. package/blog/es/is_vue-i18n_outdated.md +1 -1
  65. package/blog/es/lingui_vs_intlayer-lingui.md +304 -0
  66. package/blog/es/lingui_vs_intlayer.md +381 -0
  67. package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
  68. package/blog/es/next-intl_vs_intlayer-next-intl.md +309 -0
  69. package/blog/es/next-intl_vs_intlayer.md +417 -0
  70. package/blog/es/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  71. package/blog/es/vue-i18n_vs_intlayer_benchmark.md +363 -0
  72. package/blog/fr/history_of_i18n.md +304 -0
  73. package/blog/fr/i18next_vs_intlayer-i18next.md +327 -0
  74. package/blog/fr/i18next_vs_intlayer.md +445 -0
  75. package/blog/fr/is_i18next_outdated.md +1 -1
  76. package/blog/fr/is_next-intl_outdated.md +1 -1
  77. package/blog/fr/is_vue-i18n_outdated.md +1 -1
  78. package/blog/fr/lingui_vs_intlayer-lingui.md +304 -0
  79. package/blog/fr/lingui_vs_intlayer.md +381 -0
  80. package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
  81. package/blog/fr/next-intl_vs_intlayer-next-intl.md +309 -0
  82. package/blog/fr/next-intl_vs_intlayer.md +417 -0
  83. package/blog/fr/vue-i18n_vs_intlayer-vue-i18n.md +287 -0
  84. package/blog/fr/vue-i18n_vs_intlayer_benchmark.md +39 -0
  85. package/blog/hi/history_of_i18n.md +304 -0
  86. package/blog/hi/i18next_vs_intlayer-i18next.md +327 -0
  87. package/blog/hi/i18next_vs_intlayer.md +445 -0
  88. package/blog/hi/is_i18next_outdated.md +1 -1
  89. package/blog/hi/is_next-intl_outdated.md +1 -1
  90. package/blog/hi/is_vue-i18n_outdated.md +1 -1
  91. package/blog/hi/lingui_vs_intlayer-lingui.md +304 -0
  92. package/blog/hi/lingui_vs_intlayer.md +381 -0
  93. package/blog/hi/next-intl_vs_intlayer-next-intl.md +309 -0
  94. package/blog/hi/next-intl_vs_intlayer.md +397 -0
  95. package/blog/hi/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
  96. package/blog/hi/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  97. package/blog/hi/vue-i18n_vs_intlayer_benchmark.md +0 -0
  98. package/blog/id/history_of_i18n.md +304 -0
  99. package/blog/id/i18next_vs_intlayer-i18next.md +327 -0
  100. package/blog/id/i18next_vs_intlayer.md +445 -0
  101. package/blog/id/is_i18next_outdated.md +1 -1
  102. package/blog/id/is_next-intl_outdated.md +1 -1
  103. package/blog/id/is_vue-i18n_outdated.md +1 -1
  104. package/blog/id/lingui_vs_intlayer-lingui.md +304 -0
  105. package/blog/id/lingui_vs_intlayer.md +381 -0
  106. package/blog/id/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
  107. package/blog/id/next-intl_vs_intlayer-next-intl.md +310 -0
  108. package/blog/id/next-intl_vs_intlayer.md +397 -0
  109. package/blog/id/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
  110. package/blog/id/vue-i18n_vs_intlayer-vue-i18n.md +36 -0
  111. package/blog/id/vue-i18n_vs_intlayer.md +1 -1
  112. package/blog/id/vue-i18n_vs_intlayer_benchmark.md +41 -0
  113. package/blog/it/history_of_i18n.md +304 -0
  114. package/blog/it/i18next_vs_intlayer-i18next.md +327 -0
  115. package/blog/it/i18next_vs_intlayer.md +445 -0
  116. package/blog/it/is_i18next_outdated.md +1 -1
  117. package/blog/it/is_next-intl_outdated.md +1 -1
  118. package/blog/it/is_vue-i18n_outdated.md +1 -1
  119. package/blog/it/lingui_vs_intlayer-lingui.md +304 -0
  120. package/blog/it/lingui_vs_intlayer.md +381 -0
  121. package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
  122. package/blog/it/next-intl_vs_intlayer-next-intl.md +309 -0
  123. package/blog/it/next-intl_vs_intlayer.md +418 -0
  124. package/blog/it/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  125. package/blog/it/vue-i18n_vs_intlayer_benchmark.md +34 -0
  126. package/blog/ja/history_of_i18n.md +304 -0
  127. package/blog/ja/i18next_vs_intlayer-i18next.md +327 -0
  128. package/blog/ja/i18next_vs_intlayer.md +447 -0
  129. package/blog/ja/is_i18next_outdated.md +1 -1
  130. package/blog/ja/is_next-intl_outdated.md +1 -1
  131. package/blog/ja/is_vue-i18n_outdated.md +1 -1
  132. package/blog/ja/lingui_vs_intlayer-lingui.md +304 -0
  133. package/blog/ja/lingui_vs_intlayer.md +381 -0
  134. package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
  135. package/blog/ja/next-intl_vs_intlayer-next-intl.md +310 -0
  136. package/blog/ja/next-intl_vs_intlayer.md +422 -0
  137. package/blog/ja/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
  138. package/blog/ja/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  139. package/blog/ja/vue-i18n_vs_intlayer.md +1 -1
  140. package/blog/ja/vue-i18n_vs_intlayer_benchmark.md +0 -0
  141. package/blog/ko/history_of_i18n.md +304 -0
  142. package/blog/ko/i18next_vs_intlayer-i18next.md +327 -0
  143. package/blog/ko/i18next_vs_intlayer.md +447 -0
  144. package/blog/ko/is_i18next_outdated.md +1 -1
  145. package/blog/ko/is_next-intl_outdated.md +1 -1
  146. package/blog/ko/is_vue-i18n_outdated.md +1 -1
  147. package/blog/ko/lingui_vs_intlayer-lingui.md +304 -0
  148. package/blog/ko/lingui_vs_intlayer.md +381 -0
  149. package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
  150. package/blog/ko/next-intl_vs_intlayer-next-intl.md +309 -0
  151. package/blog/ko/next-intl_vs_intlayer.md +397 -0
  152. package/blog/ko/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
  153. package/blog/ko/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  154. package/blog/ko/vue-i18n_vs_intlayer.md +1 -1
  155. package/blog/ko/vue-i18n_vs_intlayer_benchmark.md +366 -0
  156. package/blog/pl/history_of_i18n.md +304 -0
  157. package/blog/pl/i18next_vs_intlayer-i18next.md +327 -0
  158. package/blog/pl/i18next_vs_intlayer.md +445 -0
  159. package/blog/pl/is_i18next_outdated.md +1 -1
  160. package/blog/pl/is_next-intl_outdated.md +1 -1
  161. package/blog/pl/is_vue-i18n_outdated.md +1 -1
  162. package/blog/pl/lingui_vs_intlayer-lingui.md +304 -0
  163. package/blog/pl/lingui_vs_intlayer.md +381 -0
  164. package/blog/pl/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
  165. package/blog/pl/next-intl_vs_intlayer-next-intl.md +309 -0
  166. package/blog/pl/next-intl_vs_intlayer.md +397 -0
  167. package/blog/pl/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
  168. package/blog/pl/vue-i18n_vs_intlayer-vue-i18n.md +289 -0
  169. package/blog/pl/vue-i18n_vs_intlayer.md +1 -1
  170. package/blog/pl/vue-i18n_vs_intlayer_benchmark.md +0 -0
  171. package/blog/pt/history_of_i18n.md +304 -0
  172. package/blog/pt/i18next_vs_intlayer-i18next.md +327 -0
  173. package/blog/pt/i18next_vs_intlayer.md +445 -0
  174. package/blog/pt/is_i18next_outdated.md +1 -1
  175. package/blog/pt/is_next-intl_outdated.md +1 -1
  176. package/blog/pt/is_vue-i18n_outdated.md +1 -1
  177. package/blog/pt/lingui_vs_intlayer-lingui.md +304 -0
  178. package/blog/pt/lingui_vs_intlayer.md +381 -0
  179. package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
  180. package/blog/pt/next-intl_vs_intlayer-next-intl.md +309 -0
  181. package/blog/pt/next-intl_vs_intlayer.md +411 -0
  182. package/blog/pt/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  183. package/blog/pt/vue-i18n_vs_intlayer_benchmark.md +0 -0
  184. package/blog/ru/history_of_i18n.md +304 -0
  185. package/blog/ru/i18next_vs_intlayer-i18next.md +327 -0
  186. package/blog/ru/i18next_vs_intlayer.md +445 -0
  187. package/blog/ru/is_i18next_outdated.md +1 -1
  188. package/blog/ru/is_next-intl_outdated.md +1 -1
  189. package/blog/ru/is_vue-i18n_outdated.md +1 -1
  190. package/blog/ru/lingui_vs_intlayer-lingui.md +304 -0
  191. package/blog/ru/lingui_vs_intlayer.md +381 -0
  192. package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
  193. package/blog/ru/next-intl_vs_intlayer-next-intl.md +309 -0
  194. package/blog/ru/next-intl_vs_intlayer.md +417 -0
  195. package/blog/ru/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  196. package/blog/ru/vue-i18n_vs_intlayer_benchmark.md +54 -0
  197. package/blog/tr/history_of_i18n.md +304 -0
  198. package/blog/tr/i18next_vs_intlayer-i18next.md +327 -0
  199. package/blog/tr/i18next_vs_intlayer.md +445 -0
  200. package/blog/tr/is_i18next_outdated.md +1 -1
  201. package/blog/tr/is_next-intl_outdated.md +1 -1
  202. package/blog/tr/is_vue-i18n_outdated.md +1 -1
  203. package/blog/tr/lingui_vs_intlayer-lingui.md +304 -0
  204. package/blog/tr/lingui_vs_intlayer.md +381 -0
  205. package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
  206. package/blog/tr/next-intl_vs_intlayer-next-intl.md +309 -0
  207. package/blog/tr/next-intl_vs_intlayer.md +397 -0
  208. package/blog/tr/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
  209. package/blog/tr/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  210. package/blog/tr/vue-i18n_vs_intlayer.md +1 -1
  211. package/blog/tr/vue-i18n_vs_intlayer_benchmark.md +0 -0
  212. package/blog/uk/history_of_i18n.md +304 -0
  213. package/blog/uk/i18next_vs_intlayer-i18next.md +327 -0
  214. package/blog/uk/i18next_vs_intlayer.md +445 -0
  215. package/blog/uk/is_i18next_outdated.md +1 -1
  216. package/blog/uk/is_next-intl_outdated.md +1 -1
  217. package/blog/uk/is_vue-i18n_outdated.md +1 -1
  218. package/blog/uk/lingui_vs_intlayer-lingui.md +304 -0
  219. package/blog/uk/lingui_vs_intlayer.md +381 -0
  220. package/blog/uk/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
  221. package/blog/uk/next-intl_vs_intlayer-next-intl.md +309 -0
  222. package/blog/uk/next-intl_vs_intlayer.md +397 -0
  223. package/blog/uk/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
  224. package/blog/uk/vue-i18n_vs_intlayer-vue-i18n.md +270 -0
  225. package/blog/uk/vue-i18n_vs_intlayer.md +1 -1
  226. package/blog/uk/vue-i18n_vs_intlayer_benchmark.md +0 -0
  227. package/blog/vi/history_of_i18n.md +304 -0
  228. package/blog/vi/i18next_vs_intlayer-i18next.md +327 -0
  229. package/blog/vi/i18next_vs_intlayer.md +445 -0
  230. package/blog/vi/is_i18next_outdated.md +1 -1
  231. package/blog/vi/is_next-intl_outdated.md +1 -1
  232. package/blog/vi/is_vue-i18n_outdated.md +1 -1
  233. package/blog/vi/lingui_vs_intlayer-lingui.md +304 -0
  234. package/blog/vi/lingui_vs_intlayer.md +381 -0
  235. package/blog/vi/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
  236. package/blog/vi/next-intl_vs_intlayer-next-intl.md +309 -0
  237. package/blog/vi/next-intl_vs_intlayer.md +397 -0
  238. package/blog/vi/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
  239. package/blog/vi/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  240. package/blog/vi/vue-i18n_vs_intlayer.md +1 -1
  241. package/blog/vi/vue-i18n_vs_intlayer_benchmark.md +0 -0
  242. package/blog/zh/history_of_i18n.md +304 -0
  243. package/blog/zh/i18next_vs_intlayer-i18next.md +327 -0
  244. package/blog/zh/i18next_vs_intlayer.md +445 -0
  245. package/blog/zh/is_i18next_outdated.md +1 -1
  246. package/blog/zh/is_next-intl_outdated.md +1 -1
  247. package/blog/zh/is_vue-i18n_outdated.md +1 -1
  248. package/blog/zh/lingui_vs_intlayer-lingui.md +304 -0
  249. package/blog/zh/lingui_vs_intlayer.md +381 -0
  250. package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
  251. package/blog/zh/next-intl_vs_intlayer-next-intl.md +309 -0
  252. package/blog/zh/next-intl_vs_intlayer.md +422 -0
  253. package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +1 -1
  254. package/blog/zh/vue-i18n_vs_intlayer-vue-i18n.md +288 -0
  255. package/blog/zh/vue-i18n_vs_intlayer.md +1 -1
  256. package/blog/zh/vue-i18n_vs_intlayer_benchmark.md +30 -0
  257. package/dist/cjs/generated/blog.entry.cjs +180 -0
  258. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  259. package/dist/cjs/generated/docs.entry.cjs +0 -20
  260. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  261. package/dist/cjs/generated/frequentQuestions.entry.cjs +20 -0
  262. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  263. package/dist/esm/generated/blog.entry.mjs +180 -0
  264. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  265. package/dist/esm/generated/docs.entry.mjs +0 -20
  266. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  267. package/dist/esm/generated/frequentQuestions.entry.mjs +20 -0
  268. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  269. package/dist/types/generated/blog.entry.d.ts +9 -0
  270. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  271. package/dist/types/generated/docs.entry.d.ts +0 -1
  272. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  273. package/dist/types/generated/frequentQuestions.entry.d.ts +1 -0
  274. package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
  275. package/docs/ar/benchmark/index.md +4 -1
  276. package/docs/ar/benchmark/nextjs.md +33 -28
  277. package/docs/ar/benchmark/solid.md +14 -11
  278. package/docs/ar/benchmark/svelte.md +13 -10
  279. package/docs/ar/benchmark/tanstack.md +30 -25
  280. package/docs/ar/benchmark/vue.md +12 -8
  281. package/docs/ar/cli/build.md +8 -1
  282. package/docs/ar/cli/configuration.md +3 -1
  283. package/docs/ar/cli/doc-review.md +8 -1
  284. package/docs/ar/cli/doc-translate.md +5 -1
  285. package/docs/ar/cli/extract.md +2 -1
  286. package/docs/ar/cli/fill.md +5 -1
  287. package/docs/ar/cli/index.md +4 -5
  288. package/docs/ar/cli/live.md +5 -1
  289. package/docs/ar/cli/login.md +2 -2
  290. package/docs/ar/cli/pull.md +5 -1
  291. package/docs/ar/cli/push.md +5 -1
  292. package/docs/ar/cli/scan.md +5 -1
  293. package/docs/ar/cli/standalone.md +5 -1
  294. package/docs/ar/cli/test.md +5 -1
  295. package/docs/ar/cli/watch.md +5 -1
  296. package/docs/ar/compat/i18n-js.md +1 -1
  297. package/docs/ar/compat/i18next.md +1 -1
  298. package/docs/ar/compat/lingui.md +1 -1
  299. package/docs/ar/compat/next-i18next.md +1 -1
  300. package/docs/ar/compat/next-intl.md +1 -1
  301. package/docs/ar/compat/next-translate.md +1 -1
  302. package/docs/ar/compat/ngx-translate.md +1 -1
  303. package/docs/ar/compat/nuxtjs-i18n.md +1 -1
  304. package/docs/ar/compat/polyglot.md +1 -1
  305. package/docs/ar/compat/react-i18next.md +1 -1
  306. package/docs/ar/compat/react-intl.md +1 -1
  307. package/docs/ar/compat/svelte-i18n.md +1 -1
  308. package/docs/ar/compat/transloco.md +1 -1
  309. package/docs/ar/compat/vue-i18n.md +1 -1
  310. package/docs/ar/interest_of_intlayer.md +1 -1
  311. package/docs/ar/intlayer_with_remix_3.md +543 -0
  312. package/docs/bn/cli/index.md +4 -5
  313. package/docs/bn/cli/scan.md +5 -1
  314. package/docs/bn/cli/standalone.md +5 -1
  315. package/docs/bn/interest_of_intlayer.md +1 -1
  316. package/docs/cs/cli/index.md +4 -5
  317. package/docs/cs/cli/scan.md +5 -1
  318. package/docs/cs/cli/standalone.md +5 -1
  319. package/docs/cs/interest_of_intlayer.md +1 -1
  320. package/docs/de/benchmark/index.md +4 -1
  321. package/docs/de/benchmark/nextjs.md +33 -28
  322. package/docs/de/benchmark/solid.md +14 -11
  323. package/docs/de/benchmark/svelte.md +13 -10
  324. package/docs/de/benchmark/tanstack.md +30 -25
  325. package/docs/de/benchmark/vue.md +12 -8
  326. package/docs/de/cli/build.md +8 -1
  327. package/docs/de/cli/configuration.md +3 -1
  328. package/docs/de/cli/doc-review.md +8 -1
  329. package/docs/de/cli/doc-translate.md +5 -1
  330. package/docs/de/cli/extract.md +2 -1
  331. package/docs/de/cli/fill.md +5 -1
  332. package/docs/de/cli/index.md +4 -5
  333. package/docs/de/cli/live.md +5 -1
  334. package/docs/de/cli/login.md +2 -2
  335. package/docs/de/cli/pull.md +5 -1
  336. package/docs/de/cli/push.md +5 -1
  337. package/docs/de/cli/scan.md +5 -1
  338. package/docs/de/cli/standalone.md +5 -1
  339. package/docs/de/cli/test.md +5 -1
  340. package/docs/de/cli/watch.md +5 -1
  341. package/docs/de/compat/i18n-js.md +1 -1
  342. package/docs/de/compat/i18next.md +1 -1
  343. package/docs/de/compat/lingui.md +1 -1
  344. package/docs/de/compat/next-i18next.md +1 -1
  345. package/docs/de/compat/next-intl.md +1 -1
  346. package/docs/de/compat/next-translate.md +1 -1
  347. package/docs/de/compat/ngx-translate.md +1 -1
  348. package/docs/de/compat/nuxtjs-i18n.md +1 -1
  349. package/docs/de/compat/polyglot.md +1 -1
  350. package/docs/de/compat/react-i18next.md +1 -1
  351. package/docs/de/compat/react-intl.md +1 -1
  352. package/docs/de/compat/svelte-i18n.md +1 -1
  353. package/docs/de/compat/transloco.md +1 -1
  354. package/docs/de/compat/vue-i18n.md +1 -1
  355. package/docs/de/interest_of_intlayer.md +1 -1
  356. package/docs/de/intlayer_with_remix_3.md +543 -0
  357. package/docs/en/benchmark/index.md +4 -1
  358. package/docs/en/benchmark/nextjs.md +33 -28
  359. package/docs/en/benchmark/solid.md +14 -11
  360. package/docs/en/benchmark/svelte.md +13 -10
  361. package/docs/en/benchmark/tanstack.md +31 -26
  362. package/docs/en/benchmark/vue.md +12 -8
  363. package/docs/en/cli/build.md +8 -1
  364. package/docs/en/cli/configuration.md +3 -1
  365. package/docs/en/cli/doc-review.md +8 -1
  366. package/docs/en/cli/doc-translate.md +5 -1
  367. package/docs/en/cli/extract.md +2 -1
  368. package/docs/en/cli/fill.md +5 -1
  369. package/docs/en/cli/index.md +4 -5
  370. package/docs/en/cli/live.md +5 -1
  371. package/docs/en/cli/login.md +2 -2
  372. package/docs/en/cli/pull.md +5 -1
  373. package/docs/en/cli/push.md +5 -1
  374. package/docs/en/cli/scan.md +5 -1
  375. package/docs/en/cli/standalone.md +5 -1
  376. package/docs/en/cli/test.md +5 -1
  377. package/docs/en/cli/watch.md +5 -1
  378. package/docs/en/compat/i18n-js.md +1 -1
  379. package/docs/en/compat/i18next.md +1 -1
  380. package/docs/en/compat/lingui.md +1 -1
  381. package/docs/en/compat/next-i18next.md +1 -1
  382. package/docs/en/compat/next-intl.md +1 -1
  383. package/docs/en/compat/next-translate.md +1 -1
  384. package/docs/en/compat/ngx-translate.md +1 -1
  385. package/docs/en/compat/nuxtjs-i18n.md +1 -1
  386. package/docs/en/compat/polyglot.md +1 -1
  387. package/docs/en/compat/react-i18next.md +1 -1
  388. package/docs/en/compat/react-intl.md +1 -1
  389. package/docs/en/compat/svelte-i18n.md +1 -1
  390. package/docs/en/compat/transloco.md +1 -1
  391. package/docs/en/compat/vue-i18n.md +1 -1
  392. package/docs/en/interest_of_intlayer.md +1 -1
  393. package/docs/en/intlayer_with_remix_3.md +103 -71
  394. package/docs/en-GB/benchmark/index.md +4 -1
  395. package/docs/en-GB/benchmark/nextjs.md +33 -28
  396. package/docs/en-GB/benchmark/solid.md +14 -11
  397. package/docs/en-GB/benchmark/svelte.md +13 -10
  398. package/docs/en-GB/benchmark/tanstack.md +30 -25
  399. package/docs/en-GB/benchmark/vue.md +12 -8
  400. package/docs/en-GB/cli/build.md +8 -1
  401. package/docs/en-GB/cli/configuration.md +3 -1
  402. package/docs/en-GB/cli/doc-review.md +8 -1
  403. package/docs/en-GB/cli/doc-translate.md +5 -1
  404. package/docs/en-GB/cli/extract.md +2 -1
  405. package/docs/en-GB/cli/fill.md +5 -1
  406. package/docs/en-GB/cli/index.md +4 -5
  407. package/docs/en-GB/cli/live.md +5 -1
  408. package/docs/en-GB/cli/login.md +2 -2
  409. package/docs/en-GB/cli/pull.md +5 -1
  410. package/docs/en-GB/cli/push.md +5 -1
  411. package/docs/en-GB/cli/scan.md +5 -1
  412. package/docs/en-GB/cli/standalone.md +5 -1
  413. package/docs/en-GB/cli/test.md +5 -1
  414. package/docs/en-GB/cli/watch.md +5 -1
  415. package/docs/en-GB/compat/i18n-js.md +1 -1
  416. package/docs/en-GB/compat/i18next.md +1 -1
  417. package/docs/en-GB/compat/lingui.md +1 -1
  418. package/docs/en-GB/compat/next-i18next.md +1 -1
  419. package/docs/en-GB/compat/next-intl.md +1 -1
  420. package/docs/en-GB/compat/next-translate.md +1 -1
  421. package/docs/en-GB/compat/ngx-translate.md +1 -1
  422. package/docs/en-GB/compat/nuxtjs-i18n.md +1 -1
  423. package/docs/en-GB/compat/polyglot.md +1 -1
  424. package/docs/en-GB/compat/react-i18next.md +1 -1
  425. package/docs/en-GB/compat/react-intl.md +1 -1
  426. package/docs/en-GB/compat/svelte-i18n.md +1 -1
  427. package/docs/en-GB/compat/transloco.md +1 -1
  428. package/docs/en-GB/compat/vue-i18n.md +1 -1
  429. package/docs/en-GB/interest_of_intlayer.md +1 -1
  430. package/docs/en-GB/intlayer_with_remix_3.md +558 -0
  431. package/docs/es/benchmark/index.md +4 -1
  432. package/docs/es/benchmark/nextjs.md +33 -28
  433. package/docs/es/benchmark/solid.md +14 -11
  434. package/docs/es/benchmark/svelte.md +13 -10
  435. package/docs/es/benchmark/tanstack.md +30 -25
  436. package/docs/es/benchmark/vue.md +12 -8
  437. package/docs/es/cli/build.md +8 -1
  438. package/docs/es/cli/configuration.md +3 -1
  439. package/docs/es/cli/doc-review.md +8 -1
  440. package/docs/es/cli/doc-translate.md +5 -1
  441. package/docs/es/cli/extract.md +2 -1
  442. package/docs/es/cli/fill.md +5 -1
  443. package/docs/es/cli/index.md +4 -5
  444. package/docs/es/cli/live.md +5 -1
  445. package/docs/es/cli/login.md +2 -2
  446. package/docs/es/cli/pull.md +5 -1
  447. package/docs/es/cli/push.md +5 -1
  448. package/docs/es/cli/scan.md +5 -1
  449. package/docs/es/cli/standalone.md +5 -1
  450. package/docs/es/cli/test.md +5 -1
  451. package/docs/es/cli/watch.md +5 -1
  452. package/docs/es/compat/i18n-js.md +1 -1
  453. package/docs/es/compat/i18next.md +1 -1
  454. package/docs/es/compat/lingui.md +1 -1
  455. package/docs/es/compat/next-i18next.md +1 -1
  456. package/docs/es/compat/next-intl.md +1 -1
  457. package/docs/es/compat/next-translate.md +1 -1
  458. package/docs/es/compat/ngx-translate.md +1 -1
  459. package/docs/es/compat/nuxtjs-i18n.md +1 -1
  460. package/docs/es/compat/polyglot.md +1 -1
  461. package/docs/es/compat/react-i18next.md +1 -1
  462. package/docs/es/compat/react-intl.md +1 -1
  463. package/docs/es/compat/svelte-i18n.md +1 -1
  464. package/docs/es/compat/transloco.md +1 -1
  465. package/docs/es/compat/vue-i18n.md +1 -1
  466. package/docs/es/interest_of_intlayer.md +1 -1
  467. package/docs/es/intlayer_with_remix_3.md +540 -0
  468. package/docs/fr/benchmark/index.md +4 -1
  469. package/docs/fr/benchmark/nextjs.md +33 -28
  470. package/docs/fr/benchmark/solid.md +14 -11
  471. package/docs/fr/benchmark/svelte.md +13 -10
  472. package/docs/fr/benchmark/tanstack.md +30 -25
  473. package/docs/fr/benchmark/vue.md +12 -8
  474. package/docs/fr/cli/build.md +8 -1
  475. package/docs/fr/cli/configuration.md +3 -1
  476. package/docs/fr/cli/doc-review.md +8 -1
  477. package/docs/fr/cli/doc-translate.md +5 -1
  478. package/docs/fr/cli/extract.md +2 -1
  479. package/docs/fr/cli/fill.md +5 -1
  480. package/docs/fr/cli/index.md +4 -5
  481. package/docs/fr/cli/live.md +5 -1
  482. package/docs/fr/cli/login.md +2 -2
  483. package/docs/fr/cli/pull.md +5 -1
  484. package/docs/fr/cli/push.md +5 -1
  485. package/docs/fr/cli/scan.md +5 -1
  486. package/docs/fr/cli/standalone.md +5 -1
  487. package/docs/fr/cli/test.md +5 -1
  488. package/docs/fr/cli/watch.md +5 -1
  489. package/docs/fr/compat/i18n-js.md +1 -1
  490. package/docs/fr/compat/i18next.md +1 -1
  491. package/docs/fr/compat/lingui.md +1 -1
  492. package/docs/fr/compat/next-i18next.md +1 -1
  493. package/docs/fr/compat/next-intl.md +1 -1
  494. package/docs/fr/compat/next-translate.md +1 -1
  495. package/docs/fr/compat/ngx-translate.md +1 -1
  496. package/docs/fr/compat/nuxtjs-i18n.md +1 -1
  497. package/docs/fr/compat/polyglot.md +1 -1
  498. package/docs/fr/compat/react-i18next.md +1 -1
  499. package/docs/fr/compat/react-intl.md +1 -1
  500. package/docs/fr/compat/svelte-i18n.md +1 -1
  501. package/docs/fr/compat/transloco.md +1 -1
  502. package/docs/fr/compat/vue-i18n.md +1 -1
  503. package/docs/fr/interest_of_intlayer.md +1 -1
  504. package/docs/fr/intlayer_with_remix_3.md +540 -0
  505. package/docs/hi/benchmark/index.md +4 -1
  506. package/docs/hi/benchmark/nextjs.md +33 -28
  507. package/docs/hi/benchmark/solid.md +14 -11
  508. package/docs/hi/benchmark/svelte.md +13 -10
  509. package/docs/hi/benchmark/tanstack.md +30 -25
  510. package/docs/hi/benchmark/vue.md +12 -8
  511. package/docs/hi/cli/build.md +8 -1
  512. package/docs/hi/cli/configuration.md +3 -1
  513. package/docs/hi/cli/doc-review.md +8 -1
  514. package/docs/hi/cli/doc-translate.md +5 -1
  515. package/docs/hi/cli/extract.md +2 -1
  516. package/docs/hi/cli/fill.md +5 -1
  517. package/docs/hi/cli/index.md +4 -5
  518. package/docs/hi/cli/live.md +5 -1
  519. package/docs/hi/cli/login.md +2 -2
  520. package/docs/hi/cli/pull.md +5 -1
  521. package/docs/hi/cli/push.md +5 -1
  522. package/docs/hi/cli/scan.md +5 -1
  523. package/docs/hi/cli/standalone.md +5 -1
  524. package/docs/hi/cli/test.md +5 -1
  525. package/docs/hi/cli/watch.md +5 -1
  526. package/docs/hi/compat/i18n-js.md +1 -1
  527. package/docs/hi/compat/i18next.md +1 -1
  528. package/docs/hi/compat/lingui.md +1 -1
  529. package/docs/hi/compat/next-i18next.md +1 -1
  530. package/docs/hi/compat/next-intl.md +1 -1
  531. package/docs/hi/compat/next-translate.md +1 -1
  532. package/docs/hi/compat/ngx-translate.md +1 -1
  533. package/docs/hi/compat/nuxtjs-i18n.md +1 -1
  534. package/docs/hi/compat/polyglot.md +1 -1
  535. package/docs/hi/compat/react-i18next.md +1 -1
  536. package/docs/hi/compat/react-intl.md +1 -1
  537. package/docs/hi/compat/svelte-i18n.md +1 -1
  538. package/docs/hi/compat/transloco.md +1 -1
  539. package/docs/hi/compat/vue-i18n.md +1 -1
  540. package/docs/hi/interest_of_intlayer.md +1 -1
  541. package/docs/hi/intlayer_with_remix_3.md +543 -0
  542. package/docs/id/benchmark/index.md +4 -1
  543. package/docs/id/benchmark/nextjs.md +33 -28
  544. package/docs/id/benchmark/solid.md +14 -11
  545. package/docs/id/benchmark/svelte.md +13 -10
  546. package/docs/id/benchmark/tanstack.md +30 -25
  547. package/docs/id/benchmark/vue.md +12 -8
  548. package/docs/id/cli/build.md +8 -1
  549. package/docs/id/cli/configuration.md +3 -1
  550. package/docs/id/cli/doc-review.md +8 -1
  551. package/docs/id/cli/doc-translate.md +5 -1
  552. package/docs/id/cli/extract.md +2 -1
  553. package/docs/id/cli/fill.md +5 -1
  554. package/docs/id/cli/index.md +4 -5
  555. package/docs/id/cli/live.md +5 -1
  556. package/docs/id/cli/login.md +2 -2
  557. package/docs/id/cli/pull.md +5 -1
  558. package/docs/id/cli/push.md +5 -1
  559. package/docs/id/cli/scan.md +5 -1
  560. package/docs/id/cli/standalone.md +5 -1
  561. package/docs/id/cli/test.md +5 -1
  562. package/docs/id/cli/watch.md +5 -1
  563. package/docs/id/compat/i18n-js.md +1 -1
  564. package/docs/id/compat/i18next.md +1 -1
  565. package/docs/id/compat/lingui.md +1 -1
  566. package/docs/id/compat/next-i18next.md +1 -1
  567. package/docs/id/compat/next-intl.md +1 -1
  568. package/docs/id/compat/next-translate.md +1 -1
  569. package/docs/id/compat/ngx-translate.md +1 -1
  570. package/docs/id/compat/nuxtjs-i18n.md +1 -1
  571. package/docs/id/compat/polyglot.md +1 -1
  572. package/docs/id/compat/react-i18next.md +1 -1
  573. package/docs/id/compat/react-intl.md +1 -1
  574. package/docs/id/compat/svelte-i18n.md +1 -1
  575. package/docs/id/compat/transloco.md +1 -1
  576. package/docs/id/compat/vue-i18n.md +1 -1
  577. package/docs/id/interest_of_intlayer.md +1 -1
  578. package/docs/id/intlayer_with_remix_3.md +566 -0
  579. package/docs/it/benchmark/index.md +4 -1
  580. package/docs/it/benchmark/nextjs.md +33 -28
  581. package/docs/it/benchmark/solid.md +14 -11
  582. package/docs/it/benchmark/svelte.md +13 -10
  583. package/docs/it/benchmark/tanstack.md +30 -25
  584. package/docs/it/benchmark/vue.md +12 -8
  585. package/docs/it/cli/build.md +8 -1
  586. package/docs/it/cli/configuration.md +3 -1
  587. package/docs/it/cli/doc-review.md +8 -1
  588. package/docs/it/cli/doc-translate.md +5 -1
  589. package/docs/it/cli/extract.md +2 -1
  590. package/docs/it/cli/fill.md +5 -1
  591. package/docs/it/cli/index.md +4 -5
  592. package/docs/it/cli/live.md +5 -1
  593. package/docs/it/cli/login.md +2 -2
  594. package/docs/it/cli/pull.md +5 -1
  595. package/docs/it/cli/push.md +5 -1
  596. package/docs/it/cli/scan.md +5 -1
  597. package/docs/it/cli/standalone.md +5 -1
  598. package/docs/it/cli/test.md +5 -1
  599. package/docs/it/cli/watch.md +5 -1
  600. package/docs/it/compat/i18n-js.md +1 -1
  601. package/docs/it/compat/i18next.md +1 -1
  602. package/docs/it/compat/lingui.md +1 -1
  603. package/docs/it/compat/next-i18next.md +1 -1
  604. package/docs/it/compat/next-intl.md +1 -1
  605. package/docs/it/compat/next-translate.md +1 -1
  606. package/docs/it/compat/ngx-translate.md +1 -1
  607. package/docs/it/compat/nuxtjs-i18n.md +1 -1
  608. package/docs/it/compat/polyglot.md +1 -1
  609. package/docs/it/compat/react-i18next.md +1 -1
  610. package/docs/it/compat/react-intl.md +1 -1
  611. package/docs/it/compat/svelte-i18n.md +1 -1
  612. package/docs/it/compat/transloco.md +1 -1
  613. package/docs/it/compat/vue-i18n.md +1 -1
  614. package/docs/it/interest_of_intlayer.md +1 -1
  615. package/docs/it/intlayer_with_remix_3.md +558 -0
  616. package/docs/ja/benchmark/index.md +4 -1
  617. package/docs/ja/benchmark/nextjs.md +33 -28
  618. package/docs/ja/benchmark/solid.md +14 -11
  619. package/docs/ja/benchmark/svelte.md +13 -10
  620. package/docs/ja/benchmark/tanstack.md +30 -25
  621. package/docs/ja/benchmark/vue.md +12 -8
  622. package/docs/ja/cli/build.md +8 -1
  623. package/docs/ja/cli/configuration.md +3 -1
  624. package/docs/ja/cli/doc-review.md +8 -1
  625. package/docs/ja/cli/doc-translate.md +5 -1
  626. package/docs/ja/cli/extract.md +2 -1
  627. package/docs/ja/cli/fill.md +5 -1
  628. package/docs/ja/cli/index.md +4 -5
  629. package/docs/ja/cli/live.md +5 -1
  630. package/docs/ja/cli/login.md +2 -2
  631. package/docs/ja/cli/pull.md +5 -1
  632. package/docs/ja/cli/push.md +5 -1
  633. package/docs/ja/cli/scan.md +5 -1
  634. package/docs/ja/cli/standalone.md +5 -1
  635. package/docs/ja/cli/test.md +5 -1
  636. package/docs/ja/cli/watch.md +5 -1
  637. package/docs/ja/compat/i18n-js.md +1 -1
  638. package/docs/ja/compat/i18next.md +1 -1
  639. package/docs/ja/compat/lingui.md +1 -1
  640. package/docs/ja/compat/next-i18next.md +1 -1
  641. package/docs/ja/compat/next-intl.md +1 -1
  642. package/docs/ja/compat/next-translate.md +1 -1
  643. package/docs/ja/compat/ngx-translate.md +1 -1
  644. package/docs/ja/compat/nuxtjs-i18n.md +1 -1
  645. package/docs/ja/compat/polyglot.md +1 -1
  646. package/docs/ja/compat/react-i18next.md +1 -1
  647. package/docs/ja/compat/react-intl.md +1 -1
  648. package/docs/ja/compat/svelte-i18n.md +1 -1
  649. package/docs/ja/compat/transloco.md +1 -1
  650. package/docs/ja/compat/vue-i18n.md +1 -1
  651. package/docs/ja/interest_of_intlayer.md +1 -1
  652. package/docs/ja/intlayer_with_remix_3.md +558 -0
  653. package/docs/ko/benchmark/index.md +4 -1
  654. package/docs/ko/benchmark/nextjs.md +33 -28
  655. package/docs/ko/benchmark/solid.md +14 -11
  656. package/docs/ko/benchmark/svelte.md +13 -10
  657. package/docs/ko/benchmark/tanstack.md +30 -25
  658. package/docs/ko/benchmark/vue.md +12 -8
  659. package/docs/ko/cli/build.md +8 -1
  660. package/docs/ko/cli/configuration.md +3 -1
  661. package/docs/ko/cli/doc-review.md +8 -1
  662. package/docs/ko/cli/doc-translate.md +5 -1
  663. package/docs/ko/cli/extract.md +2 -1
  664. package/docs/ko/cli/fill.md +5 -1
  665. package/docs/ko/cli/index.md +4 -5
  666. package/docs/ko/cli/live.md +5 -1
  667. package/docs/ko/cli/login.md +2 -2
  668. package/docs/ko/cli/pull.md +5 -1
  669. package/docs/ko/cli/push.md +5 -1
  670. package/docs/ko/cli/scan.md +5 -1
  671. package/docs/ko/cli/standalone.md +5 -1
  672. package/docs/ko/cli/test.md +5 -1
  673. package/docs/ko/cli/watch.md +5 -1
  674. package/docs/ko/compat/i18n-js.md +1 -1
  675. package/docs/ko/compat/i18next.md +1 -1
  676. package/docs/ko/compat/lingui.md +1 -1
  677. package/docs/ko/compat/next-i18next.md +1 -1
  678. package/docs/ko/compat/next-intl.md +1 -1
  679. package/docs/ko/compat/next-translate.md +1 -1
  680. package/docs/ko/compat/ngx-translate.md +1 -1
  681. package/docs/ko/compat/nuxtjs-i18n.md +1 -1
  682. package/docs/ko/compat/polyglot.md +1 -1
  683. package/docs/ko/compat/react-i18next.md +1 -1
  684. package/docs/ko/compat/react-intl.md +1 -1
  685. package/docs/ko/compat/svelte-i18n.md +1 -1
  686. package/docs/ko/compat/transloco.md +1 -1
  687. package/docs/ko/compat/vue-i18n.md +1 -1
  688. package/docs/ko/interest_of_intlayer.md +1 -1
  689. package/docs/ko/intlayer_with_remix_3.md +543 -0
  690. package/docs/nl/cli/index.md +4 -5
  691. package/docs/nl/cli/scan.md +5 -1
  692. package/docs/nl/cli/standalone.md +5 -1
  693. package/docs/nl/interest_of_intlayer.md +1 -1
  694. package/docs/pl/benchmark/index.md +4 -1
  695. package/docs/pl/benchmark/nextjs.md +33 -28
  696. package/docs/pl/benchmark/solid.md +14 -11
  697. package/docs/pl/benchmark/svelte.md +13 -10
  698. package/docs/pl/benchmark/tanstack.md +30 -25
  699. package/docs/pl/benchmark/vue.md +12 -8
  700. package/docs/pl/cli/build.md +8 -1
  701. package/docs/pl/cli/configuration.md +3 -1
  702. package/docs/pl/cli/doc-review.md +8 -1
  703. package/docs/pl/cli/doc-translate.md +5 -1
  704. package/docs/pl/cli/extract.md +2 -1
  705. package/docs/pl/cli/fill.md +5 -1
  706. package/docs/pl/cli/index.md +4 -5
  707. package/docs/pl/cli/live.md +5 -1
  708. package/docs/pl/cli/login.md +2 -2
  709. package/docs/pl/cli/pull.md +5 -1
  710. package/docs/pl/cli/push.md +5 -1
  711. package/docs/pl/cli/scan.md +5 -1
  712. package/docs/pl/cli/standalone.md +5 -1
  713. package/docs/pl/cli/test.md +5 -1
  714. package/docs/pl/cli/watch.md +5 -1
  715. package/docs/pl/compat/i18n-js.md +1 -1
  716. package/docs/pl/compat/i18next.md +1 -1
  717. package/docs/pl/compat/lingui.md +1 -1
  718. package/docs/pl/compat/next-i18next.md +1 -1
  719. package/docs/pl/compat/next-intl.md +1 -1
  720. package/docs/pl/compat/next-translate.md +1 -1
  721. package/docs/pl/compat/ngx-translate.md +1 -1
  722. package/docs/pl/compat/nuxtjs-i18n.md +1 -1
  723. package/docs/pl/compat/polyglot.md +1 -1
  724. package/docs/pl/compat/react-i18next.md +1 -1
  725. package/docs/pl/compat/react-intl.md +1 -1
  726. package/docs/pl/compat/svelte-i18n.md +1 -1
  727. package/docs/pl/compat/transloco.md +1 -1
  728. package/docs/pl/compat/vue-i18n.md +1 -1
  729. package/docs/pl/interest_of_intlayer.md +1 -1
  730. package/docs/pl/intlayer_with_remix_3.md +551 -0
  731. package/docs/pt/benchmark/index.md +4 -1
  732. package/docs/pt/benchmark/nextjs.md +33 -28
  733. package/docs/pt/benchmark/solid.md +14 -11
  734. package/docs/pt/benchmark/svelte.md +13 -10
  735. package/docs/pt/benchmark/tanstack.md +30 -25
  736. package/docs/pt/benchmark/vue.md +12 -8
  737. package/docs/pt/cli/build.md +8 -1
  738. package/docs/pt/cli/configuration.md +3 -1
  739. package/docs/pt/cli/doc-review.md +8 -1
  740. package/docs/pt/cli/doc-translate.md +5 -1
  741. package/docs/pt/cli/extract.md +2 -1
  742. package/docs/pt/cli/fill.md +5 -1
  743. package/docs/pt/cli/index.md +4 -5
  744. package/docs/pt/cli/live.md +5 -1
  745. package/docs/pt/cli/login.md +2 -2
  746. package/docs/pt/cli/pull.md +5 -1
  747. package/docs/pt/cli/push.md +5 -1
  748. package/docs/pt/cli/scan.md +5 -1
  749. package/docs/pt/cli/standalone.md +5 -1
  750. package/docs/pt/cli/test.md +5 -1
  751. package/docs/pt/cli/watch.md +5 -1
  752. package/docs/pt/compat/i18n-js.md +1 -1
  753. package/docs/pt/compat/i18next.md +1 -1
  754. package/docs/pt/compat/lingui.md +1 -1
  755. package/docs/pt/compat/next-i18next.md +1 -1
  756. package/docs/pt/compat/next-intl.md +1 -1
  757. package/docs/pt/compat/next-translate.md +1 -1
  758. package/docs/pt/compat/ngx-translate.md +1 -1
  759. package/docs/pt/compat/nuxtjs-i18n.md +1 -1
  760. package/docs/pt/compat/polyglot.md +1 -1
  761. package/docs/pt/compat/react-i18next.md +1 -1
  762. package/docs/pt/compat/react-intl.md +1 -1
  763. package/docs/pt/compat/svelte-i18n.md +1 -1
  764. package/docs/pt/compat/transloco.md +1 -1
  765. package/docs/pt/compat/vue-i18n.md +1 -1
  766. package/docs/pt/interest_of_intlayer.md +1 -1
  767. package/docs/pt/intlayer_with_remix_3.md +558 -0
  768. package/docs/ru/benchmark/index.md +4 -1
  769. package/docs/ru/benchmark/nextjs.md +33 -28
  770. package/docs/ru/benchmark/solid.md +14 -11
  771. package/docs/ru/benchmark/svelte.md +13 -10
  772. package/docs/ru/benchmark/tanstack.md +30 -25
  773. package/docs/ru/benchmark/vue.md +12 -8
  774. package/docs/ru/cli/build.md +8 -1
  775. package/docs/ru/cli/configuration.md +3 -1
  776. package/docs/ru/cli/doc-review.md +8 -1
  777. package/docs/ru/cli/doc-translate.md +5 -1
  778. package/docs/ru/cli/extract.md +2 -1
  779. package/docs/ru/cli/fill.md +5 -1
  780. package/docs/ru/cli/index.md +4 -5
  781. package/docs/ru/cli/live.md +5 -1
  782. package/docs/ru/cli/login.md +2 -2
  783. package/docs/ru/cli/pull.md +5 -1
  784. package/docs/ru/cli/push.md +5 -1
  785. package/docs/ru/cli/scan.md +5 -1
  786. package/docs/ru/cli/standalone.md +5 -1
  787. package/docs/ru/cli/test.md +5 -1
  788. package/docs/ru/cli/watch.md +5 -1
  789. package/docs/ru/compat/i18n-js.md +1 -1
  790. package/docs/ru/compat/i18next.md +1 -1
  791. package/docs/ru/compat/lingui.md +1 -1
  792. package/docs/ru/compat/next-i18next.md +1 -1
  793. package/docs/ru/compat/next-intl.md +1 -1
  794. package/docs/ru/compat/next-translate.md +1 -1
  795. package/docs/ru/compat/ngx-translate.md +1 -1
  796. package/docs/ru/compat/nuxtjs-i18n.md +1 -1
  797. package/docs/ru/compat/polyglot.md +1 -1
  798. package/docs/ru/compat/react-i18next.md +1 -1
  799. package/docs/ru/compat/react-intl.md +1 -1
  800. package/docs/ru/compat/svelte-i18n.md +1 -1
  801. package/docs/ru/compat/transloco.md +1 -1
  802. package/docs/ru/compat/vue-i18n.md +1 -1
  803. package/docs/ru/interest_of_intlayer.md +1 -1
  804. package/docs/ru/intlayer_with_remix_3.md +558 -0
  805. package/docs/tr/benchmark/index.md +4 -1
  806. package/docs/tr/benchmark/nextjs.md +33 -28
  807. package/docs/tr/benchmark/solid.md +14 -11
  808. package/docs/tr/benchmark/svelte.md +13 -10
  809. package/docs/tr/benchmark/tanstack.md +30 -25
  810. package/docs/tr/benchmark/vue.md +12 -8
  811. package/docs/tr/cli/build.md +8 -1
  812. package/docs/tr/cli/configuration.md +3 -1
  813. package/docs/tr/cli/doc-review.md +8 -1
  814. package/docs/tr/cli/doc-translate.md +5 -1
  815. package/docs/tr/cli/extract.md +2 -1
  816. package/docs/tr/cli/fill.md +5 -1
  817. package/docs/tr/cli/index.md +4 -5
  818. package/docs/tr/cli/live.md +5 -1
  819. package/docs/tr/cli/login.md +2 -2
  820. package/docs/tr/cli/pull.md +5 -1
  821. package/docs/tr/cli/push.md +5 -1
  822. package/docs/tr/cli/scan.md +5 -1
  823. package/docs/tr/cli/standalone.md +5 -1
  824. package/docs/tr/cli/test.md +5 -1
  825. package/docs/tr/cli/watch.md +5 -1
  826. package/docs/tr/compat/i18n-js.md +1 -1
  827. package/docs/tr/compat/i18next.md +1 -1
  828. package/docs/tr/compat/lingui.md +1 -1
  829. package/docs/tr/compat/next-i18next.md +1 -1
  830. package/docs/tr/compat/next-intl.md +1 -1
  831. package/docs/tr/compat/next-translate.md +1 -1
  832. package/docs/tr/compat/ngx-translate.md +1 -1
  833. package/docs/tr/compat/nuxtjs-i18n.md +1 -1
  834. package/docs/tr/compat/polyglot.md +1 -1
  835. package/docs/tr/compat/react-i18next.md +1 -1
  836. package/docs/tr/compat/react-intl.md +1 -1
  837. package/docs/tr/compat/svelte-i18n.md +1 -1
  838. package/docs/tr/compat/transloco.md +1 -1
  839. package/docs/tr/compat/vue-i18n.md +1 -1
  840. package/docs/tr/interest_of_intlayer.md +1 -1
  841. package/docs/tr/intlayer_with_remix_3.md +566 -0
  842. package/docs/uk/benchmark/index.md +4 -1
  843. package/docs/uk/benchmark/nextjs.md +33 -28
  844. package/docs/uk/benchmark/solid.md +14 -11
  845. package/docs/uk/benchmark/svelte.md +13 -10
  846. package/docs/uk/benchmark/tanstack.md +30 -25
  847. package/docs/uk/benchmark/vue.md +12 -8
  848. package/docs/uk/cli/build.md +8 -1
  849. package/docs/uk/cli/configuration.md +3 -1
  850. package/docs/uk/cli/doc-review.md +8 -1
  851. package/docs/uk/cli/doc-translate.md +5 -1
  852. package/docs/uk/cli/extract.md +2 -1
  853. package/docs/uk/cli/fill.md +5 -1
  854. package/docs/uk/cli/index.md +4 -5
  855. package/docs/uk/cli/live.md +5 -1
  856. package/docs/uk/cli/login.md +2 -2
  857. package/docs/uk/cli/pull.md +5 -1
  858. package/docs/uk/cli/push.md +5 -1
  859. package/docs/uk/cli/scan.md +5 -1
  860. package/docs/uk/cli/standalone.md +5 -1
  861. package/docs/uk/cli/test.md +5 -1
  862. package/docs/uk/cli/watch.md +5 -1
  863. package/docs/uk/compat/i18n-js.md +1 -1
  864. package/docs/uk/compat/i18next.md +1 -1
  865. package/docs/uk/compat/lingui.md +1 -1
  866. package/docs/uk/compat/next-i18next.md +1 -1
  867. package/docs/uk/compat/next-intl.md +1 -1
  868. package/docs/uk/compat/next-translate.md +1 -1
  869. package/docs/uk/compat/ngx-translate.md +1 -1
  870. package/docs/uk/compat/nuxtjs-i18n.md +1 -1
  871. package/docs/uk/compat/polyglot.md +1 -1
  872. package/docs/uk/compat/react-i18next.md +1 -1
  873. package/docs/uk/compat/react-intl.md +1 -1
  874. package/docs/uk/compat/svelte-i18n.md +1 -1
  875. package/docs/uk/compat/transloco.md +1 -1
  876. package/docs/uk/compat/vue-i18n.md +1 -1
  877. package/docs/uk/interest_of_intlayer.md +1 -1
  878. package/docs/uk/intlayer_with_remix_3.md +566 -0
  879. package/docs/ur/cli/index.md +4 -5
  880. package/docs/ur/cli/scan.md +5 -1
  881. package/docs/ur/cli/standalone.md +5 -1
  882. package/docs/ur/interest_of_intlayer.md +1 -1
  883. package/docs/vi/benchmark/index.md +4 -1
  884. package/docs/vi/benchmark/nextjs.md +33 -28
  885. package/docs/vi/benchmark/solid.md +14 -11
  886. package/docs/vi/benchmark/svelte.md +13 -10
  887. package/docs/vi/benchmark/tanstack.md +30 -25
  888. package/docs/vi/benchmark/vue.md +12 -8
  889. package/docs/vi/cli/build.md +8 -1
  890. package/docs/vi/cli/configuration.md +3 -1
  891. package/docs/vi/cli/doc-review.md +8 -1
  892. package/docs/vi/cli/doc-translate.md +5 -1
  893. package/docs/vi/cli/extract.md +2 -1
  894. package/docs/vi/cli/fill.md +5 -1
  895. package/docs/vi/cli/index.md +4 -5
  896. package/docs/vi/cli/live.md +5 -1
  897. package/docs/vi/cli/login.md +2 -2
  898. package/docs/vi/cli/pull.md +5 -1
  899. package/docs/vi/cli/push.md +5 -1
  900. package/docs/vi/cli/scan.md +5 -1
  901. package/docs/vi/cli/standalone.md +5 -1
  902. package/docs/vi/cli/test.md +5 -1
  903. package/docs/vi/cli/watch.md +5 -1
  904. package/docs/vi/compat/i18n-js.md +1 -1
  905. package/docs/vi/compat/i18next.md +1 -1
  906. package/docs/vi/compat/lingui.md +1 -1
  907. package/docs/vi/compat/next-i18next.md +1 -1
  908. package/docs/vi/compat/next-intl.md +1 -1
  909. package/docs/vi/compat/next-translate.md +1 -1
  910. package/docs/vi/compat/ngx-translate.md +1 -1
  911. package/docs/vi/compat/nuxtjs-i18n.md +1 -1
  912. package/docs/vi/compat/polyglot.md +1 -1
  913. package/docs/vi/compat/react-i18next.md +1 -1
  914. package/docs/vi/compat/react-intl.md +1 -1
  915. package/docs/vi/compat/svelte-i18n.md +1 -1
  916. package/docs/vi/compat/transloco.md +1 -1
  917. package/docs/vi/compat/vue-i18n.md +1 -1
  918. package/docs/vi/interest_of_intlayer.md +1 -1
  919. package/docs/vi/intlayer_with_remix_3.md +566 -0
  920. package/docs/zh/benchmark/index.md +4 -1
  921. package/docs/zh/benchmark/nextjs.md +33 -28
  922. package/docs/zh/benchmark/solid.md +14 -11
  923. package/docs/zh/benchmark/svelte.md +13 -10
  924. package/docs/zh/benchmark/tanstack.md +30 -25
  925. package/docs/zh/benchmark/vue.md +12 -8
  926. package/docs/zh/cli/build.md +8 -1
  927. package/docs/zh/cli/configuration.md +3 -1
  928. package/docs/zh/cli/doc-review.md +8 -1
  929. package/docs/zh/cli/doc-translate.md +5 -1
  930. package/docs/zh/cli/extract.md +2 -1
  931. package/docs/zh/cli/fill.md +5 -1
  932. package/docs/zh/cli/index.md +4 -5
  933. package/docs/zh/cli/live.md +5 -1
  934. package/docs/zh/cli/login.md +2 -2
  935. package/docs/zh/cli/pull.md +5 -1
  936. package/docs/zh/cli/push.md +5 -1
  937. package/docs/zh/cli/scan.md +5 -1
  938. package/docs/zh/cli/standalone.md +5 -1
  939. package/docs/zh/cli/test.md +5 -1
  940. package/docs/zh/cli/watch.md +5 -1
  941. package/docs/zh/compat/i18n-js.md +1 -1
  942. package/docs/zh/compat/i18next.md +1 -1
  943. package/docs/zh/compat/lingui.md +1 -1
  944. package/docs/zh/compat/next-i18next.md +1 -1
  945. package/docs/zh/compat/next-intl.md +1 -1
  946. package/docs/zh/compat/next-translate.md +1 -1
  947. package/docs/zh/compat/ngx-translate.md +1 -1
  948. package/docs/zh/compat/nuxtjs-i18n.md +1 -1
  949. package/docs/zh/compat/polyglot.md +1 -1
  950. package/docs/zh/compat/react-i18next.md +1 -1
  951. package/docs/zh/compat/react-intl.md +1 -1
  952. package/docs/zh/compat/svelte-i18n.md +1 -1
  953. package/docs/zh/compat/transloco.md +1 -1
  954. package/docs/zh/compat/vue-i18n.md +1 -1
  955. package/docs/zh/interest_of_intlayer.md +1 -1
  956. package/docs/zh/intlayer_with_remix_3.md +558 -0
  957. package/docs/zh-TW/interest_of_intlayer.md +1 -1
  958. package/frequent_questions/ar/claude_code_token_consumption.md +152 -0
  959. package/frequent_questions/de/claude_code_token_consumption.md +152 -0
  960. package/frequent_questions/en/claude_code_token_consumption.md +152 -0
  961. package/frequent_questions/en-GB/claude_code_token_consumption.md +152 -0
  962. package/frequent_questions/es/claude_code_token_consumption.md +152 -0
  963. package/frequent_questions/fr/claude_code_token_consumption.md +152 -0
  964. package/frequent_questions/hi/claude_code_token_consumption.md +152 -0
  965. package/frequent_questions/id/claude_code_token_consumption.md +152 -0
  966. package/frequent_questions/it/claude_code_token_consumption.md +152 -0
  967. package/frequent_questions/ja/claude_code_token_consumption.md +152 -0
  968. package/frequent_questions/ko/claude_code_token_consumption.md +152 -0
  969. package/frequent_questions/pl/claude_code_token_consumption.md +152 -0
  970. package/frequent_questions/pt/claude_code_token_consumption.md +152 -0
  971. package/frequent_questions/ru/claude_code_token_consumption.md +152 -0
  972. package/frequent_questions/tr/claude_code_token_consumption.md +152 -0
  973. package/frequent_questions/uk/claude_code_token_consumption.md +152 -0
  974. package/frequent_questions/vi/claude_code_token_consumption.md +152 -0
  975. package/frequent_questions/zh/claude_code_token_consumption.md +152 -0
  976. package/package.json +7 -7
  977. package/src/generated/blog.entry.ts +180 -0
  978. package/src/generated/docs.entry.ts +0 -20
  979. package/src/generated/frequentQuestions.entry.ts +20 -0
  980. package/docs/ar/cli/ci.md +0 -186
  981. package/docs/de/cli/ci.md +0 -186
  982. package/docs/en/cli/ci.md +0 -216
  983. package/docs/en-GB/cli/ci.md +0 -186
  984. package/docs/es/cli/ci.md +0 -186
  985. package/docs/fr/cli/ci.md +0 -186
  986. package/docs/hi/cli/ci.md +0 -186
  987. package/docs/id/cli/ci.md +0 -186
  988. package/docs/it/cli/ci.md +0 -186
  989. package/docs/ja/cli/ci.md +0 -186
  990. package/docs/ko/cli/ci.md +0 -186
  991. package/docs/pl/cli/ci.md +0 -186
  992. package/docs/pt/cli/ci.md +0 -186
  993. package/docs/ru/cli/ci.md +0 -186
  994. package/docs/tr/cli/ci.md +0 -186
  995. package/docs/uk/cli/ci.md +0 -186
  996. package/docs/vi/cli/ci.md +0 -186
  997. package/docs/zh/cli/ci.md +0 -186
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-04-20
3
- updatedAt: 2026-05-18
3
+ updatedAt: 2026-09-11
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.1
21
+ date: 2026-09-11
22
+ changes: "Cập nhật kết quả benchmark"
20
23
  - version: 8.9.8
21
24
  date: 2026-05-18
22
25
  changes: "Thêm so sánh sao GitHub"
@@ -56,7 +59,7 @@ Các thư viện quốc tế hóa có tác động nặng nề đến ứng dụ
56
59
 
57
60
  Khi ứng dụng của bạn phát triển, kích thước bundle bundle có thể tăng theo cấp số nhân, điều này có thể làm giảm hiệu năng một cách rõ rệt.
58
61
 
59
- Ví dụ, trong những trường hợp xấu nhất, sau khi triển khai đa ngôn ngữ, trang của bạn có thể nặng hơn gần 4 lần.
62
+ Ví dụ, trong những trường hợp xấu nhất, sau khi triển khai đa ngôn ngữ, trang của bạn có thể nặng hơn gần 2 lần.
60
63
 
61
64
  Một tác động khác của các thư viện i18n là làm chậm quá trình phát triển. Việc chuyển đổi các component thành nội dung đa ngôn ngữ trên nhiều ngôn ngữ khác nhau rất tốn thời gian.
62
65
 
@@ -68,7 +71,7 @@ Intlayer cố gắng tối ưu hóa trên tất cả các khía cạnh này.
68
71
 
69
72
  - **Intlayer** & **next-translate**: Những lựa chọn tốt nhất cho hiệu năng của Next.js, mang lại kích thước nhỏ nhất và hỗ trợ render tĩnh tốt nhất.
70
73
  - **next-intl**: Tùy chọn hợp thời nhất, nhưng nặng và phức tạp để tối ưu hóa cho các ứng dụng lớn.
71
- - **next-i18next**: Phổ biến và giàu plugin, nhưng mang lại gánh nặng bundle đáng kể (~3× Intlayer).
74
+ - **next-i18next**: Phổ biến và giàu plugin, nhưng mang lại gánh nặng bundle đáng kể (~3.5× Intlayer).
72
75
  - **Tránh**: **gt-next** và **lingo.dev** do các vấn đề hiệu năng nghiêm trọng, phụ thuộc vào nhà cung cấp (vendor lock-in) và các lỗi gây hỏng build.
73
76
 
74
77
  ## Kiểm tra ứng dụng của bạn
@@ -109,19 +112,21 @@ Cuối cùng, `Intlayer` áp dụng một tối ưu hóa tại thời điểm bu
109
112
  Đối với benchmark này, chúng tôi đã so sánh các thư viện sau:
110
113
 
111
114
  - `Base App` (Không sử dụng thư viện i18n)
112
- - `next-intlayer` (v8.7.12)
113
- - `next-i18next` (v16.0.5)
114
- - `next-intl` (v4.9.1)
115
- - `@lingui/core` (v5.3.0)
116
- - `next-translate` (v3.1.2)
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)
117
122
  - `next-international` (v1.3.1)
118
123
  - `@inlang/paraglide-js` (v2.15.1)
119
- - `@tolgee/react` (v7.0.0)
120
- - `@lingo.dev/compiler` (v0.4.0)
121
- - `wuchale` (v0.22.11)
122
- - `gt-next` (v6.16.5)
124
+ - `@tolgee/react` (v7.2.0)
125
+ - `@lingo.dev/compiler` (v0.4.12)
126
+ - `wuchale` (v0.26.6)
127
+ - `gt-next` (v11.1.24)
123
128
 
124
- Tôi đã sử dụng phiên bản `Next.js` `16.2.4` với App Router.
129
+ Tôi đã sử dụng phiên bản `Next.js` `16.3.4` với App Router.
125
130
 
126
131
  Tôi đã xây dựng một ứng dụng đa ngôn ngữ với **10 trang** và **10 ngôn ngữ**.
127
132
 
@@ -165,7 +170,7 @@ Tôi đã chạy cùng một ứng dụng đa ngôn ngữ trên trình duyệt t
165
170
 
166
171
  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.
167
172
 
168
- [![Star History Chart](https://api.star-history.com/chart?repos=i18next%2Fnext-i18next%2Camannn%2Fnext-intl%2Clingui%2Fjs-lingui%2Cvinissimus%2Fnext-translate%2Cinostudio%2Fnext-international%2Copral%2Fparaglide-js%2Ctolgee%2Ftolgee-js%2Caymericzip%2Fintlayer&type=date&legend=top-left)](https://www.star-history.com/#i18next/next-i18next&amannn/next-intl&lingui/js-lingui&vinissimus/next-translate&inostudio/next-international&opral/paraglide-js&tolgee/tolgee-js&aymericzip/intlayer)
173
+ [![Star History Chart](https://api.star-history.com/chart?repos=i18next%2Fnext-i18next%2Camannn%2Fnext-intl%2Clingui%2Fjs-lingui%2Cvinissimus%2Fnext-translate%2Cinostudio%2Fnext-international%2Copral%2Fparaglide-js%2Ctolgee%2Ftolgee-js%2Caymericzip%2Fintlayer&type=date&legend=top-left)](https://star-history.com/#i18next/next-i18next&amannn/next-intl&lingui/js-lingui&vinissimus/next-translate&inostudio/next-international&opral/paraglide-js&tolgee/tolgee-js&aymericzip/intlayer)
169
174
 
170
175
  ## Kết quả chi tiết
171
176
 
@@ -175,15 +180,15 @@ Một số giải pháp, chẳng hạn như `gt-next` hoặc `lingo.dev`, rõ r
175
180
 
176
181
  Các vấn đề gặp phải:
177
182
 
178
- **(General Translation)** (`gt-next@6.16.5`):
183
+ **(General Translation)** (`gt-next@11.1.24`):
179
184
 
180
- - Đối với một ứng dụng 110kb, `gt-next` thêm vào hơn 440kb dữ liệu dư thừa.
185
+ - Đối với một ứng dụng 141kb, `gt-next` thêm vào hơn 50kb dữ liệu dư thừa.
181
186
  - Thông báo `Quota Exceeded, please upgrade your plan` ngay trong lần xây dựng đầu tiên với General Translation.
182
187
  - Các bản dịch không được hiển trị; tôi nhận được lỗi `Error: <T> used on the client-side outside of <GTProvider>`, dường như là một lỗi trong thư viện.
183
188
  - Trong khi triển khai **gt-next**, tôi cũng gặp phải một [vấn đề](https://github.com/generaltranslation/gt/issues/1210#event-24510646961) với thư viện: `does not provide an export named 'printAST' - @formatjs/icu-messageformat-parser`, khiến ứng dụng bị hỏng. Sau khi báo cáo vấn đề này, người duy trì đã khắc phục nó trong vòng 24 giờ.
184
189
  - Thư viện ngăn cản việc render tĩnh các trang Next.js.
185
190
 
186
- **(Lingo.dev)** (`@lingo.dev/compiler@0.4.0`):
191
+ **(Lingo.dev)** (`@lingo.dev/compiler@0.4.12`):
187
192
 
188
193
  - Vượt quá hạn mức AI, khiến việc xây dựng bị đình trệ hoàn toàn - vì vậy bạn không thể đưa lên production nếu không trả tiền.
189
194
  - Trình biên dịch đã bỏ sót gần 40% nội dung đã dịch. Tôi đã phải viết lại tất cả các cấu trúc `.map` thành các khối component phẳng để nó hoạt động.
@@ -192,7 +197,7 @@ Các vấn đề gặp phải:
192
197
 
193
198
  ### 2 - Các giải pháp thử nghiệm
194
199
 
195
- **(Wuchale)** (`wuchale@0.22.11`):
200
+ **(Wuchale)** (`wuchale@0.26.6`):
196
201
 
197
202
  Ý tưởng đằng sau `Wuchale` rất thú vị nhưng vẫn chưa khả thi. Tôi đã gặp vấn đề về tính phản ứng và phải ép buộc render lại provider để ứng dụng hoạt động. Tài liệu cũng khá mơ hồ, khiến việc làm quen khó khăn hơn.
198
203
 
@@ -202,21 +207,21 @@ Các vấn đề gặp phải:
202
207
  Cá nhân tôi không thích việc phải tạo lại các tệp JS trước mỗi lần đẩy mã (push), điều này tạo ra rủi ro xung đột merge liên tục qua PR. Công cụ này cũng có vẻ tập trung vào Vite hơn là Next.js.
203
208
  Cuối cùng, so với các giải pháp khác, Paraglide không sử dụng store (ví dụ: React context) để lấy ngôn ngữ hiện tại nhằm render nội dung. Đối với mỗi nút (node) được phân tích, nó sẽ yêu cầu ngôn ngữ từ localStorage / cookie v.v. Điều này dẫn đến việc thực thi logic không cần thiết ảnh hưởng đến tính phản ứng của component.
204
209
 
205
- > Ghi chú về paraglide: giải pháp này đưa mã vào cơ sở mã của bạn để import, kết quả là chỉ số 'kích thước thư viện' trong báo cáo benchmark gần bằng 0. Việc tạo mã (code generation) là một điều tốt, vì hàm được sử dụng sẽ chỉ bao gồm logic cần thiết (toàn bộ tiền tố so với không có tiền tố, cookie so với lưu trữ, v.v.). So sánh với điều này, Intlayer thực hiện việc lọc này thông qua các lần chèn biến môi trường trong quá trình build để buộc bundler phải loại bỏ mã thừa (tree-shake) cho nội dung tùy thuộc vào logic. Nhờ đó, paraglide và intlayer cuối cùng trở thành các giải pháp nhẹ hơn từ 6 đến 10 lần so với i18next hoặc next-intl.
210
+ > Ghi chú về paraglide: giải pháp này đưa mã vào cơ sở mã của bạn để import, kết quả là chỉ số 'kích thước thư viện' trong báo cáo benchmark gần bằng 0. Việc tạo mã (code generation) là một điều tốt, vì hàm được sử dụng sẽ chỉ bao gồm logic cần thiết (toàn bộ tiền tố so với không có tiền tố, cookie so với lưu trữ, v.v.). So sánh với điều này, Intlayer thực hiện việc lọc này thông qua các lần chèn biến môi trường trong quá trình build để buộc bundler phải loại bỏ mã thừa (tree-shake) cho nội dung tùy thuộc vào logic. Nhờ đó, paraglide và intlayer cuối cùng trở thành các giải pháp nhẹ hơn từ 3 đến 8 lần so với i18next hoặc next-intl.
206
211
 
207
212
  ### 3 - Các giải pháp chấp nhận được
208
213
 
209
- **(Tolgee)** (`@tolgee/react@7.0.0`):
214
+ **(Tolgee)** (`@tolgee/react@7.2.0`):
210
215
 
211
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.
212
217
 
213
- **(Next Intl)** (`next-intl@4.9.1`):
218
+ **(Next Intl)** (`next-intl@4.14.2`):
214
219
 
215
- `next-intl` là tùy chọn hợp thời nhất và là tùy chọn mà các trợ lý AI thúc đẩy nhiều nhất, nhưng theo quan điểm của tôi thì điều đó là sai lầm. Bắt đầu rất dễ dàng. Trong thực tế, việc tối ưu hóa để hạn chế rò rỉ rất phức tạp. Việc kết hợp tải động + tạo namespace + các kiểu dữ liệu TypeScript làm chậm quá trình phát triển rất nhiều. Gói bundle cũng khá nặng (~13kb cho `NextIntlClientProvider` + `useTranslations`, tức là gấp hơn 2 lần `next-intlayer`). **next-intl** từng ngăn cản việc render tĩnh các trang Next.js. Nó cung cấp một trình hỗ trợ mang tên `setRequestLocale()`. Điều đó dường như đã được giải quyết một phần cho các tệp tập trung như `en.json` / `fr.json`, nhưng việc render tĩnh vẫn thất bại khi nội dung được chia thành các namespace như `en/shared.json` / `fr/shared.json` / `es/shared.json`.
220
+ `next-intl` là tùy chọn hợp thời nhất và là tùy chọn mà các trợ lý AI thúc đẩy nhiều nhất, nhưng theo quan điểm của tôi thì điều đó là sai lầm. Bắt đầu rất dễ dàng. Trong thực tế, việc tối ưu hóa để hạn chế rò rỉ rất phức tạp. Việc kết hợp tải động + tạo namespace + các kiểu dữ liệu TypeScript làm chậm quá trình phát triển rất nhiều. Gói bundle cũng khá nặng (~14.7kb cho `NextIntlClientProvider` + `useTranslations`, tức là gấp hơn 2.5 lần `next-intlayer`). **next-intl** từng ngăn cản việc render tĩnh các trang Next.js. Nó cung cấp một trình hỗ trợ mang tên `setRequestLocale()`. Điều đó dường như đã được giải quyết một phần cho các tệp tập trung như `en.json` / `fr.json`, nhưng việc render tĩnh vẫn thất bại khi nội dung được chia thành các namespace như `en/shared.json` / `fr/shared.json` / `es/shared.json`.
216
221
 
217
- **(Next I18next)** (`next-i18next@16.0.5`):
222
+ **(Next I18next)** (`next-i18next@16.3.0`):
218
223
 
219
- `next-i18next` có lẽ là tùy chọn phổ biến nhất vì nó là một trong những giải pháp i18n đầu tiên cho các ứng dụng JavaScript. Nó có nhiều plugin cộng đồng. Nó có cùng những nhược điểm chính như `next-intl`. Gói bundle đặc biệt nặng (~18kb cho `I18nProvider` + `useTranslation`, gấp khoảng 3 lần `next-intlayer`).
224
+ `next-i18next` có lẽ là tùy chọn phổ biến nhất vì nó là một trong những giải pháp i18n đầu tiên cho các ứng dụng JavaScript. Nó có nhiều plugin cộng đồng. Nó có cùng những nhược điểm chính như `next-intl`. Gói bundle đặc biệt nặng (~19.7kb cho `I18nProvider` + `useTranslation`, gấp khoảng 3.5 lần `next-intlayer`).
220
225
 
221
226
  Các định dạng thông báo cũng khác nhau: `next-intl` sử dụng ICU MessageFormat, trong khi `i18next` sử dụng định dạng riêng của mình.
222
227
 
@@ -224,17 +229,17 @@ Các định dạng thông báo cũng khác nhau: `next-intl` sử dụng ICU Me
224
229
 
225
230
  `next-international` cũng giải quyết các vấn đề trên nhưng không khác nhiều so với `next-intl` hay `next-i18next`. Nó bao gồm `scopedT()` cho các bản dịch cụ thể theo namespace, nhưng việc sử dụng nó về cơ bản không ảnh hưởng đến kích thước bundle bundle.
226
231
 
227
- **(Lingui)** (`@lingui/core@5.3.0`):
232
+ **(Lingui)** (`@lingui/core@6.6.0`):
228
233
 
229
234
  `Lingui` thường được khen ngợi. Cá nhân tôi thấy quy trình `lingui extract` / `lingui compile` phức tạp hơn các lựa chọn thay thế, mà không có ưu điểm rõ ràng. Tôi cũng nhận thấy cú pháp không nhất quán gây nhầm lẫn cho AI (ví dụ: `t()`, `t''`, `i18n.t()`, `<Trans>`).
230
235
 
231
236
  ### 4 - Các khuyến nghị
232
237
 
233
- **(Next Translate)** (`next-translate@3.1.2`):
238
+ **(Next Translate)** (`next-translate@3.2.0`):
234
239
 
235
- `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à tùy chọn nhẹ nhất ở đây (~2.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.
240
+ `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.
236
241
 
237
- **(Intlayer)** (`next-intlayer@8.7.12`):
242
+ **(Intlayer)** (`next-intlayer@9.5.1`):
238
243
 
239
244
  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.
240
245
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-04-20
3
- updatedAt: 2026-05-18
3
+ updatedAt: 2026-09-11
4
4
  title: Giải pháp i18n tốt nhất cho Solid 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) 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.
6
6
  keywords:
@@ -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.1
21
+ date: 2026-09-11
22
+ changes: "Cập nhật kết quả benchmark"
20
23
  - version: 8.9.8
21
24
  date: 2026-05-18
22
25
  changes: "Thêm so sánh sao GitHub"
@@ -62,9 +65,9 @@ Tác động khác là đối với trải nghiệm nhà phát triển (DX): cá
62
65
 
63
66
  ## TL;DR
64
67
 
65
- - **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 (v8.7.12).
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).
66
69
  - **@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.
67
- - **solid-i18next**: Tùy chọn tiêu chuẩn nhưng nặng (~4.7 lần Intlayer) với các nhược điểm tương tự như React i18next.
70
+ - **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.
68
71
  - **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.
69
72
 
70
73
  ## Kiểm tra ứng dụng của bạn
@@ -97,10 +100,10 @@ Các cú pháp được xây dựng xung quanh `t('a.b.c')` rất tiện lợi n
97
100
  Đối với benchmark này, chúng tôi đã so sánh các thư viện sau:
98
101
 
99
102
  - `Base App` (Không có thư viện i18n)
100
- - `solid-intlayer` (v8.7.12)
103
+ - `solid-intlayer` (v9.5.0)
101
104
  - `@solid-primitives/i18n` (v2.2.1)
102
- - `solid-i18next` (v17.0.2)
103
- - `@inlang/paraglide-js` (v2.17.0)
105
+ - `i18next` (v26.0.8) + `@mbarzda/solid-i18next` (v1.4.1)
106
+ - `@inlang/paraglide-js` (v2.25.1)
104
107
 
105
108
  Framework là `Solid` với một ứng dụng đa ngôn ngữ gồm **10 trang** và **10 ngôn ngữ**.
106
109
 
@@ -144,7 +147,7 @@ Tôi chạy cùng một ứng dụng đa ngôn ngữ trong trình duyệt thực
144
147
 
145
148
  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.
146
149
 
147
- [![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://www.star-history.com/#solidjs-community/solid-primitives&mbarzda/solid-i18next&opral/paraglide-js&aymericzip/intlayer)
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)
148
151
 
149
152
  ## Kết quả chi tiết
150
153
 
@@ -154,11 +157,11 @@ Sao GitHub là một chỉ số mạnh mẽ về mức độ phổ biến của
154
157
 
155
158
  ### 2 - Các giải pháp chấp nhận được
156
159
 
157
- **(solid-i18next)** (`solid-i18next@17.0.2`):
160
+ **(solid-i18next)** (`i18next@26.0.8`):
158
161
 
159
162
  `solid-i18next` có lẽ là tùy chọn phổ biến nhất vì đây là một trong những giải pháp đầu tiên đáp ứng nhu cầu i18n của các ứng dụng JavaScript. Nó cũng có một bộ plug-in cộng đồng rộng lớn cho các vấn đề cụ thể.
160
163
 
161
- Package này nặng (~14.6kb, gấp khoảng 4.7 lần `solid-intlayer`).
164
+ Package này nặng (~14.9kb, gấp khoảng 3.5 lần `solid-intlayer`).
162
165
 
163
166
  Tuy nhiên, nó có cùng những nhược điểm chính như các stack được xây dựng trên `t('a.b.c')`: có thể tối ưu hóa nhưng rất tốn thời gian và các dự án lớn có nguy cơ áp dụng các phương pháp không tốt (namespace + tải động + kiểu).
164
167
 
@@ -167,7 +170,7 @@ Tuy nhiên, nó có cùng những nhược điểm chính như các stack đư
167
170
  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.
168
171
  Nó cũng thiếu lazy loading và scoping namespace để tối ưu hóa kích thước trang.
169
172
 
170
- **(Paraglide)** (`@inlang/paraglide-js@2.17.0`):
173
+ **(Paraglide)** (`@inlang/paraglide-js@2.25.1`):
171
174
 
172
175
  `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.
173
176
  Cá nhân tôi không thích việc phải tạo lại các file JS trước mỗi lần push, điều này tạo ra rủi ro xung đột merge liên tục thông qua các PR.
@@ -175,7 +178,7 @@ Cuối cùng, so với các giải pháp khác, Paraglide không sử dụng sto
175
178
 
176
179
  ### 3 - Khuyến nghị
177
180
 
178
- **(Intlayer)** (`solid-intlayer@8.7.12`):
181
+ **(Intlayer)** (`solid-intlayer@9.5.0`):
179
182
 
180
183
  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.
181
184
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-04-20
3
- updatedAt: 2026-05-18
3
+ updatedAt: 2026-09-11
4
4
  title: Giải pháp i18n tốt nhất cho Svelte 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) 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.
6
6
  keywords:
@@ -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.1
21
+ date: 2026-09-11
22
+ changes: "Cập nhật kết quả benchmark"
20
23
  - version: 8.9.8
21
24
  date: 2026-05-18
22
25
  changes: "Thêm so sánh sao GitHub"
@@ -62,9 +65,9 @@ Tác động khác là đối với trải nghiệm nhà phát triển (DX): cá
62
65
 
63
66
  ## TL;DR
64
67
 
65
- - **Intlayer**: Lựa chọn hiệu quả nhất về hiệu suất (v8.7.12) với dấu chân (footprint) nhỏ nhất.
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.
66
69
  - **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.
67
- - **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 (~7 lần Intlayer).
70
+ - **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).
68
71
 
69
72
  ## Kiểm tra ứng dụng của bạn
70
73
 
@@ -96,9 +99,9 @@ Các cú pháp được xây dựng xung quanh `t('a.b.c')` rất tiện lợi n
96
99
  Đối với benchmark này, chúng tôi đã so sánh các thư viện sau:
97
100
 
98
101
  - `Base App` (Không có thư viện i18n)
99
- - `svelte-intlayer` (v8.7.12)
102
+ - `svelte-intlayer` (v9.5.0)
100
103
  - `svelte-i18n` (v4.0.1)
101
- - `@inlang/paraglide-js` (v2.17.0)
104
+ - `@inlang/paraglide-js` (v2.25.1)
102
105
 
103
106
  Framework là `Svelte` với một ứng dụng đa ngôn ngữ gồm **10 trang** và **10 ngôn ngữ**.
104
107
 
@@ -142,7 +145,7 @@ Tôi đã chạy cùng một ứng dụng đa ngôn ngữ trong trình duyệt t
142
145
 
143
146
  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.
144
147
 
145
- [![Star History Chart](https://api.star-history.com/chart?repos=kaisermann%2Fsvelte-i18n%2Copral%2Fparaglide-js%2Caymericzip%2Fintlayer&type=date&legend=top-left)](https://www.star-history.com/#kaisermann/svelte-i18n&opral/paraglide-js&aymericzip/intlayer)
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)
146
149
 
147
150
  ## Kết quả chi tiết
148
151
 
@@ -152,7 +155,7 @@ Sao GitHub là một chỉ số mạnh mẽ về mức độ phổ biến của
152
155
 
153
156
  ### 2 - Các giải pháp chấp nhận được
154
157
 
155
- **(Paraglide)** (`@inlang/paraglide-js@2.17.0`):
158
+ **(Paraglide)** (`@inlang/paraglide-js@2.25.1`):
156
159
 
157
160
  `Paraglide` đưa ra một cách tiếp cận sáng tạo, được cân nhắc kỹ lưỡng. Trong ngữ cảnh của một ứng dụng Vite + Svelte, tree-shaking mà công ty họ quảng cáo hoạt động như mong đợi, điều này thật tuyệt vời.
158
161
  Nhưng trong trường hợp React + TanStack Start, tree-shaking không hoạt động như mong đợi, Next.js cũng vậy. Điều đó có nghĩa là, việc sử dụng Paraglide trong một dự án Svelte và TanStack Start sẽ đáng để kiểm tra lại.
@@ -162,13 +165,13 @@ Cuối cùng, so với các giải pháp khác, Paraglide không sử dụng sto
162
165
 
163
166
  > 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.
164
167
 
165
- **(svelte-i18n)** (`svelte-i18n@3.4.0`):
168
+ **(svelte-i18n)** (`svelte-i18n@4.0.1`):
166
169
 
167
- 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 (~15.9kb, gấp khoảng 7 lần `svelte-intlayer`).
170
+ 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`).
168
171
 
169
172
  ### 3 - Khuyến nghị
170
173
 
171
- **(Intlayer)** (`svelte-intlayer@8.7.12`):
174
+ **(Intlayer)** (`svelte-intlayer@9.5.0`):
172
175
 
173
176
  Tôi sẽ không đích thân đánh giá `svelte-intlayer` vì tính khách quan, vì đó là giải pháp của chính tôi.
174
177
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-04-20
3
- updatedAt: 2026-05-18
3
+ updatedAt: 2026-09-11
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.1
21
+ date: 2026-09-11
22
+ changes: "Cập nhật kết quả benchmark"
20
23
  - version: 8.9.8
21
24
  date: 2026-05-18
22
25
  changes: "Thêm so sánh sao GitHub"
@@ -62,7 +65,7 @@ Tác động khác là đối với trải nghiệm phát triển (DX): cách b
62
65
 
63
66
  ## TL;DR
64
67
 
65
- - **Intlayer**: Cung cấp hiệu năng tốt nhất và kích thước bundle nhỏ nhất (v8.7.12) cho TanStack Start.
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.
66
69
  - **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.
67
70
  - **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.
68
71
  - **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).
@@ -97,16 +100,18 @@ Các cú pháp được xây dựng xung quanh `const t = useTranslation()` + `t
97
100
  Đối với benchmark này, chúng tôi đã so sánh các thư viện sau:
98
101
 
99
102
  - `Base App` (Không sử dụng thư viện i18n)
100
- - `react-intlayer` (v8.7.12)
101
- - `react-i18next` (v17.0.2)
102
- - `use-intl` (v4.9.1)
103
- - `@lingui/core` (v5.3.0)
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)
104
109
  - `@inlang/paraglide-js` (v2.15.1)
105
- - `@tolgee/react` (v7.0.0)
106
- - `react-intl` (v10.1.1)
107
- - `wuchale` (v0.22.11)
108
- - `gt-react` (vlatest)
109
- - `lingo.dev` (v0.133.9)
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)
110
115
 
111
116
  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ữ**.
112
117
 
@@ -150,7 +155,7 @@ Tôi chạy cùng một ứng dụng đa ngôn ngữ trong một trình duyệt
150
155
 
151
156
  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.
152
157
 
153
- [![Star History Chart](https://api.star-history.com/chart?repos=formatjs%2Fformatjs%2Ci18next%2Freact-i18next%2Clingui%2Fjs-lingui%2Camannn%2Fnext-intl%2Copral%2Fparaglide-js%2Ctolgee%2Ftolgee-js%2Caymericzip%2Fintlayer&type=date&legend=top-left)](https://www.star-history.com/#formatjs/formatjs&i18next/react-i18next&lingui/js-lingui&amannn/next-intl&opral/paraglide-js&tolgee/tolgee-js&aymericzip/intlayer)
158
+ [![Star History Chart](https://api.star-history.com/chart?repos=formatjs%2Fformatjs%2Ci18next%2Freact-i18next%2Clingui%2Fjs-lingui%2Camannn%2Fnext-intl%2Copral%2Fparaglide-js%2Ctolgee%2Ftolgee-js%2Caymericzip%2Fintlayer&type=date&legend=top-left)](https://star-history.com/#formatjs/formatjs&i18next/react-i18next&lingui/js-lingui&amannn/next-intl&opral/paraglide-js&tolgee/tolgee-js&aymericzip/intlayer)
154
159
 
155
160
  ## Kết quả chi tiết
156
161
 
@@ -160,15 +165,15 @@ Một số giải pháp, chẳng hạn như `gt-react` hoặc `lingo.dev`, rõ r
160
165
 
161
166
  Các vấn đề gặp phải:
162
167
 
163
- **(General Translation)** (`gt-react@latest`):
168
+ **(General Translation)** (`gt-react@10.18.3`):
164
169
 
165
- - Đối với một ứng dụng khoảng 110kb, `gt-react` có thể thêm vào hơn 440kb dữ liệu dư thừa (mức độ quan sát được trên triển khai Next.js trong cùng một benchmark).
170
+ - Đối với một ứng dụng khoảng 111kb, `gt-react` có thể thêm vào hơn 170kb dữ liệu dư thừa (mức độ quan sát được trên triển khai Next.js trong cùng một benchmark).
166
171
  - Thông báo `Quota Exceeded, please upgrade your plan` ngay trong lần xây dựng đầu tiên với General Translation.
167
172
  - Các bản dịch không được render; tôi nhận được lỗi `Error: <T> used on the client-side outside of <GTProvider>`, dường như là một lỗi trong thư viện đó.
168
173
  - Trong khi triển khai **gt-tanstack-start-react**, tôi cũng gặp phải một [vấn đề](https://github.com/generaltranslation/gt/issues/1210#event-24510646961) với thư viện: `does not provide an export named 'printAST' - @formatjs/icu-messageformat-parser`, khiến ứng dụng bị hỏng. Sau khi báo cáo, người duy trì đã khắc phục nó trong vòng 24 giờ.
169
174
  - Các thư viện này sử dụng một anti-pattern thông qua hàm `initializeGT()`, ngăn cản gói bundle loại bỏ mã thừa một cách sạch sẽ.
170
175
 
171
- **(Lingo.dev)** (`lingo.dev@0.133.9`):
176
+ **(Lingo.dev)** (`lingo.dev@0.138.7`):
172
177
 
173
178
  - Vượt quá hạn mức AI (hoặc chặn phụ thuộc server), khiến việc xây dựng / production gặp rủi ro nếu không trả tiền.
174
179
  - Trình biên dịch đã bỏ sót gần 40% nội dung đã dịch. Tôi đã phải viết lại tất cả các cấu trúc `.map` thành các khối component phẳng để nó hoạt động.
@@ -178,7 +183,7 @@ Các vấn đề gặp phải:
178
183
 
179
184
  ### 2 - Các giải pháp thử nghiệm
180
185
 
181
- **(Wuchale)** (`wuchale@0.22.11`):
186
+ **(Wuchale)** (`wuchale@0.26.6`):
182
187
 
183
188
  Ý tưởng đằng sau `Wuchale` rất thú vị nhưng vẫn chưa phải là một giải pháp khả thi. Tôi đã gặp vấn đề về tính phản ứng với thư viện này và phải ép buộc render lại provider để ứng dụng hoạt động trên TanStack Start. Tài liệu cũng khá mơ hồ, khiến việc làm quen khó khăn hơn.
184
189
 
@@ -188,9 +193,9 @@ Các vấn đề gặp phải:
188
193
 
189
194
  `Paraglide` mang đến một phương pháp tiếp cận sáng tạo và được cân nhắc kỹ lưỡng. Dù vậy, trong benchmark này, khả năng loại bỏ mã thừa mà công ty họ quảng cáo đã không hoạt động cho triển khai Next.js hoặc cho TanStack Start của tôi. Quy trình làm việc và trải nghiệm phát triển cũng phức tạp hơn các tùy chọn khác. Cá nhân tôi không phải là fan của việc phải tạo lại các tệp JS trước mỗi lần đẩy mã, điều này tạo ra rủi ro xung đột merge liên tục cho các nhà phát triển qua PR.
190
195
 
191
- > Lưu ý về paraglide: giải pháp này đưa mã vào mã nguồn của bạn cho các lần nhập; kết quả là, 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, vì hàm được sử dụng sẽ chỉ bao gồm logic cần thiết (tiền tố ở mọi nơi so với không có tiền tố, cookie so với lưu trữ, v.v.). So với đó, Intlayer thực hiện việc lọc này thông qua việc đưa các biến môi trường vào bản dựng để buộc trình đóng gói (bundler) thực hiện tree-shake nội dung tùy thuộc vào logic. Nhờ đó, paraglide và intlayer cuối cùng là những giải pháp nhẹ hơn từ 6 đến 10 lần so with i18next hoặc next-intl.
196
+ > Lưu ý về paraglide: giải pháp này đưa mã vào mã nguồn của bạn cho các lần nhập; kết quả là, 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, vì hàm được sử dụng sẽ chỉ bao gồm logic cần thiết (tiền tố ở mọi nơi so với không có tiền tố, cookie so với lưu trữ, v.v.). So với đó, Intlayer thực hiện việc lọc này thông qua việc đưa các biến môi trường vào bản dựng để buộc trình đóng gói (bundler) thực hiện tree-shake nội dung tùy thuộc vào logic. Nhờ đó, paraglide và intlayer cuối cùng là những giải pháp nhẹ hơn từ 3 đến 10 lần so with i18next hoặc next-intl.
192
197
 
193
- **(Tolgee)** (`@tolgee/react@7.0.0`):
198
+ **(Tolgee)** (`@tolgee/react@7.2.0`):
194
199
 
195
200
  `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.
196
201
 
@@ -198,37 +203,37 @@ Package này khá nặng (~11.1kb, gấp hơn 2× `react-intlayer`).
198
203
 
199
204
  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.
200
205
 
201
- **(use-intl)** (`use-intl@4.9.1`):
206
+ **(use-intl)** (`use-intl@4.14.2`):
202
207
 
203
208
  `use-intl` là phần "intl" hợp thời nhất trong hệ sinh thái React (cùng họ với `next-intl`) và thường được các trợ lý AI thúc đẩy, nhưng theo quan điểm của tôi thì điều đó là sai lầm trong một thiết lập ưu tiên hiệu năng. Bắt đầu khá đơn giản. Trong thực tế, quá trình tối ưu hóa và hạn chế rò rỉ khá phức tạp. Tương tự, việc kết hợp tải động + tạo namespace + các kiểu dữ liệu TypeScript làm chậm quá trình phát triển rất nhiều.
204
209
 
205
210
  Trên TanStack Start, bạn tránh được các cạm bẫy đặc thù của Next.js (`setRequestLocale`, render tĩnh), nhưng vấn đề cốt lõi là như nhau: nếu không có kỷ luật nghiêm ngặt, gói bundle sẽ nhanh chóng mang theo quá nhiều thông điệp và việc bảo trì namespace cho từng route trở nên mệt mỏi.
206
211
 
207
- **(react-i18next)** (`react-i18next@17.0.2`):
212
+ **(react-i18next)** (`react-i18next@17.0.13`):
208
213
 
209
214
  `react-i18next` có lẽ là tùy chọn phổ biến nhất vì nó là một trong những giải pháp đầu tiên phục vụ nhu cầu i18n cho các ứng dụng JavaScript. Nó cũng có một bộ plugin cộng đồng rộng lớn cho các vấn đề cụ thể.
210
215
 
211
216
  Tuy nhiên, nó có cùng những nhược điểm chính như các ngăn công nghệ được xây dựng trên `t('a.b.c')`: tối ưu hóa là có thể nhưng rất tốn thời gian, và các dự án lớn có rủi ro rơi vào các thực hành xấu (namespace + tải động + kiểu dữ liệu).
212
217
 
213
- Package này đặc biệt nặng (~17.3kb, tức là khoảng 3.5× `react-intlayer`).
218
+ Package này đặc biệt nặng (~18.4kb, tức là khoảng 3.5× `react-intlayer`).
214
219
 
215
220
  Các định dạng thông báo cũng khác nhau: `use-intl` sử dụng ICU MessageFormat, trong khi `i18next` sử dụng định dạng riêng của mình - điều này làm phức tạp thêm công cụ hoặc quá trình di chuyển nếu bạn trộn lẫn chúng.
216
221
 
217
- **(Lingui)** (`@lingui/core@5.3.0`):
222
+ **(Lingui)** (`@lingui/core@6.6.0`):
218
223
 
219
224
  `Lingui` thường được khen ngợi. Cá nhân tôi thấy quy trình làm việc xung quanh `lingui extract` / `lingui compile` phức tạp hơn các phương pháp tiếp cận khác, mà không có ưu điểm rõ ràng trong benchmark TanStack Start này. Tôi cũng nhận thấy cú pháp không nhất quán gây nhầm lẫn cho AI (ví dụ: `t()`, `t''`, `i18n.t()`, `<Trans>`).
220
225
 
221
- **(react-intl)** (`react-intl@10.1.1`):
226
+ **(react-intl)** (`react-intl@10.1.26`):
222
227
 
223
228
  `react-intl` là một triển khai hiệu năng từ nhóm Format.js. Trải nghiệm phát triển vẫn còn rườm rà: `const intl = useIntl()` + `intl.formatMessage({ id: "xx.xx" })` thêm vào sự phức tạp, công việc JavaScript bổ sung và ràng buộc instance i18n toàn cục vào nhiều nút trong cây React.
224
229
 
225
- Package cũng khá nặng (~14.4kb, tức là khoảng 3× `react-intlayer`).
230
+ Package cũng khá nặng (~15.3kb, tức là khoảng 3× `react-intlayer`).
226
231
 
227
232
  ### 4 - Các khuyến nghị
228
233
 
229
234
  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ỉ.
230
235
 
231
- **(Intlayer)** (`react-intlayer@8.7.12`):
236
+ **(Intlayer)** (`react-intlayer@9.5.1`):
232
237
 
233
238
  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.
234
239
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-04-20
3
- updatedAt: 2026-05-18
3
+ updatedAt: 2026-09-11
4
4
  title: Giải pháp i18n tốt nhất cho Vue 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) 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.
6
6
  keywords:
@@ -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.1
21
+ date: 2026-09-11
22
+ changes: "Cập nhật kết quả benchmark"
20
23
  - version: 8.9.8
21
24
  date: 2026-05-18
22
25
  changes: "Thêm so sánh sao GitHub"
@@ -62,7 +65,7 @@ Tác động khác là đối với trải nghiệm nhà phát triển (DX): cá
62
65
 
63
66
  ## TL;DR
64
67
 
65
- - **Intlayer**: Giải pháp nhẹ nhất (v8.7.12) với tính năng scoping và tải động gốc.
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.
66
69
  - **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.
67
70
  - **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.
68
71
 
@@ -96,7 +99,8 @@ Các cú pháp được xây dựng xung quanh `const { t } = useI18n()` + `t('a
96
99
  Đối với benchmark này, chúng tôi đã so sánh các thư viện sau:
97
100
 
98
101
  - `Base App` (Không có thư viện i18n)
99
- - `vue-intlayer` (v8.7.12)
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)
100
104
  - `vue-i18n` (v11.4.0)
101
105
  - `fluent-vue` (v3.8.2)
102
106
 
@@ -142,7 +146,7 @@ Tôi đã chạy cùng một ứng dụng đa ngôn ngữ trong một trình duy
142
146
 
143
147
  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.
144
148
 
145
- [![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://www.star-history.com/#intlify/vue-i18n&fluent-vue/fluent-vue&aymericzip/intlayer)
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)
146
150
 
147
151
  ## Kết quả chi tiết
148
152
 
@@ -156,14 +160,14 @@ Sao GitHub là một chỉ số mạnh mẽ về mức độ phổ biến của
156
160
 
157
161
  - **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.
158
162
 
159
- Package này rất nặng (~24.3kb, gấp khoảng 9 lần `vue-intlayer`).
163
+ Package này rất nặng (~24.3kb, gấp khoảng 6 lần `vue-intlayer`).
160
164
 
161
- **(fluent-vue)** (`fluent-vue@0.5.0`):
165
+ **(fluent-vue)** (`fluent-vue@3.8.2`):
162
166
 
163
- - **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 (~92.7kb, gấp khoảng 34 lần `vue-intlayer`).
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`).
164
168
 
165
169
  ### 3 - Khuyến nghị
166
170
 
167
- **(Intlayer)** (`vue-intlayer@8.7.12`):
171
+ **(Intlayer)** (`vue-intlayer@9.5.0`):
168
172
 
169
173
  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.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2024-08-11
3
- updatedAt: 2025-11-22
3
+ updatedAt: 2026-09-12
4
4
  title: Xây dựng Từ điển
5
5
  description: Tìm hiểu cách xây dựng từ điển Intlayer của bạn từ các tệp khai báo nội dung.
6
6
  keywords:
@@ -14,6 +14,9 @@ slugs:
14
14
  - cli
15
15
  - build
16
16
  history:
17
+ - version: 9.5.2
18
+ date: 2026-09-12
19
+ changes: "Thêm cờ `--ci`"
17
20
  - version: 8.1.5
18
21
  date: 2026-02-23
19
22
  changes: "Thêm tùy chọn checkTypes"
@@ -92,6 +95,10 @@ Lệnh này sẽ tìm các tệp khai báo nội dung của bạn theo mặc đ
92
95
 
93
96
  > Ví dụ: `npx intlayer build --no-cache`
94
97
 
98
+ - **`--ci`**: Chạy lệnh trong mọi dự án Intlayer của monorepo (hoặc chỉ dự án hiện tại khi chạy từ thư mục dự án). Thông tin xác thực theo từng dự án có thể được đưa vào qua `INTLAYER_PROJECT_CREDENTIALS`, một đối tượng JSON ánh xạ đường dẫn dự án tới `{ "clientId", "clientSecret" }`.
99
+
100
+ > Ví dụ: `npx intlayer build --ci`
101
+
95
102
  - **`--check-types`**: Kiểm tra các kiểu của tệp khai báo nội dung.
96
103
 
97
104
  > Ví dụ: `npx intlayer build --check-types`
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2024-08-11
3
- updatedAt: 2025-11-22
3
+ updatedAt: 2026-09-12
4
4
  title: Quản lý Cấu hình
5
5
  description: Tìm hiểu cách lấy và đẩy cấu hình Intlayer của bạn lên CMS.
6
6
  keywords:
@@ -51,6 +51,7 @@ bun x intlayer configuration get
51
51
  - **`--base-dir`**: Chỉ định thư mục gốc cho dự án.
52
52
  - **`--verbose`**: Bật ghi log chi tiết để gỡ lỗi. (mặc định là true khi sử dụng CLI)
53
53
  - **`--no-cache`**: Vô hiệu hóa bộ nhớ đệm.
54
+ - **`--ci`**: Chạy lệnh trong mọi dự án Intlayer của monorepo (hoặc chỉ dự án hiện tại khi chạy từ thư mục dự án). Thông tin xác thực theo từng dự án có thể được đưa vào qua `INTLAYER_PROJECT_CREDENTIALS`, một đối tượng JSON ánh xạ đường dẫn dự án tới `{ "clientId", "clientSecret" }`.
54
55
 
55
56
  ## Đẩy Cấu hình
56
57
 
@@ -84,5 +85,6 @@ bun x intlayer configuration push
84
85
  - **`--base-dir`**: Chỉ định thư mục gốc cho dự án.
85
86
  - **`--verbose`**: Bật ghi log chi tiết để gỡ lỗi. (mặc định là true khi sử dụng CLI)
86
87
  - **`--no-cache`**: Vô hiệu hóa bộ nhớ đệm.
88
+ - **`--ci`**: Chạy lệnh trong mọi dự án Intlayer của monorepo (hoặc chỉ dự án hiện tại khi chạy từ thư mục dự án). Thông tin xác thực theo từng dự án có thể được đưa vào qua `INTLAYER_PROJECT_CREDENTIALS`, một đối tượng JSON ánh xạ đường dẫn dự án tới `{ "clientId", "clientSecret" }`.
87
89
 
88
90
  Bằng cách đẩy cấu hình, dự án của bạn được tích hợp hoàn toàn với Intlayer CMS, cho phép quản lý từ điển liền mạch giữa các nhóm.