@intlayer/docs 9.5.0 → 9.5.2

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 (745) hide show
  1. package/blog/ar/history_of_i18n.md +304 -0
  2. package/blog/de/history_of_i18n.md +304 -0
  3. package/blog/en/history_of_i18n.md +304 -0
  4. package/blog/en-GB/history_of_i18n.md +304 -0
  5. package/blog/es/history_of_i18n.md +304 -0
  6. package/blog/fr/history_of_i18n.md +304 -0
  7. package/blog/hi/history_of_i18n.md +304 -0
  8. package/blog/id/history_of_i18n.md +304 -0
  9. package/blog/it/history_of_i18n.md +304 -0
  10. package/blog/ja/history_of_i18n.md +304 -0
  11. package/blog/ko/history_of_i18n.md +304 -0
  12. package/blog/pl/history_of_i18n.md +304 -0
  13. package/blog/pt/history_of_i18n.md +304 -0
  14. package/blog/ru/history_of_i18n.md +304 -0
  15. package/blog/tr/history_of_i18n.md +304 -0
  16. package/blog/uk/history_of_i18n.md +304 -0
  17. package/blog/vi/history_of_i18n.md +304 -0
  18. package/blog/zh/history_of_i18n.md +304 -0
  19. package/dist/cjs/generated/blog.entry.cjs +20 -0
  20. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  21. package/dist/cjs/generated/docs.entry.cjs +20 -20
  22. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  23. package/dist/esm/generated/blog.entry.mjs +20 -0
  24. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  25. package/dist/esm/generated/docs.entry.mjs +20 -20
  26. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  27. package/dist/types/generated/blog.entry.d.ts +1 -0
  28. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  29. package/dist/types/generated/docs.entry.d.ts +1 -1
  30. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  31. package/docs/ar/benchmark/index.md +4 -1
  32. package/docs/ar/benchmark/nextjs.md +32 -27
  33. package/docs/ar/benchmark/solid.md +13 -10
  34. package/docs/ar/benchmark/svelte.md +12 -9
  35. package/docs/ar/benchmark/tanstack.md +29 -24
  36. package/docs/ar/benchmark/vue.md +11 -7
  37. package/docs/ar/cli/build.md +8 -1
  38. package/docs/ar/cli/configuration.md +3 -1
  39. package/docs/ar/cli/doc-review.md +8 -1
  40. package/docs/ar/cli/doc-translate.md +5 -1
  41. package/docs/ar/cli/extract.md +2 -1
  42. package/docs/ar/cli/fill.md +5 -1
  43. package/docs/ar/cli/index.md +4 -5
  44. package/docs/ar/cli/live.md +5 -1
  45. package/docs/ar/cli/login.md +2 -2
  46. package/docs/ar/cli/pull.md +5 -1
  47. package/docs/ar/cli/push.md +5 -1
  48. package/docs/ar/cli/scan.md +5 -1
  49. package/docs/ar/cli/standalone.md +5 -1
  50. package/docs/ar/cli/test.md +5 -1
  51. package/docs/ar/cli/watch.md +5 -1
  52. package/docs/ar/compat/i18n-js.md +1 -1
  53. package/docs/ar/compat/i18next.md +1 -1
  54. package/docs/ar/compat/lingui.md +1 -1
  55. package/docs/ar/compat/next-i18next.md +1 -1
  56. package/docs/ar/compat/next-intl.md +1 -1
  57. package/docs/ar/compat/next-translate.md +1 -1
  58. package/docs/ar/compat/ngx-translate.md +1 -1
  59. package/docs/ar/compat/nuxtjs-i18n.md +1 -1
  60. package/docs/ar/compat/polyglot.md +1 -1
  61. package/docs/ar/compat/react-i18next.md +1 -1
  62. package/docs/ar/compat/react-intl.md +1 -1
  63. package/docs/ar/compat/svelte-i18n.md +1 -1
  64. package/docs/ar/compat/transloco.md +1 -1
  65. package/docs/ar/compat/vue-i18n.md +1 -1
  66. package/docs/ar/intlayer_with_nextjs_15.md +1 -1
  67. package/docs/ar/intlayer_with_nextjs_16.md +1 -1
  68. package/docs/ar/intlayer_with_remix_3.md +543 -0
  69. package/docs/bn/cli/index.md +4 -5
  70. package/docs/bn/cli/scan.md +5 -1
  71. package/docs/bn/cli/standalone.md +5 -1
  72. package/docs/cs/cli/index.md +4 -5
  73. package/docs/cs/cli/scan.md +5 -1
  74. package/docs/cs/cli/standalone.md +5 -1
  75. package/docs/de/benchmark/index.md +4 -1
  76. package/docs/de/benchmark/nextjs.md +32 -27
  77. package/docs/de/benchmark/solid.md +13 -10
  78. package/docs/de/benchmark/svelte.md +12 -9
  79. package/docs/de/benchmark/tanstack.md +29 -24
  80. package/docs/de/benchmark/vue.md +11 -7
  81. package/docs/de/cli/build.md +8 -1
  82. package/docs/de/cli/configuration.md +3 -1
  83. package/docs/de/cli/doc-review.md +8 -1
  84. package/docs/de/cli/doc-translate.md +5 -1
  85. package/docs/de/cli/extract.md +2 -1
  86. package/docs/de/cli/fill.md +5 -1
  87. package/docs/de/cli/index.md +4 -5
  88. package/docs/de/cli/live.md +5 -1
  89. package/docs/de/cli/login.md +2 -2
  90. package/docs/de/cli/pull.md +5 -1
  91. package/docs/de/cli/push.md +5 -1
  92. package/docs/de/cli/scan.md +5 -1
  93. package/docs/de/cli/standalone.md +5 -1
  94. package/docs/de/cli/test.md +5 -1
  95. package/docs/de/cli/watch.md +5 -1
  96. package/docs/de/compat/i18n-js.md +1 -1
  97. package/docs/de/compat/i18next.md +1 -1
  98. package/docs/de/compat/lingui.md +1 -1
  99. package/docs/de/compat/next-i18next.md +1 -1
  100. package/docs/de/compat/next-intl.md +1 -1
  101. package/docs/de/compat/next-translate.md +1 -1
  102. package/docs/de/compat/ngx-translate.md +1 -1
  103. package/docs/de/compat/nuxtjs-i18n.md +1 -1
  104. package/docs/de/compat/polyglot.md +1 -1
  105. package/docs/de/compat/react-i18next.md +1 -1
  106. package/docs/de/compat/react-intl.md +1 -1
  107. package/docs/de/compat/svelte-i18n.md +1 -1
  108. package/docs/de/compat/transloco.md +1 -1
  109. package/docs/de/compat/vue-i18n.md +1 -1
  110. package/docs/de/intlayer_with_nextjs_15.md +1 -1
  111. package/docs/de/intlayer_with_nextjs_16.md +1 -1
  112. package/docs/de/intlayer_with_remix_3.md +543 -0
  113. package/docs/en/benchmark/index.md +4 -1
  114. package/docs/en/benchmark/nextjs.md +32 -27
  115. package/docs/en/benchmark/solid.md +13 -10
  116. package/docs/en/benchmark/svelte.md +12 -9
  117. package/docs/en/benchmark/tanstack.md +30 -25
  118. package/docs/en/benchmark/vue.md +11 -7
  119. package/docs/en/cli/build.md +8 -1
  120. package/docs/en/cli/configuration.md +3 -1
  121. package/docs/en/cli/doc-review.md +8 -1
  122. package/docs/en/cli/doc-translate.md +5 -1
  123. package/docs/en/cli/extract.md +2 -1
  124. package/docs/en/cli/fill.md +5 -1
  125. package/docs/en/cli/index.md +4 -5
  126. package/docs/en/cli/live.md +5 -1
  127. package/docs/en/cli/login.md +2 -2
  128. package/docs/en/cli/pull.md +5 -1
  129. package/docs/en/cli/push.md +5 -1
  130. package/docs/en/cli/scan.md +5 -1
  131. package/docs/en/cli/standalone.md +5 -1
  132. package/docs/en/cli/test.md +5 -1
  133. package/docs/en/cli/watch.md +5 -1
  134. package/docs/en/compat/i18n-js.md +1 -1
  135. package/docs/en/compat/i18next.md +1 -1
  136. package/docs/en/compat/lingui.md +1 -1
  137. package/docs/en/compat/next-i18next.md +1 -1
  138. package/docs/en/compat/next-intl.md +1 -1
  139. package/docs/en/compat/next-translate.md +1 -1
  140. package/docs/en/compat/ngx-translate.md +1 -1
  141. package/docs/en/compat/nuxtjs-i18n.md +1 -1
  142. package/docs/en/compat/polyglot.md +1 -1
  143. package/docs/en/compat/react-i18next.md +1 -1
  144. package/docs/en/compat/react-intl.md +1 -1
  145. package/docs/en/compat/svelte-i18n.md +1 -1
  146. package/docs/en/compat/transloco.md +1 -1
  147. package/docs/en/compat/vue-i18n.md +1 -1
  148. package/docs/en/intlayer_with_nextjs_15.md +1 -1
  149. package/docs/en/intlayer_with_nextjs_16.md +1 -1
  150. package/docs/en/intlayer_with_remix_3.md +540 -0
  151. package/docs/en-GB/benchmark/index.md +4 -1
  152. package/docs/en-GB/benchmark/nextjs.md +32 -27
  153. package/docs/en-GB/benchmark/solid.md +13 -10
  154. package/docs/en-GB/benchmark/svelte.md +12 -9
  155. package/docs/en-GB/benchmark/tanstack.md +29 -24
  156. package/docs/en-GB/benchmark/vue.md +11 -7
  157. package/docs/en-GB/cli/build.md +8 -1
  158. package/docs/en-GB/cli/configuration.md +3 -1
  159. package/docs/en-GB/cli/doc-review.md +8 -1
  160. package/docs/en-GB/cli/doc-translate.md +5 -1
  161. package/docs/en-GB/cli/extract.md +2 -1
  162. package/docs/en-GB/cli/fill.md +5 -1
  163. package/docs/en-GB/cli/index.md +4 -5
  164. package/docs/en-GB/cli/live.md +5 -1
  165. package/docs/en-GB/cli/login.md +2 -2
  166. package/docs/en-GB/cli/pull.md +5 -1
  167. package/docs/en-GB/cli/push.md +5 -1
  168. package/docs/en-GB/cli/scan.md +5 -1
  169. package/docs/en-GB/cli/standalone.md +5 -1
  170. package/docs/en-GB/cli/test.md +5 -1
  171. package/docs/en-GB/cli/watch.md +5 -1
  172. package/docs/en-GB/compat/i18n-js.md +1 -1
  173. package/docs/en-GB/compat/i18next.md +1 -1
  174. package/docs/en-GB/compat/lingui.md +1 -1
  175. package/docs/en-GB/compat/next-i18next.md +1 -1
  176. package/docs/en-GB/compat/next-intl.md +1 -1
  177. package/docs/en-GB/compat/next-translate.md +1 -1
  178. package/docs/en-GB/compat/ngx-translate.md +1 -1
  179. package/docs/en-GB/compat/nuxtjs-i18n.md +1 -1
  180. package/docs/en-GB/compat/polyglot.md +1 -1
  181. package/docs/en-GB/compat/react-i18next.md +1 -1
  182. package/docs/en-GB/compat/react-intl.md +1 -1
  183. package/docs/en-GB/compat/svelte-i18n.md +1 -1
  184. package/docs/en-GB/compat/transloco.md +1 -1
  185. package/docs/en-GB/compat/vue-i18n.md +1 -1
  186. package/docs/en-GB/intlayer_with_nextjs_15.md +1 -1
  187. package/docs/en-GB/intlayer_with_nextjs_16.md +1 -1
  188. package/docs/en-GB/intlayer_with_remix_3.md +558 -0
  189. package/docs/es/benchmark/index.md +4 -1
  190. package/docs/es/benchmark/nextjs.md +32 -27
  191. package/docs/es/benchmark/solid.md +13 -10
  192. package/docs/es/benchmark/svelte.md +12 -9
  193. package/docs/es/benchmark/tanstack.md +29 -24
  194. package/docs/es/benchmark/vue.md +11 -7
  195. package/docs/es/cli/build.md +8 -1
  196. package/docs/es/cli/configuration.md +3 -1
  197. package/docs/es/cli/doc-review.md +8 -1
  198. package/docs/es/cli/doc-translate.md +5 -1
  199. package/docs/es/cli/extract.md +2 -1
  200. package/docs/es/cli/fill.md +5 -1
  201. package/docs/es/cli/index.md +4 -5
  202. package/docs/es/cli/live.md +5 -1
  203. package/docs/es/cli/login.md +2 -2
  204. package/docs/es/cli/pull.md +5 -1
  205. package/docs/es/cli/push.md +5 -1
  206. package/docs/es/cli/scan.md +5 -1
  207. package/docs/es/cli/standalone.md +5 -1
  208. package/docs/es/cli/test.md +5 -1
  209. package/docs/es/cli/watch.md +5 -1
  210. package/docs/es/compat/i18n-js.md +1 -1
  211. package/docs/es/compat/i18next.md +1 -1
  212. package/docs/es/compat/lingui.md +1 -1
  213. package/docs/es/compat/next-i18next.md +1 -1
  214. package/docs/es/compat/next-intl.md +1 -1
  215. package/docs/es/compat/next-translate.md +1 -1
  216. package/docs/es/compat/ngx-translate.md +1 -1
  217. package/docs/es/compat/nuxtjs-i18n.md +1 -1
  218. package/docs/es/compat/polyglot.md +1 -1
  219. package/docs/es/compat/react-i18next.md +1 -1
  220. package/docs/es/compat/react-intl.md +1 -1
  221. package/docs/es/compat/svelte-i18n.md +1 -1
  222. package/docs/es/compat/transloco.md +1 -1
  223. package/docs/es/compat/vue-i18n.md +1 -1
  224. package/docs/es/intlayer_with_nextjs_15.md +1 -1
  225. package/docs/es/intlayer_with_nextjs_16.md +1 -1
  226. package/docs/es/intlayer_with_remix_3.md +540 -0
  227. package/docs/fr/benchmark/index.md +4 -1
  228. package/docs/fr/benchmark/nextjs.md +32 -27
  229. package/docs/fr/benchmark/solid.md +13 -10
  230. package/docs/fr/benchmark/svelte.md +12 -9
  231. package/docs/fr/benchmark/tanstack.md +29 -24
  232. package/docs/fr/benchmark/vue.md +11 -7
  233. package/docs/fr/cli/build.md +8 -1
  234. package/docs/fr/cli/configuration.md +3 -1
  235. package/docs/fr/cli/doc-review.md +8 -1
  236. package/docs/fr/cli/doc-translate.md +5 -1
  237. package/docs/fr/cli/extract.md +2 -1
  238. package/docs/fr/cli/fill.md +5 -1
  239. package/docs/fr/cli/index.md +4 -5
  240. package/docs/fr/cli/live.md +5 -1
  241. package/docs/fr/cli/login.md +2 -2
  242. package/docs/fr/cli/pull.md +5 -1
  243. package/docs/fr/cli/push.md +5 -1
  244. package/docs/fr/cli/scan.md +5 -1
  245. package/docs/fr/cli/standalone.md +5 -1
  246. package/docs/fr/cli/test.md +5 -1
  247. package/docs/fr/cli/watch.md +5 -1
  248. package/docs/fr/compat/i18n-js.md +1 -1
  249. package/docs/fr/compat/i18next.md +1 -1
  250. package/docs/fr/compat/lingui.md +1 -1
  251. package/docs/fr/compat/next-i18next.md +1 -1
  252. package/docs/fr/compat/next-intl.md +1 -1
  253. package/docs/fr/compat/next-translate.md +1 -1
  254. package/docs/fr/compat/ngx-translate.md +1 -1
  255. package/docs/fr/compat/nuxtjs-i18n.md +1 -1
  256. package/docs/fr/compat/polyglot.md +1 -1
  257. package/docs/fr/compat/react-i18next.md +1 -1
  258. package/docs/fr/compat/react-intl.md +1 -1
  259. package/docs/fr/compat/svelte-i18n.md +1 -1
  260. package/docs/fr/compat/transloco.md +1 -1
  261. package/docs/fr/compat/vue-i18n.md +1 -1
  262. package/docs/fr/intlayer_with_nextjs_15.md +1 -1
  263. package/docs/fr/intlayer_with_nextjs_16.md +1 -1
  264. package/docs/fr/intlayer_with_remix_3.md +540 -0
  265. package/docs/hi/benchmark/index.md +4 -1
  266. package/docs/hi/benchmark/nextjs.md +32 -27
  267. package/docs/hi/benchmark/solid.md +13 -10
  268. package/docs/hi/benchmark/svelte.md +12 -9
  269. package/docs/hi/benchmark/tanstack.md +29 -24
  270. package/docs/hi/benchmark/vue.md +11 -7
  271. package/docs/hi/cli/build.md +8 -1
  272. package/docs/hi/cli/configuration.md +3 -1
  273. package/docs/hi/cli/doc-review.md +8 -1
  274. package/docs/hi/cli/doc-translate.md +5 -1
  275. package/docs/hi/cli/extract.md +2 -1
  276. package/docs/hi/cli/fill.md +5 -1
  277. package/docs/hi/cli/index.md +4 -5
  278. package/docs/hi/cli/live.md +5 -1
  279. package/docs/hi/cli/login.md +2 -2
  280. package/docs/hi/cli/pull.md +5 -1
  281. package/docs/hi/cli/push.md +5 -1
  282. package/docs/hi/cli/scan.md +5 -1
  283. package/docs/hi/cli/standalone.md +5 -1
  284. package/docs/hi/cli/test.md +5 -1
  285. package/docs/hi/cli/watch.md +5 -1
  286. package/docs/hi/compat/i18n-js.md +1 -1
  287. package/docs/hi/compat/i18next.md +1 -1
  288. package/docs/hi/compat/lingui.md +1 -1
  289. package/docs/hi/compat/next-i18next.md +1 -1
  290. package/docs/hi/compat/next-intl.md +1 -1
  291. package/docs/hi/compat/next-translate.md +1 -1
  292. package/docs/hi/compat/ngx-translate.md +1 -1
  293. package/docs/hi/compat/nuxtjs-i18n.md +1 -1
  294. package/docs/hi/compat/polyglot.md +1 -1
  295. package/docs/hi/compat/react-i18next.md +1 -1
  296. package/docs/hi/compat/react-intl.md +1 -1
  297. package/docs/hi/compat/svelte-i18n.md +1 -1
  298. package/docs/hi/compat/transloco.md +1 -1
  299. package/docs/hi/compat/vue-i18n.md +1 -1
  300. package/docs/hi/intlayer_with_nextjs_15.md +1 -1
  301. package/docs/hi/intlayer_with_nextjs_16.md +1 -1
  302. package/docs/hi/intlayer_with_remix_3.md +543 -0
  303. package/docs/id/benchmark/index.md +4 -1
  304. package/docs/id/benchmark/nextjs.md +32 -27
  305. package/docs/id/benchmark/solid.md +13 -10
  306. package/docs/id/benchmark/svelte.md +12 -9
  307. package/docs/id/benchmark/tanstack.md +29 -24
  308. package/docs/id/benchmark/vue.md +11 -7
  309. package/docs/id/cli/build.md +8 -1
  310. package/docs/id/cli/configuration.md +3 -1
  311. package/docs/id/cli/doc-review.md +8 -1
  312. package/docs/id/cli/doc-translate.md +5 -1
  313. package/docs/id/cli/extract.md +2 -1
  314. package/docs/id/cli/fill.md +5 -1
  315. package/docs/id/cli/index.md +4 -5
  316. package/docs/id/cli/live.md +5 -1
  317. package/docs/id/cli/login.md +2 -2
  318. package/docs/id/cli/pull.md +5 -1
  319. package/docs/id/cli/push.md +5 -1
  320. package/docs/id/cli/scan.md +5 -1
  321. package/docs/id/cli/standalone.md +5 -1
  322. package/docs/id/cli/test.md +5 -1
  323. package/docs/id/cli/watch.md +5 -1
  324. package/docs/id/compat/i18n-js.md +1 -1
  325. package/docs/id/compat/i18next.md +1 -1
  326. package/docs/id/compat/lingui.md +1 -1
  327. package/docs/id/compat/next-i18next.md +1 -1
  328. package/docs/id/compat/next-intl.md +1 -1
  329. package/docs/id/compat/next-translate.md +1 -1
  330. package/docs/id/compat/ngx-translate.md +1 -1
  331. package/docs/id/compat/nuxtjs-i18n.md +1 -1
  332. package/docs/id/compat/polyglot.md +1 -1
  333. package/docs/id/compat/react-i18next.md +1 -1
  334. package/docs/id/compat/react-intl.md +1 -1
  335. package/docs/id/compat/svelte-i18n.md +1 -1
  336. package/docs/id/compat/transloco.md +1 -1
  337. package/docs/id/compat/vue-i18n.md +1 -1
  338. package/docs/id/intlayer_with_nextjs_15.md +1 -1
  339. package/docs/id/intlayer_with_nextjs_16.md +1 -1
  340. package/docs/id/intlayer_with_remix_3.md +566 -0
  341. package/docs/it/benchmark/index.md +4 -1
  342. package/docs/it/benchmark/nextjs.md +32 -27
  343. package/docs/it/benchmark/solid.md +13 -10
  344. package/docs/it/benchmark/svelte.md +12 -9
  345. package/docs/it/benchmark/tanstack.md +29 -24
  346. package/docs/it/benchmark/vue.md +11 -7
  347. package/docs/it/cli/build.md +8 -1
  348. package/docs/it/cli/configuration.md +3 -1
  349. package/docs/it/cli/doc-review.md +8 -1
  350. package/docs/it/cli/doc-translate.md +5 -1
  351. package/docs/it/cli/extract.md +2 -1
  352. package/docs/it/cli/fill.md +5 -1
  353. package/docs/it/cli/index.md +4 -5
  354. package/docs/it/cli/live.md +5 -1
  355. package/docs/it/cli/login.md +2 -2
  356. package/docs/it/cli/pull.md +5 -1
  357. package/docs/it/cli/push.md +5 -1
  358. package/docs/it/cli/scan.md +5 -1
  359. package/docs/it/cli/standalone.md +5 -1
  360. package/docs/it/cli/test.md +5 -1
  361. package/docs/it/cli/watch.md +5 -1
  362. package/docs/it/compat/i18n-js.md +1 -1
  363. package/docs/it/compat/i18next.md +1 -1
  364. package/docs/it/compat/lingui.md +1 -1
  365. package/docs/it/compat/next-i18next.md +1 -1
  366. package/docs/it/compat/next-intl.md +1 -1
  367. package/docs/it/compat/next-translate.md +1 -1
  368. package/docs/it/compat/ngx-translate.md +1 -1
  369. package/docs/it/compat/nuxtjs-i18n.md +1 -1
  370. package/docs/it/compat/polyglot.md +1 -1
  371. package/docs/it/compat/react-i18next.md +1 -1
  372. package/docs/it/compat/react-intl.md +1 -1
  373. package/docs/it/compat/svelte-i18n.md +1 -1
  374. package/docs/it/compat/transloco.md +1 -1
  375. package/docs/it/compat/vue-i18n.md +1 -1
  376. package/docs/it/intlayer_with_nextjs_15.md +1 -1
  377. package/docs/it/intlayer_with_nextjs_16.md +1 -1
  378. package/docs/it/intlayer_with_remix_3.md +558 -0
  379. package/docs/ja/benchmark/index.md +4 -1
  380. package/docs/ja/benchmark/nextjs.md +32 -27
  381. package/docs/ja/benchmark/solid.md +13 -10
  382. package/docs/ja/benchmark/svelte.md +12 -9
  383. package/docs/ja/benchmark/tanstack.md +29 -24
  384. package/docs/ja/benchmark/vue.md +11 -7
  385. package/docs/ja/cli/build.md +8 -1
  386. package/docs/ja/cli/configuration.md +3 -1
  387. package/docs/ja/cli/doc-review.md +8 -1
  388. package/docs/ja/cli/doc-translate.md +5 -1
  389. package/docs/ja/cli/extract.md +2 -1
  390. package/docs/ja/cli/fill.md +5 -1
  391. package/docs/ja/cli/index.md +4 -5
  392. package/docs/ja/cli/live.md +5 -1
  393. package/docs/ja/cli/login.md +2 -2
  394. package/docs/ja/cli/pull.md +5 -1
  395. package/docs/ja/cli/push.md +5 -1
  396. package/docs/ja/cli/scan.md +5 -1
  397. package/docs/ja/cli/standalone.md +5 -1
  398. package/docs/ja/cli/test.md +5 -1
  399. package/docs/ja/cli/watch.md +5 -1
  400. package/docs/ja/compat/i18n-js.md +1 -1
  401. package/docs/ja/compat/i18next.md +1 -1
  402. package/docs/ja/compat/lingui.md +1 -1
  403. package/docs/ja/compat/next-i18next.md +1 -1
  404. package/docs/ja/compat/next-intl.md +1 -1
  405. package/docs/ja/compat/next-translate.md +1 -1
  406. package/docs/ja/compat/ngx-translate.md +1 -1
  407. package/docs/ja/compat/nuxtjs-i18n.md +1 -1
  408. package/docs/ja/compat/polyglot.md +1 -1
  409. package/docs/ja/compat/react-i18next.md +1 -1
  410. package/docs/ja/compat/react-intl.md +1 -1
  411. package/docs/ja/compat/svelte-i18n.md +1 -1
  412. package/docs/ja/compat/transloco.md +1 -1
  413. package/docs/ja/compat/vue-i18n.md +1 -1
  414. package/docs/ja/intlayer_with_nextjs_15.md +1 -1
  415. package/docs/ja/intlayer_with_nextjs_16.md +1 -1
  416. package/docs/ja/intlayer_with_remix_3.md +558 -0
  417. package/docs/ko/benchmark/index.md +4 -1
  418. package/docs/ko/benchmark/nextjs.md +32 -27
  419. package/docs/ko/benchmark/solid.md +13 -10
  420. package/docs/ko/benchmark/svelte.md +12 -9
  421. package/docs/ko/benchmark/tanstack.md +29 -24
  422. package/docs/ko/benchmark/vue.md +11 -7
  423. package/docs/ko/cli/build.md +8 -1
  424. package/docs/ko/cli/configuration.md +3 -1
  425. package/docs/ko/cli/doc-review.md +8 -1
  426. package/docs/ko/cli/doc-translate.md +5 -1
  427. package/docs/ko/cli/extract.md +2 -1
  428. package/docs/ko/cli/fill.md +5 -1
  429. package/docs/ko/cli/index.md +4 -5
  430. package/docs/ko/cli/live.md +5 -1
  431. package/docs/ko/cli/login.md +2 -2
  432. package/docs/ko/cli/pull.md +5 -1
  433. package/docs/ko/cli/push.md +5 -1
  434. package/docs/ko/cli/scan.md +5 -1
  435. package/docs/ko/cli/standalone.md +5 -1
  436. package/docs/ko/cli/test.md +5 -1
  437. package/docs/ko/cli/watch.md +5 -1
  438. package/docs/ko/compat/i18n-js.md +1 -1
  439. package/docs/ko/compat/i18next.md +1 -1
  440. package/docs/ko/compat/lingui.md +1 -1
  441. package/docs/ko/compat/next-i18next.md +1 -1
  442. package/docs/ko/compat/next-intl.md +1 -1
  443. package/docs/ko/compat/next-translate.md +1 -1
  444. package/docs/ko/compat/ngx-translate.md +1 -1
  445. package/docs/ko/compat/nuxtjs-i18n.md +1 -1
  446. package/docs/ko/compat/polyglot.md +1 -1
  447. package/docs/ko/compat/react-i18next.md +1 -1
  448. package/docs/ko/compat/react-intl.md +1 -1
  449. package/docs/ko/compat/svelte-i18n.md +1 -1
  450. package/docs/ko/compat/transloco.md +1 -1
  451. package/docs/ko/compat/vue-i18n.md +1 -1
  452. package/docs/ko/intlayer_with_remix_3.md +543 -0
  453. package/docs/nl/cli/index.md +4 -5
  454. package/docs/nl/cli/scan.md +5 -1
  455. package/docs/nl/cli/standalone.md +5 -1
  456. package/docs/pl/benchmark/index.md +4 -1
  457. package/docs/pl/benchmark/nextjs.md +32 -27
  458. package/docs/pl/benchmark/solid.md +13 -10
  459. package/docs/pl/benchmark/svelte.md +12 -9
  460. package/docs/pl/benchmark/tanstack.md +29 -24
  461. package/docs/pl/benchmark/vue.md +11 -7
  462. package/docs/pl/cli/build.md +8 -1
  463. package/docs/pl/cli/configuration.md +3 -1
  464. package/docs/pl/cli/doc-review.md +8 -1
  465. package/docs/pl/cli/doc-translate.md +5 -1
  466. package/docs/pl/cli/extract.md +2 -1
  467. package/docs/pl/cli/fill.md +5 -1
  468. package/docs/pl/cli/index.md +4 -5
  469. package/docs/pl/cli/live.md +5 -1
  470. package/docs/pl/cli/login.md +2 -2
  471. package/docs/pl/cli/pull.md +5 -1
  472. package/docs/pl/cli/push.md +5 -1
  473. package/docs/pl/cli/scan.md +5 -1
  474. package/docs/pl/cli/standalone.md +5 -1
  475. package/docs/pl/cli/test.md +5 -1
  476. package/docs/pl/cli/watch.md +5 -1
  477. package/docs/pl/compat/i18n-js.md +1 -1
  478. package/docs/pl/compat/i18next.md +1 -1
  479. package/docs/pl/compat/lingui.md +1 -1
  480. package/docs/pl/compat/next-i18next.md +1 -1
  481. package/docs/pl/compat/next-intl.md +1 -1
  482. package/docs/pl/compat/next-translate.md +1 -1
  483. package/docs/pl/compat/ngx-translate.md +1 -1
  484. package/docs/pl/compat/nuxtjs-i18n.md +1 -1
  485. package/docs/pl/compat/polyglot.md +1 -1
  486. package/docs/pl/compat/react-i18next.md +1 -1
  487. package/docs/pl/compat/react-intl.md +1 -1
  488. package/docs/pl/compat/svelte-i18n.md +1 -1
  489. package/docs/pl/compat/transloco.md +1 -1
  490. package/docs/pl/compat/vue-i18n.md +1 -1
  491. package/docs/pl/intlayer_with_nextjs_15.md +1 -1
  492. package/docs/pl/intlayer_with_nextjs_16.md +1 -1
  493. package/docs/pl/intlayer_with_remix_3.md +551 -0
  494. package/docs/pt/benchmark/index.md +4 -1
  495. package/docs/pt/benchmark/nextjs.md +32 -27
  496. package/docs/pt/benchmark/solid.md +13 -10
  497. package/docs/pt/benchmark/svelte.md +12 -9
  498. package/docs/pt/benchmark/tanstack.md +29 -24
  499. package/docs/pt/benchmark/vue.md +11 -7
  500. package/docs/pt/cli/build.md +8 -1
  501. package/docs/pt/cli/configuration.md +3 -1
  502. package/docs/pt/cli/doc-review.md +8 -1
  503. package/docs/pt/cli/doc-translate.md +5 -1
  504. package/docs/pt/cli/extract.md +2 -1
  505. package/docs/pt/cli/fill.md +5 -1
  506. package/docs/pt/cli/index.md +4 -5
  507. package/docs/pt/cli/live.md +5 -1
  508. package/docs/pt/cli/login.md +2 -2
  509. package/docs/pt/cli/pull.md +5 -1
  510. package/docs/pt/cli/push.md +5 -1
  511. package/docs/pt/cli/scan.md +5 -1
  512. package/docs/pt/cli/standalone.md +5 -1
  513. package/docs/pt/cli/test.md +5 -1
  514. package/docs/pt/cli/watch.md +5 -1
  515. package/docs/pt/compat/i18n-js.md +1 -1
  516. package/docs/pt/compat/i18next.md +1 -1
  517. package/docs/pt/compat/lingui.md +1 -1
  518. package/docs/pt/compat/next-i18next.md +1 -1
  519. package/docs/pt/compat/next-intl.md +1 -1
  520. package/docs/pt/compat/next-translate.md +1 -1
  521. package/docs/pt/compat/ngx-translate.md +1 -1
  522. package/docs/pt/compat/nuxtjs-i18n.md +1 -1
  523. package/docs/pt/compat/polyglot.md +1 -1
  524. package/docs/pt/compat/react-i18next.md +1 -1
  525. package/docs/pt/compat/react-intl.md +1 -1
  526. package/docs/pt/compat/svelte-i18n.md +1 -1
  527. package/docs/pt/compat/transloco.md +1 -1
  528. package/docs/pt/compat/vue-i18n.md +1 -1
  529. package/docs/pt/intlayer_with_nextjs_15.md +1 -1
  530. package/docs/pt/intlayer_with_nextjs_16.md +1 -1
  531. package/docs/pt/intlayer_with_remix_3.md +558 -0
  532. package/docs/ru/benchmark/index.md +4 -1
  533. package/docs/ru/benchmark/nextjs.md +32 -27
  534. package/docs/ru/benchmark/solid.md +13 -10
  535. package/docs/ru/benchmark/svelte.md +12 -9
  536. package/docs/ru/benchmark/tanstack.md +29 -24
  537. package/docs/ru/benchmark/vue.md +11 -7
  538. package/docs/ru/cli/build.md +8 -1
  539. package/docs/ru/cli/configuration.md +3 -1
  540. package/docs/ru/cli/doc-review.md +8 -1
  541. package/docs/ru/cli/doc-translate.md +5 -1
  542. package/docs/ru/cli/extract.md +2 -1
  543. package/docs/ru/cli/fill.md +5 -1
  544. package/docs/ru/cli/index.md +4 -5
  545. package/docs/ru/cli/live.md +5 -1
  546. package/docs/ru/cli/login.md +2 -2
  547. package/docs/ru/cli/pull.md +5 -1
  548. package/docs/ru/cli/push.md +5 -1
  549. package/docs/ru/cli/scan.md +5 -1
  550. package/docs/ru/cli/standalone.md +5 -1
  551. package/docs/ru/cli/test.md +5 -1
  552. package/docs/ru/cli/watch.md +5 -1
  553. package/docs/ru/compat/i18n-js.md +1 -1
  554. package/docs/ru/compat/i18next.md +1 -1
  555. package/docs/ru/compat/lingui.md +1 -1
  556. package/docs/ru/compat/next-i18next.md +1 -1
  557. package/docs/ru/compat/next-intl.md +1 -1
  558. package/docs/ru/compat/next-translate.md +1 -1
  559. package/docs/ru/compat/ngx-translate.md +1 -1
  560. package/docs/ru/compat/nuxtjs-i18n.md +1 -1
  561. package/docs/ru/compat/polyglot.md +1 -1
  562. package/docs/ru/compat/react-i18next.md +1 -1
  563. package/docs/ru/compat/react-intl.md +1 -1
  564. package/docs/ru/compat/svelte-i18n.md +1 -1
  565. package/docs/ru/compat/transloco.md +1 -1
  566. package/docs/ru/compat/vue-i18n.md +1 -1
  567. package/docs/ru/intlayer_with_nextjs_15.md +1 -1
  568. package/docs/ru/intlayer_with_nextjs_16.md +1 -1
  569. package/docs/ru/intlayer_with_remix_3.md +558 -0
  570. package/docs/tr/benchmark/index.md +4 -1
  571. package/docs/tr/benchmark/nextjs.md +32 -27
  572. package/docs/tr/benchmark/solid.md +13 -10
  573. package/docs/tr/benchmark/svelte.md +12 -9
  574. package/docs/tr/benchmark/tanstack.md +29 -24
  575. package/docs/tr/benchmark/vue.md +11 -7
  576. package/docs/tr/cli/build.md +8 -1
  577. package/docs/tr/cli/configuration.md +3 -1
  578. package/docs/tr/cli/doc-review.md +8 -1
  579. package/docs/tr/cli/doc-translate.md +5 -1
  580. package/docs/tr/cli/extract.md +2 -1
  581. package/docs/tr/cli/fill.md +5 -1
  582. package/docs/tr/cli/index.md +4 -5
  583. package/docs/tr/cli/live.md +5 -1
  584. package/docs/tr/cli/login.md +2 -2
  585. package/docs/tr/cli/pull.md +5 -1
  586. package/docs/tr/cli/push.md +5 -1
  587. package/docs/tr/cli/scan.md +5 -1
  588. package/docs/tr/cli/standalone.md +5 -1
  589. package/docs/tr/cli/test.md +5 -1
  590. package/docs/tr/cli/watch.md +5 -1
  591. package/docs/tr/compat/i18n-js.md +1 -1
  592. package/docs/tr/compat/i18next.md +1 -1
  593. package/docs/tr/compat/lingui.md +1 -1
  594. package/docs/tr/compat/next-i18next.md +1 -1
  595. package/docs/tr/compat/next-intl.md +1 -1
  596. package/docs/tr/compat/next-translate.md +1 -1
  597. package/docs/tr/compat/ngx-translate.md +1 -1
  598. package/docs/tr/compat/nuxtjs-i18n.md +1 -1
  599. package/docs/tr/compat/polyglot.md +1 -1
  600. package/docs/tr/compat/react-i18next.md +1 -1
  601. package/docs/tr/compat/react-intl.md +1 -1
  602. package/docs/tr/compat/svelte-i18n.md +1 -1
  603. package/docs/tr/compat/transloco.md +1 -1
  604. package/docs/tr/compat/vue-i18n.md +1 -1
  605. package/docs/tr/intlayer_with_nextjs_15.md +1 -1
  606. package/docs/tr/intlayer_with_nextjs_16.md +1 -1
  607. package/docs/tr/intlayer_with_remix_3.md +566 -0
  608. package/docs/uk/benchmark/index.md +4 -1
  609. package/docs/uk/benchmark/nextjs.md +32 -27
  610. package/docs/uk/benchmark/solid.md +13 -10
  611. package/docs/uk/benchmark/svelte.md +12 -9
  612. package/docs/uk/benchmark/tanstack.md +29 -24
  613. package/docs/uk/benchmark/vue.md +11 -7
  614. package/docs/uk/cli/build.md +8 -1
  615. package/docs/uk/cli/configuration.md +3 -1
  616. package/docs/uk/cli/doc-review.md +8 -1
  617. package/docs/uk/cli/doc-translate.md +5 -1
  618. package/docs/uk/cli/extract.md +2 -1
  619. package/docs/uk/cli/fill.md +5 -1
  620. package/docs/uk/cli/index.md +4 -5
  621. package/docs/uk/cli/live.md +5 -1
  622. package/docs/uk/cli/login.md +2 -2
  623. package/docs/uk/cli/pull.md +5 -1
  624. package/docs/uk/cli/push.md +5 -1
  625. package/docs/uk/cli/scan.md +5 -1
  626. package/docs/uk/cli/standalone.md +5 -1
  627. package/docs/uk/cli/test.md +5 -1
  628. package/docs/uk/cli/watch.md +5 -1
  629. package/docs/uk/compat/i18n-js.md +1 -1
  630. package/docs/uk/compat/i18next.md +1 -1
  631. package/docs/uk/compat/lingui.md +1 -1
  632. package/docs/uk/compat/next-i18next.md +1 -1
  633. package/docs/uk/compat/next-intl.md +1 -1
  634. package/docs/uk/compat/next-translate.md +1 -1
  635. package/docs/uk/compat/ngx-translate.md +1 -1
  636. package/docs/uk/compat/nuxtjs-i18n.md +1 -1
  637. package/docs/uk/compat/polyglot.md +1 -1
  638. package/docs/uk/compat/react-i18next.md +1 -1
  639. package/docs/uk/compat/react-intl.md +1 -1
  640. package/docs/uk/compat/svelte-i18n.md +1 -1
  641. package/docs/uk/compat/transloco.md +1 -1
  642. package/docs/uk/compat/vue-i18n.md +1 -1
  643. package/docs/uk/intlayer_with_nextjs_15.md +1 -1
  644. package/docs/uk/intlayer_with_nextjs_16.md +1 -1
  645. package/docs/uk/intlayer_with_remix_3.md +566 -0
  646. package/docs/ur/cli/index.md +4 -5
  647. package/docs/ur/cli/scan.md +5 -1
  648. package/docs/ur/cli/standalone.md +5 -1
  649. package/docs/vi/benchmark/index.md +4 -1
  650. package/docs/vi/benchmark/nextjs.md +32 -27
  651. package/docs/vi/benchmark/solid.md +13 -10
  652. package/docs/vi/benchmark/svelte.md +12 -9
  653. package/docs/vi/benchmark/tanstack.md +29 -24
  654. package/docs/vi/benchmark/vue.md +11 -7
  655. package/docs/vi/cli/build.md +8 -1
  656. package/docs/vi/cli/configuration.md +3 -1
  657. package/docs/vi/cli/doc-review.md +8 -1
  658. package/docs/vi/cli/doc-translate.md +5 -1
  659. package/docs/vi/cli/extract.md +2 -1
  660. package/docs/vi/cli/fill.md +5 -1
  661. package/docs/vi/cli/index.md +4 -5
  662. package/docs/vi/cli/live.md +5 -1
  663. package/docs/vi/cli/login.md +2 -2
  664. package/docs/vi/cli/pull.md +5 -1
  665. package/docs/vi/cli/push.md +5 -1
  666. package/docs/vi/cli/scan.md +5 -1
  667. package/docs/vi/cli/standalone.md +5 -1
  668. package/docs/vi/cli/test.md +5 -1
  669. package/docs/vi/cli/watch.md +5 -1
  670. package/docs/vi/compat/i18n-js.md +1 -1
  671. package/docs/vi/compat/i18next.md +1 -1
  672. package/docs/vi/compat/lingui.md +1 -1
  673. package/docs/vi/compat/next-i18next.md +1 -1
  674. package/docs/vi/compat/next-intl.md +1 -1
  675. package/docs/vi/compat/next-translate.md +1 -1
  676. package/docs/vi/compat/ngx-translate.md +1 -1
  677. package/docs/vi/compat/nuxtjs-i18n.md +1 -1
  678. package/docs/vi/compat/polyglot.md +1 -1
  679. package/docs/vi/compat/react-i18next.md +1 -1
  680. package/docs/vi/compat/react-intl.md +1 -1
  681. package/docs/vi/compat/svelte-i18n.md +1 -1
  682. package/docs/vi/compat/transloco.md +1 -1
  683. package/docs/vi/compat/vue-i18n.md +1 -1
  684. package/docs/vi/intlayer_with_nextjs_15.md +1 -1
  685. package/docs/vi/intlayer_with_nextjs_16.md +1 -1
  686. package/docs/vi/intlayer_with_remix_3.md +566 -0
  687. package/docs/zh/benchmark/index.md +4 -1
  688. package/docs/zh/benchmark/nextjs.md +32 -27
  689. package/docs/zh/benchmark/solid.md +13 -10
  690. package/docs/zh/benchmark/svelte.md +12 -9
  691. package/docs/zh/benchmark/tanstack.md +29 -24
  692. package/docs/zh/benchmark/vue.md +11 -7
  693. package/docs/zh/cli/build.md +8 -1
  694. package/docs/zh/cli/configuration.md +3 -1
  695. package/docs/zh/cli/doc-review.md +8 -1
  696. package/docs/zh/cli/doc-translate.md +5 -1
  697. package/docs/zh/cli/extract.md +2 -1
  698. package/docs/zh/cli/fill.md +5 -1
  699. package/docs/zh/cli/index.md +4 -5
  700. package/docs/zh/cli/live.md +5 -1
  701. package/docs/zh/cli/login.md +2 -2
  702. package/docs/zh/cli/pull.md +5 -1
  703. package/docs/zh/cli/push.md +5 -1
  704. package/docs/zh/cli/scan.md +5 -1
  705. package/docs/zh/cli/standalone.md +5 -1
  706. package/docs/zh/cli/test.md +5 -1
  707. package/docs/zh/cli/watch.md +5 -1
  708. package/docs/zh/compat/i18n-js.md +1 -1
  709. package/docs/zh/compat/i18next.md +1 -1
  710. package/docs/zh/compat/lingui.md +1 -1
  711. package/docs/zh/compat/next-i18next.md +1 -1
  712. package/docs/zh/compat/next-intl.md +1 -1
  713. package/docs/zh/compat/next-translate.md +1 -1
  714. package/docs/zh/compat/ngx-translate.md +1 -1
  715. package/docs/zh/compat/nuxtjs-i18n.md +1 -1
  716. package/docs/zh/compat/polyglot.md +1 -1
  717. package/docs/zh/compat/react-i18next.md +1 -1
  718. package/docs/zh/compat/react-intl.md +1 -1
  719. package/docs/zh/compat/svelte-i18n.md +1 -1
  720. package/docs/zh/compat/transloco.md +1 -1
  721. package/docs/zh/compat/vue-i18n.md +1 -1
  722. package/docs/zh/intlayer_with_nextjs_15.md +1 -1
  723. package/docs/zh/intlayer_with_nextjs_16.md +1 -1
  724. package/docs/zh/intlayer_with_remix_3.md +558 -0
  725. package/package.json +7 -7
  726. package/src/generated/blog.entry.ts +20 -0
  727. package/src/generated/docs.entry.ts +20 -20
  728. package/docs/ar/cli/ci.md +0 -186
  729. package/docs/de/cli/ci.md +0 -186
  730. package/docs/en/cli/ci.md +0 -216
  731. package/docs/en-GB/cli/ci.md +0 -186
  732. package/docs/es/cli/ci.md +0 -186
  733. package/docs/fr/cli/ci.md +0 -186
  734. package/docs/hi/cli/ci.md +0 -186
  735. package/docs/id/cli/ci.md +0 -186
  736. package/docs/it/cli/ci.md +0 -186
  737. package/docs/ja/cli/ci.md +0 -186
  738. package/docs/ko/cli/ci.md +0 -186
  739. package/docs/pl/cli/ci.md +0 -186
  740. package/docs/pt/cli/ci.md +0 -186
  741. package/docs/ru/cli/ci.md +0 -186
  742. package/docs/tr/cli/ci.md +0 -186
  743. package/docs/uk/cli/ci.md +0 -186
  744. package/docs/vi/cli/ci.md +0 -186
  745. package/docs/zh/cli/ci.md +0 -186
