@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
@@ -0,0 +1,304 @@
1
+ ---
2
+ createdAt: 2026-09-13
3
+ updatedAt: 2026-09-13
4
+ title: "Lingui vs @intlayer/lingui:相同宏,不同运行时"
5
+ description: "当 React 应用程序保留其 Lingui 宏但通过 @intlayer/lingui 兼容适配器提供服务时会发生什么变化。在相同的 TanStack Start 代码上测量的组件大小、水合、泄漏和每页 JavaScript,包括适配器处于劣势的方面。"
6
+ keywords:
7
+ - Lingui
8
+ - "@intlayer/lingui"
9
+ - Intlayer
10
+ - 兼容适配器
11
+ - 迁移
12
+ - 国际化
13
+ - i18n
14
+ - 基准测试
15
+ - 打包体积
16
+ - 博客
17
+ - React
18
+ - TanStack Start
19
+ - Vite
20
+ slugs:
21
+ - blog
22
+ - lingui-vs-intlayer-lingui
23
+ author: aymericzip
24
+ ---
25
+
26
+ # Lingui VS @intlayer/lingui | 相同宏,不同运行时
27
+
28
+ `@intlayer/lingui` 是针对 `@lingui/core` 和 `@lingui/react` 的兼容适配器。你的 `` t`...` ``、`<Trans>`、`useLingui()` 和 `i18n._()` 调用保持完全不变;宏继续正常编译;改变的是运行时消息的来源。每个调用点不再依赖每个语言环境一个编译好的全局目录,而是绑定到专门为其编译的 Intlayer 字典。
29
+
30
+ 本文在相同的 TanStack Start 应用程序上测量了这种替换,该程序分别使用纯 Lingui 和使用适配器构建了一次。这些数据来自 [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom)。关于这两个库作为独立库的对比,请阅读 [Lingui vs Intlayer](https://intlayer.org/zh/blog/lingui-vs-intlayer)。本文主要关注适配器改变了什么,以及在哪些方面它没有帮助。
31
+
32
+ <TOC/>
33
+
34
+ > **摘要 (tl;dr)**:在同一个 TanStack Start 应用程序中,`@intlayer/lingui` 在不改动宏的情况下,将平均组件体积从 **85.5 KB 降至 12.8 KB** gzip,水合时间从 **28 ms 降至 19.7 ms**,语言切换时间从 **5.9 ms 降至 2.9 ms**。在朴素设置(预先加载每个目录)中,它还消除了 **90% 的页面泄漏** 并减少了每页 12 KB。但在延迟加载设置中,它每页交付 **137 KB,而纯 Lingui 为 115 KB**:适配器在运行时解析 ICU,而 Lingui 交付预编译的标记数组。源语言环境泄漏(约 9-10%)在两边完全相同,因为它来自于嵌入在组件中的 `message` 回退,而不是来自运行时。该适配器是一个 Vite 插件;测试是在 TanStack Start 上进行的。
35
+
36
+ ## 什么是 `@intlayer/lingui`
37
+
38
+ Lingui 由编译器和运行时组成。源码中的宏被提取到每个语言环境的 `.po`(或 JSON)目录中,编译为每个语言环境的 JS 模块,并通过 `i18n.load()` + `i18n.activate()` 加载到全局 `I18n` 实例中。每个 `useLingui()` 订阅该实例;每个 `_()` 调用都会在活动目录中查找其 ID。
39
+
40
+ `@intlayer/lingui` 保留了宏和 API,并替换了目录查找逻辑:
41
+
42
+ 1. **导入别名化。** 来自 `@intlayer/lingui/plugin` 的 `lingui()` 插件包装了 `vite-intlayer` 并添加了 `resolve.alias` 条目,使得 `@lingui/core` 和 `@lingui/react` 解析为 `@intlayer/lingui`。你的导入代码无需改动。
43
+ 2. **目录作为单一事实来源。** `syncJSON` 插件(或用于 `.po` 文件的 `syncPO`)读取你现有的目录并将其转换为 Intlayer 字典,当 CLI 或 CMS 更新时将翻译写回。通过 `splitKeys: "key-prefix"`,带点分 ID(`footer.github`、`hero.title`)的扁平目录会拆分成每个前缀一个的小字典,而不是一个 244 KB 的庞大文件。
44
+ 3. **调用点绑定。** Intlayer 优化通道收集每个文件中传递给 `_`、`t` 和 `<Trans>` 的 ID,并将匹配的字典交付给组件。`<Trans id="hero.title">` 独立绑定;`useLingui()` 绑定到该文件中使用的每个前缀。不带点分的 ID(哈希 ID、`mockBanner`)将回退到 Lingui 的单一 `messages` 字典。
45
+
46
+ ```tsx fileName="src/components/Hero.tsx"
47
+ // 你的代码,保持不变
48
+ import { useLingui } from "@lingui/react";
49
+ import { Trans } from "@lingui/react/macro";
50
+
51
+ const Hero = () => {
52
+ const { _ } = useLingui();
53
+ return (
54
+ <section>
55
+ <h1>{_({ id: "hero.title", message: "Measure what you ship" })}</h1>
56
+ <Trans id="hero.subtitle">Every byte counts</Trans>
57
+ </section>
58
+ );
59
+ };
60
+ ```
61
+
62
+ ```tsx fileName="编译器输出内容(简化版)"
63
+ import _dicHash_hero from "../.intlayer/dictionaries/hero.mjs";
64
+ import {
65
+ useDictionary as useLingui,
66
+ TransDictionary as Trans,
67
+ } from "@intlayer/lingui";
68
+
69
+ const Hero = () => {
70
+ const { _ } = useLingui(_dicHash_hero);
71
+ return (
72
+ <section>
73
+ <h1>{_({ id: "hero.title", message: "Measure what you ship" })}</h1>
74
+ <Trans id="hero.subtitle" dictionary={_dicHash_hero}>
75
+ Every byte counts
76
+ </Trans>
77
+ </section>
78
+ );
79
+ };
80
+ ```
81
+
82
+ 组件不再需要访问全局实例及其背后的整个目录。它仅访问 `hero`。这就是下表中组件大小列下降 7 倍的全部原因。
83
+
84
+ ## 适配器保留、忽略和不替换的内容
85
+
86
+ | Lingui API | 搭配 `@intlayer/lingui` |
87
+ | ----------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
88
+ | `` t`...` ``、`msg`、`plural`、`select`、`<Trans>` 宏 | ✅ 保留。在 Intlayer 优化通道之前,在构建配置中保留 `@lingui/babel-plugin-lingui-macro` 或 `@lingui/swc-plugin` |
89
+ | `useLingui()` → `{ i18n, _, t }` | ✅ 保留。在 Provider 外部也能工作(语言环境派生自 `react-intlayer`) |
90
+ | `i18n._(id, values)`、`i18n.t()` | ✅ 保留。显式 ID 和哈希 ID 均可解析 |
91
+ | ICU 复数、`select`、`selectordinal`、`#` | ✅ 保留,通过 Intlayer 的 ICU 解析器处理 |
92
+ | `i18n.date()`、`i18n.number()`、`formats` | ✅ 保留,由原生 `Intl` 支持 |
93
+ | `I18nProvider` | ✅ 保留。包装 `IntlayerProvider`;监听 `i18n.on("change")` 以确保 `activate()` 仍能触发重新渲染 |
94
+ | `i18n.activate(locale)` | ✅ 保留 |
95
+ | `i18n.load(locale, messages)` / `loadAndActivate()` | ⚠️ 作为**运行时回退**接受。编译后的字典优先;开发环境警告会建议移除该导入 |
96
+ | `setupI18n({ messages, missing })` | ⚠️ `messages` 作为运行时回退合并;`missing` 被忽略 |
97
+ | `lingui extract` / `lingui compile` | ✅ 依然是你的日常工作流程。将 `syncPO` / `syncJSON` 指向提取的目录 |
98
+ | `I18nProvider` 上的 `defaultComponent` | ⚠️ 存储在上下文中,但在渲染时未应用 |
99
+ | Next.js | ❌ 该插件包装了 `vite-intlayer`。仅支持 Vite、TanStack Start 和 React Router |
100
+
101
+ ## 基准测试
102
+
103
+ ### 测试衡量了什么
104
+
105
+ [Benchmark Bloom](https://github.com/intlayer-org/benchmark-bloom) 测试套件在每种设置下构建了**相同的应用程序**:**10 个页面**(home, about, blog, careers, contact, FAQ, pricing, products, settings, team),**10 种语言**(`en`, `fr`, `es`, `de`, `it`, `pt`, `zh`, `ja`, `ko`, `ru`),相同的组件和相同的内容。页面以 `en` 和 `fr` 进行测量。
106
+
107
+ Lingui 在四种加载策略下进行了构建,从预先导入每个编译好的目录(`static`)到按路由延迟导入目录(`scoped-dynamic`)。适配器在**相同的组件**上构建,仅更改了 `vite.config.ts` 和 `intlayer.config.ts`。其 `static` 行打包所有语言环境;其 `dynamic` 行(`importMode: 'dynamic'`)按需加载当前活动的语言环境。没有 "scoped" 变体:因为优化通道自动在每个调用点进行作用域划分。
108
+
109
+ 对于每个构建,测试套件记录:
110
+
111
+ - **Lib size**:仅导入 i18n 库的空组件的 gzip 体积。
112
+ - **Page JS**:每页下载的 gzip JavaScript 体积,在所有页面和语言环境中取平均值。
113
+ - **Locale leak %**:下载的 JS 中属于用户**未**查看的语言环境的翻译字符串比例。
114
+ - **Page leak %**:下载的 JS 中属于用户**未**访问的页面的翻译字符串比例。
115
+ - **Component avg**:每个组件单独编译时的平均 gzip 体积。
116
+ - **E2E reactivity**:选择新语言环境到 DOM 中的 `html[lang]` 更新之间的挂钟时间(Playwright,5 次迭代)。
117
+ - **Hydration**:React 水合阶段耗时。
118
+
119
+ > 以下数据来自 **2026-09-12** 的测试运行,使用 `@lingui/react` 6.6.0 和 `@intlayer/lingui` 9.5.1。测试应用程序刻意设计得很小(每个语言环境几十个字符串),因此泄漏百分比反映的是一种**结构模式**:随着内容的增长,它们会不断增加,而运行时成本保持固定。
120
+
121
+ ### TanStack Start 上的测试结果
122
+
123
+ | 配置 | 策略 | 库体积 (gz) | 页面 JS 平均 (gz) | 语言泄漏 | 页面泄漏 | 组件平均体积 (gz) | E2E 响应性 | 水合耗时 |
124
+ | ---------------------- | -------------- | ----------: | ----------------: | -------: | -------: | ----------------: | ---------: | ----------: |
125
+ | **base** (无 i18n) | - | 0.0 KB | 111.0 KB | 0.0% | 0.0% | 0.7 KB | 8.1 ms | 21.6 ms |
126
+ | Lingui | static | 11.2 KB | 152.2 KB | 50.0% | 90.0% | 58.0 KB | 3.9 ms | 19.9 ms |
127
+ | Lingui | dynamic | 11.2 KB | **115.2 KB** | 9.3% | 0.0% | 85.5 KB | 5.9 ms | 28.0 ms |
128
+ | Lingui | scoped-static | 11.2 KB | 120.8 KB | 4.0% | 0.0% | 147.9 KB | 7.1 ms | 33.9 ms |
129
+ | Lingui | scoped-dynamic | 11.2 KB | 120.2 KB | 8.6% | 0.0% | 83.7 KB | 42.1 ms | 32.9 ms |
130
+ | **`@intlayer/lingui`** | static | **10.3 KB** | 140.5 KB | 50.0% | **0.0%** | **14.9 KB** | **3.3 ms** | **11.3 ms** |
131
+ | **`@intlayer/lingui`** | dynamic | **10.3 KB** | 137.0 KB | 9.9% | **0.0%** | **12.8 KB** | **2.9 ms** | **19.7 ms** |
132
+ | `intlayer` (原生) | static | 5.0 KB | 125.8 KB | 50.0% | 0.0% | 8.1 KB | 3.2 ms | 11.5 ms |
133
+ | `intlayer` (原生) | dynamic | 5.0 KB | 118.6 KB | 0.0% | 0.0% | 6.3 KB | 3.6 ms | 14.1 ms |
134
+
135
+ **如何解读数据**
136
+
137
+ - **组件体积缩小 7 倍。** 这是适配器的主要效果。根据策略不同,单独编译的 Lingui 组件平均体积为 **58-148 KB**,因为 `useLingui()` 会触及全局实例以及加载到其中的每个目录。使用适配器的相同组件平均只有 **12.8-14.9 KB**:它只触及自己的字典和 ICU 解析器,别无其他。
138
+ - **水合快 8-14 ms。** `i18n.load()` + `i18n.activate()` 在 React 开始水合前在客户端执行;Lingui 设置越偏向懒加载,这个过程耗时越长(28-34 ms)。使用适配器时,字典作为打包器已放置在页面分块中的普通导入到达:`static` 下为 **11.3 ms**,`dynamic` 下为 **19.7 ms**。
139
+ - **语言切换快 2 倍,且无卡顿。** Lingui 优化后的 `scoped-dynamic` 设置需要 **42 ms** 才能更新 `html[lang]`,因为路由目录在更改可见前必须经过获取、加载和激活。适配器在两种模式下均保持在 **2.9-3.3 ms**。
140
+ - **朴素设置免费获得优化。** 静态 Lingui 在每个页面上打包每个目录:152.2 KB,90% 页面泄漏。静态适配器:140.5 KB,0% 页面泄漏,组件完全相同。
141
+ - **每页字节数:Lingui 在 `dynamic` 中以 22 KB 胜出。** 这是一个需要坦诚面对的数据。Lingui 在构建时将消息编译为标记数组,并仅附带一个遍历它们的 11 KB 运行时。适配器则包含 Intlayer 的 ICU 解析器(比原生构建多出约 15 KB 的 `@intlayer/core`)、适配器层(~10 KB)和 `react-intlayer`(~6 KB)。在此应用中,结果是 **137.0 KB 对 115.2 KB**。如果每页字节数是你的唯一预算考量,并且你已经在使用延迟加载的 Lingui,适配器在这方面不会带来体积缩减。
142
+ - **两边的语言环境泄漏几乎相同。** 在 `dynamic` 下 Lingui 为 9.3%,适配器为 9.9%。这源于组件内部:`i18n._({ id: "careers-benefits.pay", message: "Top-of-market compensation" })` 携带了英文源码作为回退,宏输出也是如此,除非显式剔除 message 字段。无论通过什么提供翻译,这部分英文都会落入 `fr` 分块中。原生 `intlayer`(`.content.ts`,无内联源码)则为 0%。
143
+
144
+ ## 为什么数据会变化,以及为什么有一项保持不变
145
+
146
+ 决定这些列的有两个因素:**组件绑定到了什么**,以及**消息以何种格式传输**。
147
+
148
+ **绑定方式。** 在 Lingui 中,划分的基本单元是语言环境。`fr` 的 `messages.mjs` 是一个单一模块;任何导入了加载该模块的实例的组件都可以访问其全部内容,因此打包工具无法进行比语言环境更细粒度的拆分。使用适配器时,基本单元是调用点:`hero` 和 `footer` 是独立的导入,按组件进行拆分和延迟加载。这就是组件体积、水合和页面泄漏大幅改善的原因。
149
+
150
+ ```bash
151
+ .
152
+ ├── lingui.config.ts
153
+ └── src
154
+ ├── i18n.ts # setupI18n(), load(), activate()
155
+ ├── locales
156
+ │ ├── en/messages.mjs # lingui compile 输出,每种语言一个
157
+ │ └── fr/messages.mjs
158
+ └── components
159
+ └── Hero.tsx # useLingui(); _("hero.title")
160
+ ```
161
+
162
+ ```bash
163
+ .
164
+ ├── intlayer.config.ts # syncJSON({ splitKeys: "key-prefix" })
165
+ ├── .intlayer/ # 生成内容:每个 ID 前缀一个字典,分语言环境
166
+ └── src
167
+ ├── locales
168
+ │ ├── en/messages.json # 未修改,依然是单一事实来源
169
+ │ └── fr/messages.json
170
+ └── components
171
+ └── Hero.tsx # useLingui(); _("hero.title") ← 未修改
172
+ ```
173
+
174
+ **传输格式。** Lingui 的编译步骤将 `{count, plural, one {# item} other {# items}}` 转换为标记数组;运行时从不需要解析 ICU。适配器将消息保留为文本,并使用 Intlayer 的 ICU 解析器进行解析。这是每页固定支付一次的约 15 KB 开销,也是 `dynamic` 行在体积上落后而在其他所有方面领先的原因。原生 Intlayer 避免了这一点,因为 `.content.ts` 字典使用编译器提前解析的 `enu()` / `insert()` 节点。
175
+
176
+ ## 迁移只需三步
177
+
178
+ <Steps>
179
+ <Step number={1} title="安装">
180
+
181
+ ```bash packageManager="npm"
182
+ npx intlayer init --interactive
183
+ ```
184
+
185
+ ```bash packageManager="pnpm"
186
+ pnpm dlx intlayer init --interactive
187
+ ```
188
+
189
+ ```bash packageManager="yarn"
190
+ yarn dlx intlayer init --interactive
191
+ ```
192
+
193
+ ```bash packageManager="bun"
194
+ bunx intlayer init --interactive
195
+ ```
196
+
197
+ 该命令会检测 Lingui,读取 `lingui.config.ts` 以选择 `syncPO`(`.po` 目录)或 `syncJSON`(JSON 目录),安装 `intlayer`、`react-intlayer`、`@intlayer/lingui` 及对应的同步插件,并在 `vite.config.ts` 中将 `@lingui/vite-plugin` 替换为适配器插件。保留 `@lingui/core`、`@lingui/react` 和你的宏插件:宏仍会继续编译,适配器也会复用 Lingui 的类型。
198
+
199
+ </Step>
200
+ <Step number={2} title="将 Intlayer 指向你的目录">
201
+
202
+ 对于 JSON 目录(`lingui.config.ts` 中的 `format: "minimal"`):
203
+
204
+ ```ts fileName="intlayer.config.ts"
205
+ import { Locales, type IntlayerConfig } from "intlayer";
206
+ import { syncJSON } from "@intlayer/sync-json-plugin";
207
+
208
+ const config: IntlayerConfig = {
209
+ internationalization: {
210
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
211
+ defaultLocale: Locales.ENGLISH,
212
+ },
213
+ dictionary: {
214
+ importMode: "dynamic",
215
+ format: "icu",
216
+ },
217
+ plugins: [
218
+ syncJSON({
219
+ format: "icu",
220
+ source: ({ locale, key }) => `./src/locales/${locale}/${key}.json`,
221
+ // 按第一个分段对带点分 ID 进行分组:`footer.github` → 字典 `footer`
222
+ splitKeys: "key-prefix",
223
+ }),
224
+ ],
225
+ };
226
+
227
+ export default config;
228
+ ```
229
+
230
+ 对于 `.po` 目录,将 `syncJSON` 替换为来自 `@intlayer/sync-po-plugin` 的 `syncPO`,并使用带有 `.po` 扩展名的相同 `source` 模式。请参阅 [Sync PO 插件文档](https://intlayer.org/zh/doc/plugin/sync-po)。
231
+
232
+ `splitKeys: "key-prefix"` 是让组件体积大幅缩小的关键。目录文件保留其扁平形态;拆分仅存在于生成的字典中,写回时会自动重新拼接 ID。
233
+
234
+ </Step>
235
+ <Step number={3} title="添加插件">
236
+
237
+ ```ts fileName="vite.config.ts"
238
+ import { defineConfig } from "vite";
239
+ import { tanstackStart } from "@tanstack/react-start/plugin/vite";
240
+ import viteReact from "@vitejs/plugin-react";
241
+ import { lingui } from "@intlayer/lingui/plugin";
242
+
243
+ export default defineConfig({
244
+ plugins: [
245
+ tanstackStart(),
246
+ viteReact({
247
+ // 保留你的宏插件;它必须在 Intlayer 优化通道之前运行
248
+ babel: { plugins: ["@lingui/babel-plugin-lingui-macro"] },
249
+ }),
250
+ lingui(),
251
+ ],
252
+ });
253
+ ```
254
+
255
+ `lingui()` 封装了 `vite-intlayer`(内容监听、字典编译、优化通道),并将 `@lingui/core` 和 `@lingui/react` 别名重定向到适配器。重新构建,上述性能收益便可立即生效。
256
+
257
+ </Step>
258
+ </Steps>
259
+
260
+ ### 之后可以删除的内容
261
+
262
+ | 文件 / 模式 | 原因 |
263
+ | ---------------------------------------------------- | ---------------------------------------------------------------------- |
264
+ | `await import(\`./locales/${locale}/messages.mjs\`)` | 字典由使用它们的组件直接导入。`i18n.load()` 变为回退逻辑 |
265
+ | `i18n.load()` / `i18n.loadAndActivate()` | 保留 `i18n.activate(locale)`;移除手动加载目录的代码 |
266
+ | 构建脚本中的 `lingui compile` | 仅当你完全迁移到 JSON / `.po` 作为来源并且不再导入编译后的模块时可删除 |
267
+
268
+ ### 除了字节之外的收获
269
+
270
+ - **缺失翻译检测。** 当某个语言环境缺少 ID 时,`npx intlayer test` 会使 CI 报错失败;而 `lingui extract` 仅输出统计数据。
271
+ - **`npx intlayer fill`** 使用你选择的 AI 提供商(OpenAI、Anthropic、Mistral、Gemini 等)自动补全缺失的条目,并直接写回你的目录中。
272
+ - **可视化编辑器和 CMS** 在相同的字典上运行,非技术人员也能通过友好的图形界面轻松编辑 `.po` / JSON 文件。
273
+ - **平滑迁移到 `.content.ts`。** 任何组件都可以随时从 `useLingui()` 切换到带有同目录内容文件的 `useIntlayer("hero")`。两种字典类型可以完美共存与合并。
274
+
275
+ ## 开始前需了解的限制
276
+
277
+ - **`dynamic` 模式下的每页体积开销。** 如前所述:在小型应用中,相对于延迟加载的 Lingui 设置,预计每页大约增加 20 KB。这一差距不会随着内容的增加而扩大(因为它来自解析器而非目录),但也不会缩小。
278
+ - **源语言环境泄漏仍然存在。** 消息描述符和宏输出会嵌入英文源码作为回退。如果对此介意,解决方法是去除 `message` 字段或将该组件迁移到 `.content.ts`,适配器本身无法解决此问题。
279
+ - **`i18n.load()` 仅作为回退手段。** 如果你继续导入编译好的目录并调用 `load()`,将会同时加载旧包与新包。请务必移除这些导入。
280
+ - **仅支持 Vite。** `@intlayer/lingui` 没有提供 Next.js 插件。在 Lingui 上的 Next.js 项目应直接查阅 [`next-intlayer`](https://intlayer.org/zh/doc/environment/nextjs)。
281
+ - **`defaultComponent` 未生效。** 如果你依赖它来自动包裹每个 `<Trans>`,请在组件中显式编写包装器。
282
+
283
+ ## 应该选择哪种方案?
284
+
285
+ - **继续留在 Lingui**:如果你已经配置好了 `scoped-dynamic`,你的唯一性能考量是极致的每页字节体积,且 42 ms 的语言切换和 30 ms 的水合耗时完全在应用承受范围之内。
286
+ - **使用 `@intlayer/lingui`**:如果你正在使用 Lingui,并希望在无需改动任何宏的前提下,获得更小的组件、更快的首屏水合与语言切换、在简单配置下实现 0% 页面泄漏、类型化 ID、CI 检查以及 AI 翻译填充。这是现有 Lingui 代码库的理想升级桥梁。
287
+ - **迁移到原生 Intlayer(`react-intlayer`)**:当你的团队开始重构组件时。它是测试表中唯一实现 **0% 语言环境泄漏**、5 KB 运行时且相比基准应用仅增加 7.6 KB/页的方案。
288
+
289
+ ## 相关对比文章
290
+
291
+ - [Lingui vs Intlayer](https://intlayer.org/zh/blog/lingui-vs-intlayer)(库级别深度对比,相同基准测试)
292
+ - [next-intl vs @intlayer/next-intl](https://intlayer.org/zh/blog/next-intl-vs-intlayer-next-intl)(同系列适配器测评)
293
+ - [i18next vs @intlayer/i18next](https://intlayer.org/zh/blog/i18next-vs-intlayer-i18next)(同系列适配器测评)
294
+ - [vue-i18n vs @intlayer/vue-i18n](https://intlayer.org/zh/blog/vue-i18n-vs-intlayer-vue-i18n)(同系列适配器测评)
295
+ - [兼容适配器参考:Lingui](https://intlayer.org/zh/doc/compatibility/lingui)
296
+ - [编译器型 vs 声明式 i18n](https://intlayer.org/zh/blog/compiler-vs-declarative-i18n)
297
+
298
+ ## 总结
299
+
300
+ `@intlayer/lingui` 彻底改变了 Lingui 调用点的绑定机制:从绑定到全局实例及其各语言整体目录,转变为绑定到专门为该组件编译的独立字典。在相同的 TanStack Start 应用中,无需编辑任何宏即可实现 **组件体积缩小 7 倍**、**水合加快 8-14 ms**、**语言切换提速 2 倍**且消除了 42 ms 的性能骤降。它不会修改组件内置的回退内容(因此保留了源语言泄漏),并在运行时解析 ICU(使得动态加载模式下每页比纯 Lingui 多出约 20 KB)。在选型前,请务必明确团队的核心性能预算。
301
+
302
+ 所有原始测试数据、测试应用和评测脚本均可在 [Benchmark Bloom 代码仓库](https://github.com/intlayer-org/benchmark-bloom) 中找到。欢迎自行复现并验证。
303
+
304
+ 详情请参考 [“为什么选择 Intlayer?”文档](https://intlayer.org/zh/doc/why)。