@@ -0,0 +1,304 @@
1
+ ---
2
+ createdAt: 2026-09-09
3
+ updatedAt: 2026-09-10
4
+ title: "تاريخ تدويل جافاسكريبت (i18n): من 2011 إلى 2026"
5
+ description: استكشف تطور تدويل الواجهات الأمامية من 2011 إلى 2026. اكتشف تواريخ الإصدار، والمشكلات المعمارية، والابتكارات الرئيسية عبر React وVue وNext.js وAngular وSvelte وSolid.
6
+ keywords:
7
+ - تاريخ i18n
8
+ - تدويل جافاسكريبت
9
+ - تدويل React
10
+ - تدويل Next.js
11
+ - تدويل Vue
12
+ - تدويل Angular
13
+ - تدويل Svelte
14
+ - تدويل Solid
15
+ - i18next
16
+ - intlayer
17
+ slugs:
18
+ - blog
19
+ - history-of-js-internationalization
20
+ author: aymericzip
21
+ ---
22
+
23
+ # تاريخ تدويل جافاسكريبت (i18n)
24
+
25
+ التدويل ليس مفهوماً جديداً. فقبل ظهور جافاسكريبت والويب بوقت طويل، كانت البرمجيات تتعامل بالفعل مع لغات متعددة، وعملات، وتنسيقات تواريخ، ومعايير إقليمية. وكانت أنظمة التشغيل الرسومية الأولى مثل GEM وMac OS تعالج العديد من هذه التحديات في ثمانينيات القرن الماضي.
26
+
27
+ وانتقلت هذه الأفكار لاحقاً إلى أطر عمل الخوادم (Backend). فقد طورت كل من Ruby on Rails وDjango وأطر عمل Java وتطبيقات PHP حلولها الخاصة للتدويل. وكانت الأسئلة الأساسية واضحة ومفهومة:
28
+
29
+ - أين يجب تخزين الترجمات؟
30
+ - كيف ننسق التواريخ، والأرقام، والعملات؟
31
+ - كيف نتعامل مع صيغ الجمع والاختلافات النحوية؟
32
+ - كيف نحدد اللغة المناسبة التي يجب أن يراها المستخدم؟
33
+
34
+ عندما كان الخادم يتولى تصيير الصفحات، كان الأمر بسيطاً نسبياً. كان التطبيق يحمّل الترجمات المناسبة، ويُنشئ كود HTML، ثم يرسل النتيجة إلى المتصفح.
35
+
36
+ > تجدر الإشارة إلى أن PHP وGNU gettext كانا حجر الأساس لنمط الدالة المساعدة `t()` الذي أصبح واسع الانتشار لاحقاً في جافاسكريبت وJSX.
37
+
38
+ ثم بدأت جافاسكريبت بالسيطرة على المتصفح.
39
+
40
+ ومع تحول التطبيقات من صفحات تُنشأ على الخادم إلى تطبيقات جهة العميل (Client-side) المعقدة، أصبح التدويل مشكلة تخص الواجهة الأمامية أيضاً. وفجأة، بات على المتصفح تحميل الترجمات، وتبديل اللغات، وتنسيق القيم، والتعامل مع الجموع، وتحديث واجهة المستخدم دون إعادة تحميل الصفحة.
41
+
42
+ وهنا برز تساؤل جديد:
43
+
44
+ **كيف تجعل التطبيق متعدد اللغات دون إرسال كميات هائلة من بيانات الترجمة وأكواد وقت التشغيل إلى كل مستخدم؟**
45
+
46
+ شكل هذا السؤال مسار تدويل جافاسكريبت لأكثر من عقد كامل.
47
+
48
+ وقد تغيرت الحلول بشكل جذري. انتقلنا من كائنات جافاسكريبت العامة واستدعاءات `t('some.key')`، إلى مكتبات مخصصة لكل إطار عمل، والاستخراج وقت الترجمة (Compile-time)، والأنواع المولدة عبر TypeScript، ومكونات الخادم (Server Components)، وتقنيات تقليم الشجرة (Tree-shaking)، وصولاً إلى الأساليب القائمة على المترجم (Compiler-based) حيث تتحول الترجمات إلى كود جافاسكريبت نقي أثناء البناء.
49
+
50
+ يستعرض هذا المقال هذا التطور بين عامي 2011 و2026: ما حاولت كل مرحلة حله، وما نجح منها، وما لم ينجح، وكيف أثرت بنية تطبيقات الواجهة الأمامية في أسلوب تعاملنا مع التدويل اليوم.
51
+
52
+ ![منظومة مكتبات تدويل جافاسكريبت](https://github.com/aymericzip/intlayer/blob/main/docs/assets/cloud_i18n_logo.png?raw=true)
53
+
54
+ ## جدول المحتويات
55
+
56
+ <TOC/>
57
+
58
+ ## شبكة الويب الأولى: تدويل جافاسكريبت قبل 2016
59
+
60
+ لفهم موقع أدوات التدويل الحديثة اليوم، يجب أن نتذكر كيف كان بناء الويب بين عامي 2011 و2015.
61
+
62
+ ### انتقال المعالجة إلى العميل
63
+
64
+ في أوائل العقد الأول من القرن الحادي والعشرين، كان التدويل مسؤولية الخادم بشكل شبه كامل. وكانت جافاسكريبت مجرد طبقة إضافية للتحريكات، والتحقق من صحة النماذج، وعناصر DOM البسيطة عبر jQuery.
65
+
66
+ ومع تزايد شعبية تطبيقات الصفحة الواحدة (SPAs) عبر Backbone.js وKnockout.js والنسخ الأولى من AngularJS، انتقل منطق التصيير مباشرة إلى المتصفح. وبات كود الواجهة الأمامية بحاجة إلى عرض تواريخ محلية، وتنسيق العملات، والتعامل مع الجموع، وتغيير النصوص ديناميكياً دون إعادة تحميل الصفحة بالكامل.
67
+
68
+ ومع ذلك، كانت بيئة المتصفحات في عام 2011 تفتقر إلى المقومات الأساسية لهذا التحدي:
69
+
70
+ <AccordionGroup>
71
+ <Accordion header="غياب واجهة برمجة تطبيقات أصلية للتدويل">
72
+
73
+ لم تصدر مواصفة ECMAScript Internationalization API (ECMA-402) حتى ديسمبر 2012، وهي التي قدمت كائن `Intl` العام. وقبل تبني المتصفحات لهذا الكائن، كان تنسيق التاريخ والأرقام يتطلب دوال مخصصة أو مكتبات تعويضية ضخمة (polyfills).
74
+
75
+ </Accordion>
76
+ <Accordion header="غياب أدوات حزم الوحدات الحديثة">
77
+
78
+ كانت أدوات مثل Webpack في بداياتها، ولم تكن وحدات ESM مدعومة بعد في المتصفحات. كان المطورون يضمّنون النصوص عبر وسوم `<script>`، وغالباً ما يحقنون الترجمات في كائنات عامة مثل `window.translations = { ... }`.
79
+
80
+ </Accordion>
81
+ <Accordion header="حزم JSON ضخمة وأحادية">
82
+
83
+ كانت ملفات الترجمة تُكتب في ملفات JSON مركزية هائلة. وكان المستخدم في طوكيو عند فتحه للصفحة الرئيسية يضطر لتحميل نصوص إعدادات الحساب، ولوحات الفواتير، ولوحات الإدارة أيضاً.
84
+
85
+ </Accordion>
86
+ </AccordionGroup>
87
+
88
+ ### الموجة الأولى من مكتبات جهة العميل
89
+
90
+ بين عامي 2012 و2015، أُرسيت القواعد الأولى لتدويل جافاسكريبت الحديث:
91
+
92
+ <AccordionGroup>
93
+ <Accordion header="i18next (يناير 2012)">
94
+
95
+ أنشأها Jan Mühlemann، ووضعت المخطط الأساسي لقواميس مفتاح-قيمة في وقت التشغيل لجافاسكريبت. وقدمت التنقل بين المفاتيح، والاستيفاء المتغير، وقواعد صيغ الجمع، وبنية قابلة للتوسيع لكواشف اللغات والخوادم الخلفية. وسرعان ما أصبحت المعيار القياسي لجافاسكريبت الأصلية وخوادم Node.js المبكرة.
96
+
97
+ </Accordion>
98
+ <Accordion header="vue-i18n (مايو 2014)">
99
+
100
+ أنشأها Kazupon (Kazuya Kawaguchi)، وكيّفت التدويل مع نموذج ربط البيانات التفاعلي في Vue.js، وقدمت توجيهات القوالب (`v-t`) والمساعد `$t()`.
101
+
102
+ </Accordion>
103
+ <Accordion header="react-intl (يونيو 2014)">
104
+
105
+ أنشأتها Yahoo! كجزء من مشروع FormatJS، وجلبت معايير ICU MessageFormat وواجهات برمجة المتصفح `Intl` إلى React عبر مكونات تصريحية مثل `<FormattedMessage>` و`<FormattedDate>`.
106
+
107
+ </Accordion>
108
+ <Accordion header="react-i18next (ديسمبر 2015)">
109
+
110
+ نقل Jan Mühlemann مكتبة `i18next` إلى مجتمع React السريع النمو، باستخدام المكونات عالية الرتبة (`withTranslation`) وموفري سياق React لإعادة تصيير المكونات عند تبديل اللغة.
111
+
112
+ </Accordion>
113
+ </AccordionGroup>
114
+
115
+ ### قيود حقبة ما قبل 2016
116
+
117
+ على الرغم من أن هذه الأدوات مكنت التطبيقات متعددة اللغات، إلا أن القيود المعمارية لتلك الحقبة فرضت صعوبات مستمرة:
118
+
119
+ <AccordionGroup>
120
+ <Accordion header="مفاتيح نصية هشة وغير مؤمنة">
121
+
122
+ استعلامات مثل `t('marketing.landing.hero.cta')` لم تقدم أي تحقق ساكن من الأخطاء. فالأخطاء الإملائية في المفاتيح كانت تفشل بصمت في بيئة الإنتاج، لتعرض نصوصاً فارغة أو معرف المفتاح الخام للمستخدمين النهائيين.
123
+
124
+ </Accordion>
125
+ <Accordion header="استهلاك موارد وقت التشغيل">
126
+
127
+ كان تحليل صياغة ICU وتقييم الاستيفاء القائم على التعابير النمطية في وقت التشغيل يستهلك موارد المعالج على الأجهزة المحمولة.
128
+
129
+ </Accordion>
130
+ <Accordion header="تضخم حزم الكود">
131
+
132
+ في غياب تقسيم الكود حسب المسارات أو المكونات، كانت جميع النصوص المترجمة تُحمَّل دفعة واحدة، مما أضر بمقاييس سرعة التحميل الأولى.
133
+
134
+ </Accordion>
135
+ <Accordion header="الفجوة بين المطور والمترجم">
136
+
137
+ كانت القواميس مخزنة في ملفات JSON مركزية بعيدة عن المكونات التي تعرضها، مما أدى لظهور مفاتيح مهملة وترجمات مفقودة بشكل متكرر.
138
+
139
+ </Accordion>
140
+ </AccordionGroup>
141
+
142
+ ## حقبة أطر العمل: التطور عبر المنظومات
143
+
144
+ بين 2016 و2026، تغيرت بنية الواجهات الأمامية جذرياً. أصبحت TypeScript هي المعيار، ونضجت البنى القائمة على المكونات، وقدمت أدوات الحزم مثل Webpack وVite وTurbopack تقنيات تقسيم الكود، ونقلت مكونات خادم React (RSC) التصيير مرة أخرى إلى الخادم، وبدأت المترجمات بتحليل وفحص كود التطبيق.
145
+
146
+ تستعرض علامات التبويب التالية كيف تعامل كل إطار عمل مع هذه التحديات عبر تواريخ الإصدار والدوافع والابتكارات الرئيسية. عبر هذه المنظومات، تعد مكتبة `react-intlayer` ونظيراتها (`next-intlayer` و`vue-intlayer` و`angular-intlayer` و`svelte-intlayer` و`solid-intlayer`) تطبيقات عالية الكفاءة مصممة خصيصاً لبيئات التشغيل الخاصة بها.
147
+
148
+ <Tabs>
149
+
150
+ <Tab label="Core JavaScript" value="javascript">
151
+
152
+ | الإصدار الأول | المكتبة | ما هدفت إلى حله | الابتكار الرئيسي |
153
+ | ------------- | ------------------------------------ | --------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
154
+ | يناير 2012 | `i18next` | توحيد عمليات البحث في القواميس أثناء وقت التشغيل للمتصفح وNode.js دون الارتباط بإطار عمل محدد. | بنية وقت تشغيل قابلة للتوسيع تفصل الترجمة الأساسية عن أدوات التحميل والكشف والتخزين المؤقت. |
155
+ | فبراير 2021 | `typesafe-i18n` | منع أخطاء وقت التشغيل الصامتة ومشاكل الاستيفاء الناتجة عن المفاتيح النصية غير المكتوبة بأنواع محددة. | دوال ترجمة مكتوبة بالكامل مولدة مباشرة من كائنات الترجمة دون اعتماديات تشغيل خارجية. |
156
+ | أكتوبر 2023 | `paraglide` (`@inlang/paraglide-js`) | إزالة البحث في قواميس وقت التشغيل والمحللات الثقيلة وتضخم حزم الكود. | تجميع الرسائل في وحدات ECMAScript قابلة لتقليم الشجرة (Tree-shakable) ودوال جافاسكريبت نقية. |
157
+ | أبريل 2024 | `intlayer` | استبدال فضاءات الأسماء غير القابلة للصيانة، وتجنب تسرب المحتوى بين الصفحات، وحل غياب الأمان النوعي في عصر TypeScript. | وضع ملفات `.content` مباشرة بجانب استدعاءات الدوال، وتوليد أنواع TypeScript تلقائياً، وتوفير نظام إدارة محتوى مرئي وأدوات ترجمة CLI بالذكاء الاصطناعي. |
158
+ | يونيو 2025 | `wuchale` | إزالة عناء استخراج النصوص يدوياً وابتكار مفاتيح ترجمة أثناء التطوير. | معالجة مسبقة على مستوى شجرة الصياغة التجريدية (AST) تكتشف النصوص المضمنة وتجمعها في دوال محلية دون أغلفة أثناء البناء. |
159
+
160
+ </Tab>
161
+
162
+ <Tab label="React" value="react">
163
+
164
+ | الإصدار الأول | المكتبة | ما هدفت إلى حله | الابتكار الرئيسي |
165
+ | ------------- | ---------------- | -------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
166
+ | يونيو 2014 | `react-intl` | توحيد تنسيق الأرقام والتواريخ والعملات وصيغ الجمع المعقدة في React. | مكونات تصريحية (`<FormattedMessage>` و`<FormattedDate>`) تنفذ معايير ICU MessageFormat وECMA-402. |
167
+ | ديسمبر 2015 | `react-i18next` | توفير تكامل اصطلاحي لمكتبة `i18next` في React مع إعادة تصيير تفاعلية. | تطورت مع React من المكونات عالية الرتبة إلى استيفاء JSX عبر `<Trans>` وخطاف `useTranslation`. |
168
+ | يناير 2018 | `@lingui/react` | تقليل أعباء حجم حزمة جافاسكريبت الناتجة عن محللات ICU في وقت التشغيل. | ماكروهات Babel/SWC لتجميع `<Trans>` و`t` في مصفوفات مفهرسة مدمجة وقت البناء. |
169
+ | ديسمبر 2020 | `use-intl` | تقديم بديل خفيف الوزن وقائم على الخطافات وآمن نوعياً لمكتبات React التقليدية. | خطافات `useTranslations` و`useFormatter` عملية مع تكامل عميق مع TypeScript. |
170
+ | فبراير 2021 | `@tolgee/react` | إزالة بطء دورة الملاحظات بين المطورين والمترجمين والمصممين. | تعديل النصوص مباشرة في المتصفح عبر النقر مع مفتاح Alt، وتحرير الترجمات في مكانها، والتقاط لقطات الشاشة. |
171
+ | أبريل 2024 | `react-intlayer` | تقديم تطبيق عالي الأداء من Intlayer مصمم خصيصاً لدورة حياة مكونات React، متخلصاً من قواميس JSON المركزية والأسماء المعقدة. | خطاف `useIntlayer` عالي الأداء لتصيير React، وأنواع TypeScript مولدة تلقائياً، وتقليم شجرة لكل مكون، ومزامنة حية مع نظام إدارة المحتوى المرئي. |
172
+ | يوليو 2024 | `gt-react` | أتمتة تصدير الملفات وتسليم الترجمات يدوياً وصيانتها. | ترجمة سحابية آلية بالذكاء الاصطناعي مباشرة داخل مكونات React عبر مسارات ترجمة آلية. |
173
+ | أغسطس 2025 | `@wuchale/jsx` | إلغاء تسمية المفاتيح اليدوية وخطافات الترجمة الروتينية في JSX. | تحويل AST يستخرج نصوص JSX الخام تلقائياً ويجمعها في نظائرها المحلية. |
174
+
175
+ </Tab>
176
+
177
+ <Tab label="Next.js" value="nextjs">
178
+
179
+ | الإصدار الأول | المكتبة | ما هدفت إلى حله | الابتكار الرئيسي |
180
+ | ------------- | ------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
181
+ | نوفمبر 2018 | `next-i18next` | دعم SSR وSSG مع `i18next` في Pages Router لـ Next.js دون شلالات طلبات العميل. | توفير `serverSideTranslations` و`appWithTranslation` لتمرير فضاءات الأسماء لخصائص الصفحات. |
182
+ | ديسمبر 2019 | `next-translate` | تبسيط الإعدادات وتقليل حجم الحزم في تطبيقات Pages Router. | إضافة Webpack loader لحقن فضاءات الأسماء المطلوبة فقط لكل صفحة تلقائياً. |
183
+ | نوفمبر 2020 | `next-intl` | إعادة تصميم التدويل لـ Next.js مع App Router ومكونات خادم React (RSC) وSSR المتدفق. | تكامل أصلي مع وسيط Next.js App Router وServer Actions ومكونات الخادم غير المتزامنة دون جافاسكريبت على العميل. |
184
+ | يوليو 2022 | `next-international` | تحقيق أقصى أمان نوعي في TypeScript بأقل حجم إضافي لحزمة العميل. | توليد أنواع صارمة للمفاتيح مع محولات خفيفة لـ App Router وPages Router. |
185
+ | أبريل 2024 | `paraglide-next` (`@inlang/paraglide-next`) | تقديم رسائل مجمعة دون وقت تشغيل لـ Next.js App Router وPages Router. | توجيه وسيط مقترن بدوال رسائل قابلة لتقليم الشجرة لتجنب تحليل JSON في مكونات الخادم وحزم العميل. |
186
+ | أبريل 2024 | `next-intlayer` | توفير محول عالي الأداء لمكونات الخادم في Next.js App Router وPages Router يغني عن تمرير دوال `t()` عبر الخصائص. | محول أصلي يتيح استدعاء `useIntlayer` مباشرة في مكونات الخادم المتزامنة (مثل أشرطة التنقل) دون حفر الخصائص (prop drilling)، مع تصيير خادم فوري وتوجيه وسيط ومزامنة CMS مرئية. |
187
+ | سبتمبر 2024 | `gt-next` | أتمتة توليد المحتوى متعدد اللغات والتوجيه المحلي الديناميكي في Next.js باستخدام الذكاء الاصطناعي. | تكامل مع App Router يجمع بين الترجمة الآلية السحابية ووسيط الحافة والتخزين المؤقت في Next.js. |
188
+
189
+ </Tab>
190
+
191
+ <Tab label="Vue & Nuxt" value="vue">
192
+
193
+ | الإصدار الأول | المكتبة | ما هدفت إلى حله | الابتكار الرئيسي |
194
+ | ------------- | -------------- | ----------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
195
+ | مايو 2014 | `vue-i18n` | توفير تدويل تفاعلي واصطلاحي لتطبيقات Vue. | تكامل تفاعلي عميق، وتوجيهات قوالب (`v-t`)، ومساعدات `$t`، وكتل `<i18n>` المخصصة داخل المكونات أحادية الملف. |
196
+ | نوفمبر 2017 | `@nuxt/i18n` | معالجة توجيه الروابط المترجمة، ووسوم SEO hreflang، وترطيب SSR في Nuxt. | وحدة توجيه متكاملة تنشئ مسارات مترجمة وترويسات SEO وتحميلاً تدريجياً للأجزاء. |
197
+ | أغسطس 2019 | `fluent-vue` | التعامل مع التذكير والتأنيث والحالات الإعرابية المعقدة والتركيبات غير المتماثلة في Vue. | تكامل صيغة Mozilla Project Fluent في Vue لتفادي كتابة شروط معقدة للتغيرات اللغوية. |
198
+ | أبريل 2025 | `vue-intlayer` | تقديم تطبيق عالي الأداء لـ Intlayer مصمم لـ Vue 3 Composition API وNuxt دون تلويث النطاق العام. | دالة تفاعلية `useIntlayer` مخصصة لتتبع التفاعلية في Vue 3، ونطاق مكونات مباشر، وإكمال تلقائي كامل في TypeScript، وتحرير مرئي مدمج. |
199
+
200
+ </Tab>
201
+
202
+ <Tab label="Angular" value="angular">
203
+
204
+ | الإصدار الأول | المكتبة | ما هدفت إلى حله | الابتكار الرئيسي |
205
+ | ------------- | ------------------- | ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
206
+ | فبراير 2017 | `ngx-translate` | توفير ترجمة ديناميكية أثناء وقت التشغيل في Angular دون الحاجة لبناء حزم منفصلة لكل لغة. | خدمة `TranslateService` وأنبوب `translate` لتحميل الترجمات ديناميكياً وتبديل اللغات. |
207
+ | يوليو 2019 | `@ngneat/transloco` | حل مشاكل الأداء وغياب النطاقات المحددة والميزات الناقصة في مكتبات Angular القديمة. | توجيه هيكلي (`*transloco`)، وترجمات محددة النطاق للوحدات المحملة تدريجياً، ودعم SSR، وأداة استخراج CLI. |
208
+ | سبتمبر 2019 | `@angular/localize` | تحديث نظام التدويل المدمج في Angular لتفادي إعادة بناء TypeScript لكل لغة. | نصوص نموذجية معلّمة مع `$localize` تُحقن كخطوة سريعة بعد البناء في محرك Ivy. |
209
+ | فبراير 2021 | `@tolgee/ngx` | دمج الترجمة التعاونية في سياق الصفحة والتقاط لقطات الشاشة في سير عمل Angular. | أنابيب وتوجيهات Angular متصلة مباشرة بـ Tolgee للترجمة الفورية داخل المتصفح. |
210
+ | أبريل 2025 | `angular-intlayer` | توفير تطبيق عالي الأداء من Intlayer مصمم خصيصاً لـ Angular الحديثة (Signals والمكونات المستقلة وSSR). | تكامل محتوى تفاعلي قائم على الإشارات (Signals) لاكتشاف التغييرات، وحقن اعتماديات مستقل، ومزامنة حية مع نظام إدارة المحتوى المرئي. |
211
+
212
+ </Tab>
213
+
214
+ <Tab label="Svelte & SvelteKit" value="svelte">
215
+
216
+ | الإصدار الأول | المكتبة | ما هدفت إلى حله | الابتكار الرئيسي |
217
+ | ------------- | ----------------- | -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
218
+ | يوليو 2018 | `svelte-i18n` | توفير مكتبة تدويل تفاعلية تتلاءم مع مخازن (stores) Svelte التفاعلية. | بحث `$t` مدعوم بالمخازن لضمان تحديث دقيق لعناصر DOM عند تغيير اللغة. |
219
+ | ديسمبر 2021 | `sveltekit-i18n` | معالجة SSR وتحميل الترجمات حسب المسار بنظافة في تطبيقات SvelteKit. | بنية تحميل معيارية تجلب فقط الترجمات والمُنسقات المطلوبة للمسار النشط. |
220
+ | نوفمبر 2021 | `@tolgee/svelte` | تمكين الترجمة في سياق الشاشة لتطبيقات Svelte. | روابط لمخازن Svelte تتكامل مع واجهة Tolgee في المتصفح وتلتقط الصور تلقائياً. |
221
+ | أبريل 2025 | `svelte-intlayer` | تقديم تطبيق عالي الأداء من Intlayer مصمم لـ Svelte 5 وSvelteKit. | روابط محتوى تفاعلية متوافقة مع Svelte 5 Runes (`$state`)، وإعلانات محتوى محددة النطاق، وإضافات بناء دون إعدادات، وتحرير مرئي. |
222
+ | يوليو 2025 | `@wuchale/svelte` | إزالة روتين كتابة القواميس واستيراد دوال `$t` في مكونات Svelte. | معالج قبلي لـ Svelte يحلل القوالب وقت البناء ويجمع النصوص في مخرجات محلية مباشرة. |
223
+
224
+ </Tab>
225
+
226
+ <Tab label="SolidJS" value="solid">
227
+
228
+ | الإصدار الأول | المكتبة | ما هدفت إلى حله | الابتكار الرئيسي |
229
+ | ------------- | ------------------------ | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
230
+ | سبتمبر 2021 | `@solid-primitives/i18n` | توفير بدائية تدويل اصطلاحية تطابق تفاعلية SolidJS الدقيقة. | محلل ترجمة تفاعلي قائم على الإشارات يحدث عقد DOM دون الحاجة إلى DOM افتراضي أو إعادة تصيير غير ضرورية. |
231
+ | أبريل 2025 | `solid-intlayer` | تقديم تطبيق عالي الأداء من Intlayer مصمم خصيصاً لـ SolidJS وSolidStart. | ربط محتوى متوافق مع إشارات Solid الدقيقة دون تكلفة Virtual DOM، مع إكمال تلقائي للأنواع وتحرير مرئي. |
232
+ | يونيو 2026 | `@lingui/solid` | توسيع استخراج الماكرو وقت البناء ودعم ICU MessageFormat إلى SolidJS. | تحويلات ماكرو متوافقة مع تفاعلية Solid الدقيقة لتجميع الرسائل في هياكل تشغيل خفيفة. |
233
+
234
+ </Tab>
235
+
236
+ </Tabs>
237
+
238
+ ## الحقب المعمارية الأربع لتدويل جافاسكريبت
239
+
240
+ ![تاريخ مكتبات تدويل جافاسكريبت](https://github.com/aymericzip/intlayer/blob/main/docs/assets/history_i18n.png?raw=true)
241
+
242
+ بالنظر إلى خمسة عشر عاماً من التطور، يمكننا تقسيم تاريخ تدويل جافاسكريبت إلى أربع حقب معمارية بارزة:
243
+
244
+ <AccordionGroup>
245
+ <Accordion header="1. حقبة قواميس وقت التشغيل (2011 إلى 2017)">
246
+
247
+ تميزت بظهور `i18next` و`react-intl` و`vue-i18n`. حيث كانت التطبيقات تحمل فهارس JSON ثابتة في الذاكرة، وتقوم دوال وقت التشغيل بمطابقة المفاتيح النصية مع الكائنات المتداخلة. وكانت صيغ الجمع والاستيفاء تعالج في المتصفح عبر التعابير النمطية ومحللات ICU.
248
+
249
+ </Accordion>
250
+ <Accordion header="2. حقبة ماكرو وقت البناء والأمان النوعي (2018 إلى 2021)">
251
+
252
+ تميزت بمكتبات `lingui` و`next-translate` و`transloco` و`typesafe-i18n`. أدرك المطورون التأثير السلبي للمحللات في وقت التشغيل وهشاشة المفاتيح غير المكتوبة. واستخرجت ماكروهات Babel الرسائل وقت البناء، وقامت إضافات الحزم بتجزئة القواميس حسب الصفحة، وبدأ مترجم TypeScript بالتحقق من وسائط الترجمة.
253
+
254
+ </Accordion>
255
+ <Accordion header="3. حقبة مكونات الخادم والتصيير المتدفق (2022 إلى 2024)">
256
+
257
+ تميزت بمكتبات `next-intl` و`next-international` ومحولات RSC الأولى. ومع ظهور مكونات خادم React وNext.js App Router، تحول الهدف إلى تصيير المحتوى المترجم على الخادم دون شحن قواميس الترجمة أو محركات تشغيل التدويل إلى المتصفح.
258
+
259
+ </Accordion>
260
+ <Accordion header="4. حقبة المترجم الحديث والمحتوى الموحد (2024 إلى 2026)">
261
+
262
+ تميزت بظهور `paraglide` و`intlayer` و`wuchale`. أصبحت الأدوات الحديثة تتعامل مع التدويل ليس كعملية استبدال نصوص فحسب، بل كبنية محتوى متكاملة. تحول المترجمات الرسائل مباشرة إلى دوال قابلة للتقليم، وتوضع تعريفات المحتوى جنباً إلى جنب مع المكونات، وتتكامل المحررات المرئية وأدوات الذكاء الاصطناعي مباشرة في مسار عمل المطور. وفي هذا النموذج، يفصل Intlayer تعريف المحتوى وتوليد الأنواع عن التسليم وقت التشغيل، مقدماً تطبيقات مخصصة عالية الكفاءة (`react-intlayer` و`next-intlayer` و`vue-intlayer` و`angular-intlayer` و`svelte-intlayer` و`solid-intlayer`) لكل بيئة.
263
+
264
+ </Accordion>
265
+ </AccordionGroup>
266
+
267
+ ## الخاتمة: الموازنة بين تجربة المطور، والأداء، وثورة الذكاء الاصطناعي
268
+
269
+ على مدار خمسة عشر عاماً وأربع موجات معمارية متميزة، ظل التحدي الأكبر لتدويل جافاسكريبت ثابتاً: التوفيق بين تجربة المطور (DX) وقابلية صيانة الكود على المدى الطويل، مع تقديم أداء فائق وسريع للمستخدم النهائي.
270
+
271
+ ما بدأ كمتغيرات عامة وملفات JSON مركزية معقدة تطور تدريجياً إلى محتوى مدمج مع المكونات، وأمان نوعي تلقائي في TypeScript، وتصيير خادم دون شلالات طلبات، وتفريغ للكود غير المستخدم وقت البناء.
272
+
273
+ ### ثورة الذكاء الاصطناعي ونموذج SaaS التقليدي
274
+
275
+ كان العامل الحاسم في السنوات الأخيرة هو توليد الترجمات المؤتمت بواسطة الذكاء الاصطناعي، وهو ما شكل تحدياً جوهرياً لنماذج الأعمال التقليدية لمنصات إدارة الترجمة (TMS).
276
+
277
+ تاريخياً، كان تجميع النصوص في ملفات JSON مركزية بمثابة تسوية هندسية لتسهيل عمل منصات TMS الخارجية، حيث وفر مستودعاً واحداً للمترجمين لتصدير واستيراد البيانات. لكن هذه الراحة للمنصات الخارجية فرضت ثمناً معمارياً باهظاً على المطورين: تعارضات Git مستمرة بين فروع العمل، ومفاتيح مهملة يصعب تعقبها، وافتقار للسياق البرمجي، وفضاءات أسماء معقدة.
278
+
279
+ ومع ظهور الذكاء الاصطناعي التوليدي وأدوات التجميع الحديثة، باتت الأولوية لتجربة المطور. حيث تستطيع أدوات البناء وواجهات الأوامر (CLI) الآن اكتشاف ملفات المحتوى المدمجة والتحقق منها وترجمتها تلقائياً، مما ألغى الحاجة للتضحية بالبنية البرمجية النظيفة من أجل خطوط إنتاج الترجمة.
280
+
281
+ ولأكثر من عقد، بنت منصات الترجمة التجارية عوائدها حول هذه الصعوبات اليدوية:
282
+
283
+ - ركزت حلول مثل **Locize** (المنصة السحابية التجارية وراء `i18next`) و**Crowdin** (الشريك والداعم الأساسي لـ `vue-i18n` و`next-intl` و`use-intl` و`lingui`) على نماذج تعتمد على استضافة الترجمات، وحدود الخطط الشهرية، والرسوم المحتسبة لكل كلمة.
284
+ - ونظراً لأن هذه المنصات تستفيد مادياً من حجم النصوص وسير العمل اليدوي، فليس لديها حافز اقتصادي لتقديم توليد ترجمة مؤتمت ومجاني بالكامل داخل أدوات المطور.
285
+
286
+ ### موجة الذكاء الاصطناعي الجديدة مقابل التكلفة المباشرة للمزود
287
+
288
+ مع انخفاض تكلفة نماذج اللغة الكبيرة (LLMs) إلى أجزاء من السنت مع زيادة دقتها اللغوية، ظهر جيل جديد من الأدوات التجارية:
289
+
290
+ - حاولت منصات مثل Paraglide عبر **linguo.dev** أو **General Translation** (`gt-react` و`gt-next`) الاستفادة من هذه الموجة عبر اشتراكات شهرية وخدمات سحابية وسيطة.
291
+ - في المقابل، يوفر **Intlayer** أتمتة الترجمة بالذكاء الاصطناعي مباشرة من خلال واجهة سطر الأوامر (CLI)، مما يتيح للفرق ربط مفاتيح API الخاصة بهم (مثل OpenAI أو Anthropic أو Mistral أو Google Gemini) دون هوامش ربح أو عمولات، وبالتكلفة المباشرة الدقيقة لمزود الذكاء الاصطناعي المختار.
292
+
293
+ ### أكثر من مجرد تدويل: نظام محتوى متعدد اللغات متكامل
294
+
295
+ أخيراً، تخطى تطوير الويب الحديث فكرة استبدال الكلمات البسيطة. لم تعد التطبيقات المعاصرة تقتصر على ترجمة كلمات منفردة مثل `"إرسال"` أو `"تسجيل الدخول"`، بل باتت تتطلب محتوى غنياً وديناميكياً ومنظماً يمتد عبر مسارات مستخدم معقدة.
296
+
297
+ يتعامل Intlayer مع هذه القضية ليس كمجرد أداة بحث عن مفاتيح نصية، بل كنظام محتوى متعدد اللغات شامل ومكتمل. فمع دعمه الأصلي لمستندات Markdown، وتراكيب HTML، ومخططات البيانات المتداخلة، ونظام الإدارة المرئي للمحتوى (Visual CMS)، يردم Intlayer الفجوة بين هندسة الكود، وأتمتة الذكاء الاصطناعي، وإدارة المحتوى.
298
+
299
+ للاطلاع على مقارنات معمارية أعمق وأدلة انتقال عملية، استكشف الموارد التالية:
300
+
301
+ - [المترجم مقابل التدويل التصريحي](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ar/compiler_vs_declarative_i18n.md)
302
+ - [التدويل لكل مكون مقابل التدويل المركزي](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ar/per-component_vs_centralized_i18n.md)
303
+ - [الأداء ومعايير القياس](https://intlayer.org/doc/benchmark)
304
+ - [محولات توافق Intlayer](https://intlayer.org/doc/concept/compatibility)