@intlayer/docs 9.1.3 → 9.3.0

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 (482) hide show
  1. package/blog/ar/index.md +1 -1
  2. package/blog/ar/rag_powered_documentation_assistant.md +7 -0
  3. package/blog/de/index.md +1 -1
  4. package/blog/de/rag_powered_documentation_assistant.md +6 -0
  5. package/blog/en/index.md +1 -1
  6. package/blog/en-GB/index.md +1 -1
  7. package/blog/en-GB/rag_powered_documentation_assistant.md +6 -0
  8. package/blog/es/index.md +1 -1
  9. package/blog/es/rag_powered_documentation_assistant.md +7 -0
  10. package/blog/fr/i18n_meaning.md +7 -1
  11. package/blog/fr/index.md +1 -1
  12. package/blog/fr/list_i18n_technologies/frameworks/angular.md +5 -1
  13. package/blog/fr/rag_powered_documentation_assistant.md +6 -0
  14. package/blog/hi/index.md +1 -1
  15. package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +119 -42
  16. package/blog/hi/rag_powered_documentation_assistant.md +7 -0
  17. package/blog/id/index.md +1 -1
  18. package/blog/id/rag_powered_documentation_assistant.md +6 -0
  19. package/blog/it/index.md +1 -1
  20. package/blog/it/rag_powered_documentation_assistant.md +6 -0
  21. package/blog/ja/index.md +1 -1
  22. package/blog/ja/rag_powered_documentation_assistant.md +7 -0
  23. package/blog/ko/index.md +1 -1
  24. package/blog/ko/list_i18n_technologies/frameworks/react.md +7 -7
  25. package/blog/ko/rag_powered_documentation_assistant.md +6 -0
  26. package/blog/pl/index.md +1 -1
  27. package/blog/pl/rag_powered_documentation_assistant.md +6 -0
  28. package/blog/pt/index.md +1 -1
  29. package/blog/pt/rag_powered_documentation_assistant.md +6 -0
  30. package/blog/ru/index.md +1 -1
  31. package/blog/ru/rag_powered_documentation_assistant.md +7 -0
  32. package/blog/tr/intlayer_with_react-intl.md +3 -1
  33. package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +175 -42
  34. package/blog/tr/rag_powered_documentation_assistant.md +6 -0
  35. package/blog/uk/index.md +1 -1
  36. package/blog/uk/rag_powered_documentation_assistant.md +6 -0
  37. package/blog/vi/index.md +1 -1
  38. package/blog/vi/rag_powered_documentation_assistant.md +6 -0
  39. package/blog/zh/index.md +1 -1
  40. package/blog/zh/intlayer_with_i18next.md +87 -28
  41. package/blog/zh/intlayer_with_next-i18next.md +86 -29
  42. package/blog/zh/intlayer_with_next-intl.md +88 -28
  43. package/blog/zh/intlayer_with_react-i18next.md +87 -28
  44. package/blog/zh/intlayer_with_react-intl.md +88 -27
  45. package/blog/zh/intlayer_with_vue-i18n.md +117 -8
  46. package/blog/zh/rag_powered_documentation_assistant.md +6 -0
  47. package/dist/cjs/common.cjs +24 -1
  48. package/dist/cjs/common.cjs.map +1 -1
  49. package/dist/cjs/generated/blog.entry.cjs +58 -31
  50. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  51. package/dist/cjs/generated/docs.entry.cjs +265 -218
  52. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  53. package/dist/cjs/generated/frequentQuestions.entry.cjs +48 -21
  54. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  55. package/dist/cjs/generated/legal.entry.cjs +33 -6
  56. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  57. package/dist/esm/common.mjs +24 -1
  58. package/dist/esm/common.mjs.map +1 -1
  59. package/dist/esm/generated/blog.entry.mjs +58 -31
  60. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  61. package/dist/esm/generated/docs.entry.mjs +265 -218
  62. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  63. package/dist/esm/generated/frequentQuestions.entry.mjs +48 -21
  64. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  65. package/dist/esm/generated/legal.entry.mjs +33 -6
  66. package/dist/esm/generated/legal.entry.mjs.map +1 -1
  67. package/dist/types/common.d.ts.map +1 -1
  68. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  69. package/dist/types/generated/docs.entry.d.ts +1 -0
  70. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  71. package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
  72. package/dist/types/generated/legal.entry.d.ts.map +1 -1
  73. package/docs/ar/analytics.md +222 -0
  74. package/docs/ar/autoFill.md +28 -9
  75. package/docs/ar/bundle_optimization.md +58 -25
  76. package/docs/ar/configuration.md +25 -8
  77. package/docs/ar/dictionary/file.md +3 -1
  78. package/docs/ar/dictionary/nesting.md +47 -30
  79. package/docs/ar/formatters.md +148 -193
  80. package/docs/ar/intlayer_CMS.md +152 -0
  81. package/docs/ar/intlayer_with_angular_21.md +9 -9
  82. package/docs/ar/intlayer_with_nextjs_14.md +1 -28
  83. package/docs/ar/intlayer_with_nextjs_15.md +1 -33
  84. package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +40 -83
  85. package/docs/ar/intlayer_with_solid_start.md +1078 -0
  86. package/docs/ar/intlayer_with_vite+vue.md +1 -3
  87. package/docs/ar/live-sync.md +4 -0
  88. package/docs/ar/packages/intlayer/getLocalizedUrl.md +26 -24
  89. package/docs/ar/packages/intlayer/getMultilingualUrls.md +4 -18
  90. package/docs/ar/packages/react-intlayer/useDictionary.md +4 -21
  91. package/docs/ar/packages/react-intlayer/useIntlayer.md +2 -2
  92. package/docs/ar/packages/vite-intlayer/exports.md +15 -0
  93. package/docs/ar/packages/vite-intlayer/intlayer.md +121 -6
  94. package/docs/ar/packages/vite-intlayer/intlayerPrune.md +70 -3
  95. package/docs/ar/releases/v9.md +0 -37
  96. package/docs/ar/self_hosting.md +46 -49
  97. package/docs/bn/bundle_optimization.md +58 -25
  98. package/docs/bn/configuration.md +25 -8
  99. package/docs/bn/intlayer_with_angular_21.md +9 -9
  100. package/docs/cs/bundle_optimization.md +58 -25
  101. package/docs/cs/configuration.md +25 -8
  102. package/docs/cs/intlayer_with_angular_21.md +9 -9
  103. package/docs/de/analytics.md +222 -0
  104. package/docs/de/autoFill.md +28 -9
  105. package/docs/de/bundle_optimization.md +58 -25
  106. package/docs/de/configuration.md +25 -8
  107. package/docs/de/dictionary/file.md +3 -1
  108. package/docs/de/dictionary/nesting.md +47 -31
  109. package/docs/de/formatters.md +208 -334
  110. package/docs/de/intlayer_CMS.md +66 -15
  111. package/docs/de/intlayer_with_angular_21.md +9 -9
  112. package/docs/de/intlayer_with_nestjs.md +11 -7
  113. package/docs/de/intlayer_with_nextjs_14.md +1 -28
  114. package/docs/de/intlayer_with_nextjs_15.md +1 -33
  115. package/docs/de/intlayer_with_solid_start.md +1078 -0
  116. package/docs/de/intlayer_with_vite+vue.md +1 -3
  117. package/docs/de/live-sync.md +4 -0
  118. package/docs/de/packages/intlayer/getLocalizedUrl.md +33 -25
  119. package/docs/de/packages/intlayer/getMultilingualUrls.md +4 -18
  120. package/docs/de/packages/react-intlayer/useDictionary.md +2 -5
  121. package/docs/de/packages/vite-intlayer/exports.md +15 -0
  122. package/docs/de/packages/vite-intlayer/intlayer.md +121 -6
  123. package/docs/de/packages/vite-intlayer/intlayerPrune.md +77 -4
  124. package/docs/de/releases/v9.md +0 -15
  125. package/docs/de/self_hosting.md +46 -50
  126. package/docs/en/bundle_optimization.md +51 -23
  127. package/docs/en/cli/doc-review.md +13 -2
  128. package/docs/en/configuration.md +24 -15
  129. package/docs/en/intlayer_with_angular_21.md +9 -9
  130. package/docs/en/intlayer_with_solid_start.md +1091 -0
  131. package/docs/en/intlayer_with_vite+solid.md +12 -0
  132. package/docs/en/live-sync.md +4 -0
  133. package/docs/en-GB/analytics.md +222 -0
  134. package/docs/en-GB/autoFill.md +26 -7
  135. package/docs/en-GB/bundle_optimization.md +58 -25
  136. package/docs/en-GB/configuration.md +25 -8
  137. package/docs/en-GB/dictionary/file.md +2 -0
  138. package/docs/en-GB/dictionary/nesting.md +64 -205
  139. package/docs/en-GB/formatters.md +146 -181
  140. package/docs/en-GB/intlayer_CMS.md +152 -0
  141. package/docs/en-GB/intlayer_with_angular_21.md +9 -9
  142. package/docs/en-GB/intlayer_with_nestjs.md +6 -2
  143. package/docs/en-GB/intlayer_with_nextjs_14.md +0 -27
  144. package/docs/en-GB/intlayer_with_nextjs_15.md +1 -33
  145. package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +40 -82
  146. package/docs/en-GB/intlayer_with_solid_start.md +1078 -0
  147. package/docs/en-GB/intlayer_with_vite+vue.md +1 -3
  148. package/docs/en-GB/live-sync.md +4 -0
  149. package/docs/en-GB/packages/intlayer/getLocalizedUrl.md +30 -22
  150. package/docs/en-GB/packages/intlayer/getMultilingualUrls.md +16 -48
  151. package/docs/en-GB/packages/vite-intlayer/exports.md +15 -0
  152. package/docs/en-GB/packages/vite-intlayer/intlayer.md +121 -6
  153. package/docs/en-GB/packages/vite-intlayer/intlayerPrune.md +77 -4
  154. package/docs/en-GB/self_hosting.md +60 -49
  155. package/docs/es/analytics.md +222 -0
  156. package/docs/es/autoFill.md +28 -9
  157. package/docs/es/bundle_optimization.md +58 -25
  158. package/docs/es/configuration.md +24 -7
  159. package/docs/es/dictionary/file.md +3 -1
  160. package/docs/es/dictionary/nesting.md +47 -30
  161. package/docs/es/formatters.md +114 -168
  162. package/docs/es/intlayer_CMS.md +35 -10
  163. package/docs/es/intlayer_with_angular_21.md +9 -9
  164. package/docs/es/intlayer_with_nextjs_14.md +1 -28
  165. package/docs/es/intlayer_with_nextjs_15.md +1 -33
  166. package/docs/es/intlayer_with_solid_start.md +1078 -0
  167. package/docs/es/live-sync.md +4 -0
  168. package/docs/es/packages/intlayer/getLocalizedUrl.md +31 -23
  169. package/docs/es/packages/intlayer/getMultilingualUrls.md +4 -18
  170. package/docs/es/packages/vite-intlayer/exports.md +15 -0
  171. package/docs/es/packages/vite-intlayer/intlayer.md +121 -6
  172. package/docs/es/packages/vite-intlayer/intlayerPrune.md +69 -2
  173. package/docs/es/releases/v9.md +0 -15
  174. package/docs/es/self_hosting.md +46 -49
  175. package/docs/fr/analytics.md +222 -0
  176. package/docs/fr/autoFill.md +27 -8
  177. package/docs/fr/bundle_optimization.md +58 -25
  178. package/docs/fr/configuration.md +25 -8
  179. package/docs/fr/dictionary/file.md +2 -0
  180. package/docs/fr/dictionary/nesting.md +37 -184
  181. package/docs/fr/formatters.md +95 -236
  182. package/docs/fr/intlayer_CMS.md +66 -15
  183. package/docs/fr/intlayer_with_angular_21.md +9 -9
  184. package/docs/fr/intlayer_with_nextjs_14.md +1 -28
  185. package/docs/fr/intlayer_with_nextjs_15.md +1 -33
  186. package/docs/fr/intlayer_with_solid_start.md +1078 -0
  187. package/docs/fr/live-sync.md +4 -0
  188. package/docs/fr/packages/intlayer/getLocalizedUrl.md +37 -27
  189. package/docs/fr/packages/intlayer/getMultilingualUrls.md +18 -20
  190. package/docs/fr/packages/vite-intlayer/exports.md +15 -0
  191. package/docs/fr/packages/vite-intlayer/intlayer.md +121 -6
  192. package/docs/fr/packages/vite-intlayer/intlayerPrune.md +77 -4
  193. package/docs/fr/releases/v9.md +0 -15
  194. package/docs/fr/self_hosting.md +46 -49
  195. package/docs/hi/analytics.md +222 -0
  196. package/docs/hi/autoFill.md +28 -9
  197. package/docs/hi/bundle_optimization.md +58 -25
  198. package/docs/hi/configuration.md +25 -8
  199. package/docs/hi/dictionary/file.md +3 -1
  200. package/docs/hi/dictionary/nesting.md +47 -30
  201. package/docs/hi/formatters.md +233 -334
  202. package/docs/hi/how_works_intlayer.md +3 -1
  203. package/docs/hi/intlayer_CMS.md +152 -0
  204. package/docs/hi/intlayer_with_angular_21.md +9 -9
  205. package/docs/hi/intlayer_with_nestjs.md +11 -7
  206. package/docs/hi/intlayer_with_nextjs_14.md +1 -28
  207. package/docs/hi/intlayer_with_nextjs_15.md +1 -33
  208. package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +40 -83
  209. package/docs/hi/intlayer_with_solid_start.md +1077 -0
  210. package/docs/hi/intlayer_with_vite+preact.md +56 -49
  211. package/docs/hi/intlayer_with_vite+react.md +48 -41
  212. package/docs/hi/intlayer_with_vite+solid.md +32 -41
  213. package/docs/hi/intlayer_with_vite+vue.md +49 -44
  214. package/docs/hi/live-sync.md +4 -0
  215. package/docs/hi/packages/intlayer/getLocalizedUrl.md +26 -24
  216. package/docs/hi/packages/intlayer/getMultilingualUrls.md +4 -18
  217. package/docs/hi/packages/next-intlayer/t.md +33 -1
  218. package/docs/hi/packages/react-intlayer/useDictionary.md +4 -21
  219. package/docs/hi/packages/vite-intlayer/exports.md +15 -0
  220. package/docs/hi/packages/vite-intlayer/intlayer.md +121 -6
  221. package/docs/hi/packages/vite-intlayer/intlayerPrune.md +78 -5
  222. package/docs/hi/plugins/sync-json.md +9 -9
  223. package/docs/hi/releases/v9.md +0 -15
  224. package/docs/hi/self_hosting.md +38 -51
  225. package/docs/id/analytics.md +223 -0
  226. package/docs/id/bundle_optimization.md +58 -25
  227. package/docs/id/configuration.md +25 -8
  228. package/docs/id/dictionary/nesting.md +37 -184
  229. package/docs/id/formatters.md +208 -305
  230. package/docs/id/intlayer_CMS.md +164 -0
  231. package/docs/id/intlayer_with_angular_21.md +9 -9
  232. package/docs/id/intlayer_with_nextjs_14.md +1 -26
  233. package/docs/id/intlayer_with_react_router_v7_fs_routes.md +70 -63
  234. package/docs/id/intlayer_with_solid_start.md +1078 -0
  235. package/docs/id/live-sync.md +4 -0
  236. package/docs/id/packages/intlayer/getMultilingualUrls.md +4 -18
  237. package/docs/id/packages/react-intlayer/useIntlayer.md +2 -2
  238. package/docs/id/packages/vite-intlayer/exports.md +15 -0
  239. package/docs/id/packages/vite-intlayer/intlayer.md +121 -6
  240. package/docs/id/packages/vite-intlayer/intlayerPrune.md +78 -5
  241. package/docs/id/releases/v9.md +12 -0
  242. package/docs/id/self_hosting.md +61 -50
  243. package/docs/it/analytics.md +222 -0
  244. package/docs/it/autoFill.md +27 -8
  245. package/docs/it/bundle_optimization.md +58 -25
  246. package/docs/it/configuration.md +25 -8
  247. package/docs/it/dictionary/file.md +3 -1
  248. package/docs/it/dictionary/nesting.md +47 -30
  249. package/docs/it/formatters.md +114 -168
  250. package/docs/it/intlayer_CMS.md +66 -15
  251. package/docs/it/intlayer_with_angular_21.md +9 -9
  252. package/docs/it/intlayer_with_nestjs.md +11 -7
  253. package/docs/it/intlayer_with_nextjs_14.md +1 -28
  254. package/docs/it/intlayer_with_nextjs_15.md +1 -33
  255. package/docs/it/intlayer_with_solid_start.md +1078 -0
  256. package/docs/it/intlayer_with_vite+vue.md +1 -3
  257. package/docs/it/live-sync.md +4 -0
  258. package/docs/it/packages/intlayer/getLocalizedUrl.md +34 -26
  259. package/docs/it/packages/intlayer/getMultilingualUrls.md +4 -18
  260. package/docs/it/packages/react-intlayer/useDictionary.md +4 -21
  261. package/docs/it/packages/vite-intlayer/exports.md +15 -0
  262. package/docs/it/packages/vite-intlayer/intlayer.md +121 -6
  263. package/docs/it/packages/vite-intlayer/intlayerPrune.md +77 -4
  264. package/docs/it/releases/v9.md +0 -15
  265. package/docs/it/self_hosting.md +60 -49
  266. package/docs/ja/analytics.md +222 -0
  267. package/docs/ja/autoFill.md +28 -9
  268. package/docs/ja/bundle_optimization.md +58 -25
  269. package/docs/ja/configuration.md +25 -8
  270. package/docs/ja/dictionary/content_file.md +15 -7
  271. package/docs/ja/dictionary/file.md +3 -1
  272. package/docs/ja/dictionary/nesting.md +47 -30
  273. package/docs/ja/formatters.md +133 -187
  274. package/docs/ja/intlayer_visual_editor.md +3 -1
  275. package/docs/ja/intlayer_with_angular_21.md +6 -6
  276. package/docs/ja/intlayer_with_nestjs.md +2 -12
  277. package/docs/ja/intlayer_with_nextjs_14.md +1 -28
  278. package/docs/ja/intlayer_with_nextjs_15.md +1 -33
  279. package/docs/ja/intlayer_with_react_router_v7.md +456 -20
  280. package/docs/ja/intlayer_with_solid_start.md +1078 -0
  281. package/docs/ja/intlayer_with_vite+preact.md +73 -41
  282. package/docs/ja/intlayer_with_vite+vue.md +1 -3
  283. package/docs/ja/live-sync.md +4 -0
  284. package/docs/ja/mcp_server.md +3 -9
  285. package/docs/ja/packages/intlayer/getLocalizedUrl.md +26 -24
  286. package/docs/ja/packages/intlayer/getMultilingualUrls.md +3 -17
  287. package/docs/ja/packages/vite-intlayer/exports.md +15 -0
  288. package/docs/ja/packages/vite-intlayer/intlayer.md +121 -6
  289. package/docs/ja/packages/vite-intlayer/intlayerPrune.md +79 -6
  290. package/docs/ja/releases/v9.md +12 -0
  291. package/docs/ja/self_hosting.md +46 -50
  292. package/docs/ko/analytics.md +222 -0
  293. package/docs/ko/autoFill.md +28 -9
  294. package/docs/ko/bundle_optimization.md +58 -25
  295. package/docs/ko/configuration.md +25 -8
  296. package/docs/ko/dictionary/file.md +3 -1
  297. package/docs/ko/dictionary/nesting.md +47 -30
  298. package/docs/ko/formatters.md +133 -187
  299. package/docs/ko/intlayer_with_angular_21.md +9 -9
  300. package/docs/ko/intlayer_with_lynx+react.md +133 -39
  301. package/docs/ko/intlayer_with_nextjs_14.md +1 -28
  302. package/docs/ko/intlayer_with_nextjs_15.md +1 -33
  303. package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +40 -188
  304. package/docs/ko/intlayer_with_solid_start.md +1078 -0
  305. package/docs/ko/intlayer_with_vite+preact.md +57 -23
  306. package/docs/ko/intlayer_with_vite+vue.md +1 -3
  307. package/docs/ko/live-sync.md +4 -0
  308. package/docs/ko/packages/intlayer/getLocalizedUrl.md +26 -24
  309. package/docs/ko/packages/intlayer/getMultilingualUrls.md +4 -18
  310. package/docs/ko/packages/vite-intlayer/exports.md +15 -0
  311. package/docs/ko/packages/vite-intlayer/intlayer.md +121 -6
  312. package/docs/ko/packages/vite-intlayer/intlayerPrune.md +79 -6
  313. package/docs/ko/releases/v9.md +12 -0
  314. package/docs/ko/self_hosting.md +60 -49
  315. package/docs/nl/bundle_optimization.md +58 -25
  316. package/docs/nl/configuration.md +25 -8
  317. package/docs/nl/intlayer_with_angular_21.md +9 -9
  318. package/docs/pl/analytics.md +220 -0
  319. package/docs/pl/bundle_optimization.md +58 -25
  320. package/docs/pl/configuration.md +25 -8
  321. package/docs/pl/dictionary/nesting.md +47 -30
  322. package/docs/pl/formatters.md +208 -305
  323. package/docs/pl/intlayer_CMS.md +152 -0
  324. package/docs/pl/intlayer_with_angular_21.md +9 -9
  325. package/docs/pl/intlayer_with_nextjs_14.md +1 -26
  326. package/docs/pl/intlayer_with_solid_start.md +1078 -0
  327. package/docs/pl/live-sync.md +4 -0
  328. package/docs/pl/packages/intlayer/getMultilingualUrls.md +4 -18
  329. package/docs/pl/packages/react-intlayer/useDictionary.md +2 -19
  330. package/docs/pl/packages/vite-intlayer/exports.md +15 -0
  331. package/docs/pl/packages/vite-intlayer/intlayer.md +121 -6
  332. package/docs/pl/packages/vite-intlayer/intlayerPrune.md +77 -4
  333. package/docs/pl/releases/v9.md +0 -15
  334. package/docs/pl/self_hosting.md +60 -49
  335. package/docs/pt/analytics.md +222 -0
  336. package/docs/pt/bundle_optimization.md +58 -24
  337. package/docs/pt/configuration.md +25 -8
  338. package/docs/pt/dictionary/file.md +3 -1
  339. package/docs/pt/dictionary/nesting.md +47 -30
  340. package/docs/pt/formatters.md +112 -168
  341. package/docs/pt/intlayer_CMS.md +66 -15
  342. package/docs/pt/intlayer_with_angular_21.md +9 -9
  343. package/docs/pt/intlayer_with_astro_lit.md +26 -1
  344. package/docs/pt/intlayer_with_nextjs_14.md +1 -28
  345. package/docs/pt/intlayer_with_nextjs_15.md +1 -33
  346. package/docs/pt/intlayer_with_solid_start.md +1078 -0
  347. package/docs/pt/intlayer_with_vite+vue.md +1 -3
  348. package/docs/pt/live-sync.md +4 -0
  349. package/docs/pt/packages/intlayer/getLocalizedUrl.md +34 -26
  350. package/docs/pt/packages/intlayer/getMultilingualUrls.md +4 -18
  351. package/docs/pt/packages/vite-intlayer/exports.md +15 -0
  352. package/docs/pt/packages/vite-intlayer/intlayer.md +121 -6
  353. package/docs/pt/packages/vite-intlayer/intlayerPrune.md +78 -6
  354. package/docs/pt/releases/v9.md +0 -15
  355. package/docs/pt/self_hosting.md +60 -49
  356. package/docs/ru/analytics.md +222 -0
  357. package/docs/ru/autoFill.md +27 -8
  358. package/docs/ru/bundle_optimization.md +58 -25
  359. package/docs/ru/configuration.md +25 -8
  360. package/docs/ru/dictionary/file.md +3 -1
  361. package/docs/ru/dictionary/nesting.md +64 -205
  362. package/docs/ru/formatters.md +108 -128
  363. package/docs/ru/intlayer_with_angular_21.md +9 -9
  364. package/docs/ru/intlayer_with_nextjs_14.md +1 -28
  365. package/docs/ru/intlayer_with_nextjs_15.md +1 -33
  366. package/docs/ru/intlayer_with_solid_start.md +1078 -0
  367. package/docs/ru/intlayer_with_vite+vue.md +1 -3
  368. package/docs/ru/live-sync.md +4 -0
  369. package/docs/ru/packages/intlayer/getLocalizedUrl.md +34 -26
  370. package/docs/ru/packages/intlayer/getMultilingualUrls.md +4 -18
  371. package/docs/ru/packages/react-intlayer/useDictionary.md +4 -21
  372. package/docs/ru/packages/vite-intlayer/exports.md +15 -0
  373. package/docs/ru/packages/vite-intlayer/intlayer.md +121 -6
  374. package/docs/ru/packages/vite-intlayer/intlayerPrune.md +77 -4
  375. package/docs/ru/releases/v9.md +0 -15
  376. package/docs/ru/self_hosting.md +60 -49
  377. package/docs/tr/analytics.md +222 -0
  378. package/docs/tr/autoFill.md +28 -9
  379. package/docs/tr/bundle_optimization.md +58 -25
  380. package/docs/tr/configuration.md +25 -8
  381. package/docs/tr/dictionary/file.md +2 -0
  382. package/docs/tr/dictionary/nesting.md +47 -30
  383. package/docs/tr/formatters.md +144 -190
  384. package/docs/tr/intlayer_CMS.md +152 -0
  385. package/docs/tr/intlayer_with_angular_21.md +9 -9
  386. package/docs/tr/intlayer_with_nestjs.md +2 -12
  387. package/docs/tr/intlayer_with_nextjs_15.md +1 -33
  388. package/docs/tr/intlayer_with_solid_start.md +1078 -0
  389. package/docs/tr/intlayer_with_vite+vue.md +1 -3
  390. package/docs/tr/live-sync.md +4 -0
  391. package/docs/tr/packages/intlayer/getMultilingualUrls.md +4 -18
  392. package/docs/tr/packages/vite-intlayer/exports.md +15 -0
  393. package/docs/tr/packages/vite-intlayer/intlayer.md +121 -6
  394. package/docs/tr/packages/vite-intlayer/intlayerPrune.md +77 -4
  395. package/docs/tr/self_hosting.md +47 -50
  396. package/docs/uk/analytics.md +222 -0
  397. package/docs/uk/bundle_optimization.md +58 -25
  398. package/docs/uk/configuration.md +25 -8
  399. package/docs/uk/dictionary/nesting.md +47 -30
  400. package/docs/uk/formatters.md +128 -185
  401. package/docs/uk/intlayer_CMS.md +152 -0
  402. package/docs/uk/intlayer_with_angular_21.md +9 -9
  403. package/docs/uk/intlayer_with_nextjs_14.md +1 -26
  404. package/docs/uk/intlayer_with_solid_start.md +1078 -0
  405. package/docs/uk/live-sync.md +4 -0
  406. package/docs/uk/packages/react-intlayer/useDictionary.md +2 -19
  407. package/docs/uk/packages/vite-intlayer/exports.md +15 -0
  408. package/docs/uk/packages/vite-intlayer/intlayer.md +121 -6
  409. package/docs/uk/packages/vite-intlayer/intlayerPrune.md +77 -4
  410. package/docs/uk/releases/v9.md +0 -15
  411. package/docs/uk/self_hosting.md +60 -50
  412. package/docs/ur/bundle_optimization.md +58 -25
  413. package/docs/ur/configuration.md +25 -8
  414. package/docs/ur/intlayer_with_angular_21.md +9 -9
  415. package/docs/vi/analytics.md +222 -0
  416. package/docs/vi/bundle_optimization.md +58 -25
  417. package/docs/vi/configuration.md +24 -8
  418. package/docs/vi/dictionary/nesting.md +37 -184
  419. package/docs/vi/formatters.md +208 -309
  420. package/docs/vi/intlayer_CMS.md +164 -0
  421. package/docs/vi/intlayer_with_angular_21.md +9 -9
  422. package/docs/vi/intlayer_with_nextjs_14.md +0 -25
  423. package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +70 -63
  424. package/docs/vi/intlayer_with_solid_start.md +1078 -0
  425. package/docs/vi/live-sync.md +4 -0
  426. package/docs/vi/packages/intlayer/getMultilingualUrls.md +4 -18
  427. package/docs/vi/packages/react-intlayer/useIntlayer.md +2 -2
  428. package/docs/vi/packages/vite-intlayer/exports.md +15 -0
  429. package/docs/vi/packages/vite-intlayer/intlayer.md +121 -6
  430. package/docs/vi/packages/vite-intlayer/intlayerPrune.md +77 -4
  431. package/docs/vi/plugins/sync-json.md +6 -6
  432. package/docs/vi/releases/v9.md +12 -0
  433. package/docs/vi/self_hosting.md +61 -50
  434. package/docs/zh/CI_CD.md +4 -0
  435. package/docs/zh/analytics.md +222 -0
  436. package/docs/zh/autoFill.md +28 -9
  437. package/docs/zh/bundle_optimization.md +58 -25
  438. package/docs/zh/configuration.md +24 -8
  439. package/docs/zh/dictionary/file.md +2 -0
  440. package/docs/zh/dictionary/nesting.md +47 -30
  441. package/docs/zh/formatters.md +140 -188
  442. package/docs/zh/intlayer_CMS.md +164 -0
  443. package/docs/zh/intlayer_with_analog.md +193 -3
  444. package/docs/zh/intlayer_with_angular_19.md +272 -3
  445. package/docs/zh/intlayer_with_angular_21.md +7 -7
  446. package/docs/zh/intlayer_with_create_react_app.md +348 -26
  447. package/docs/zh/intlayer_with_lynx+react.md +263 -4
  448. package/docs/zh/intlayer_with_nextjs_14.md +1 -28
  449. package/docs/zh/intlayer_with_nextjs_15.md +1 -33
  450. package/docs/zh/intlayer_with_nextjs_no_locale_path.md +558 -1
  451. package/docs/zh/intlayer_with_nuxt.md +182 -7
  452. package/docs/zh/intlayer_with_react_router_v7.md +183 -25
  453. package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +306 -42
  454. package/docs/zh/intlayer_with_solid_start.md +1077 -0
  455. package/docs/zh/intlayer_with_storybook.md +260 -3
  456. package/docs/zh/intlayer_with_svelte_kit.md +428 -48
  457. package/docs/zh/intlayer_with_tanstack+solid.md +713 -13
  458. package/docs/zh/intlayer_with_tanstack.md +731 -20
  459. package/docs/zh/intlayer_with_vanilla.md +314 -4
  460. package/docs/zh/intlayer_with_vite+lit.md +465 -4
  461. package/docs/zh/intlayer_with_vite+preact.md +422 -116
  462. package/docs/zh/intlayer_with_vite+react.md +324 -45
  463. package/docs/zh/intlayer_with_vite+react_compiler.md +228 -13
  464. package/docs/zh/intlayer_with_vite+solid.md +462 -32
  465. package/docs/zh/intlayer_with_vite+vanilla.md +497 -4
  466. package/docs/zh/live-sync.md +4 -0
  467. package/docs/zh/mcp_server.md +3 -9
  468. package/docs/zh/packages/intlayer/getLocalizedUrl.md +26 -24
  469. package/docs/zh/packages/intlayer/getMultilingualUrls.md +4 -18
  470. package/docs/zh/packages/vite-intlayer/exports.md +29 -0
  471. package/docs/zh/packages/vite-intlayer/intlayer.md +121 -6
  472. package/docs/zh/packages/vite-intlayer/intlayerPrune.md +79 -6
  473. package/docs/zh/releases/v9.md +12 -0
  474. package/docs/zh/self_hosting.md +60 -50
  475. package/docs/zh-TW/bundle_optimization.md +58 -25
  476. package/docs/zh-TW/intlayer_with_angular_21.md +7 -7
  477. package/package.json +7 -7
  478. package/src/common.ts +39 -2
  479. package/src/generated/blog.entry.ts +66 -34
  480. package/src/generated/docs.entry.ts +273 -221
  481. package/src/generated/frequentQuestions.entry.ts +56 -24
  482. package/src/generated/legal.entry.ts +41 -9
@@ -1 +1 @@
1
- {"version":3,"file":"common.mjs","names":[],"sources":["../../src/common.ts"],"sourcesContent":["import { join } from 'node:path';\nimport { getLocalizedUrl } from '@intlayer/core/localization';\nimport { getMarkdownMetadata } from '@intlayer/core/transpiler';\nimport * as Locales from '@intlayer/types/locales';\nimport type { LocalesValues } from '@intlayer/types/module_augmentation';\n\nexport const defaultLocale = Locales.ENGLISH;\n\nexport const GITHUB_URL_PREFIX =\n 'https://github.com/aymericzip/intlayer/blob/main/docs';\nexport const URL_PREFIX = 'https://intlayer.org/';\n\nexport const getKeys = <T extends Record<string, any>>(obj: T): (keyof T)[] =>\n Object.keys(obj) as (keyof T)[];\n\nexport const getFiles = async <\n F extends Record<`./${string}`, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n lang: LocalesValues = defaultLocale as LocalesValues\n): Promise<Record<string, string>> => {\n const filesEntries = await Promise.all(\n Object.entries(files)\n .map(([key, value]) => [key, value[lang as LocalesValues]])\n .map(async ([key, value]) => [key, await value])\n );\n const filesResult = Object.fromEntries(filesEntries);\n return filesResult;\n};\n\nexport const getFile = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n docKey: keyof F,\n locale: LocalesValues = defaultLocale as LocalesValues\n): Promise<string> => {\n const fileRecord = files[docKey];\n\n if (!fileRecord) {\n throw new Error(`File ${docKey as string} not found`);\n }\n\n const file = await files[docKey]?.[locale];\n\n if (!file) {\n const englishFile = await files[docKey]?.[defaultLocale as LocalesValues];\n\n if (!englishFile) {\n throw new Error(`File ${docKey as string} not found`);\n }\n\n return englishFile;\n }\n\n return file;\n};\n\nexport type FileMetadata = {\n docKey: string;\n url: string;\n relativeUrl: string;\n githubUrl: string;\n title: string;\n slugs: string[];\n description: string;\n keywords: string[];\n updatedAt: string;\n createdAt: string;\n author?: string;\n youtubeVideo?: string;\n applicationTemplate?: string;\n applicationShowcase?: string;\n history?: {\n version: string;\n date: string;\n changes: string;\n }[];\n};\n\nexport const formatMetadata = (\n docKey: string,\n file: string,\n locale: LocalesValues = defaultLocale as LocalesValues\n): FileMetadata => {\n const metadata = getMarkdownMetadata(file);\n\n const slugs = (metadata.slugs ?? []).map(String);\n const keywords = (metadata.keywords ?? []).map(String);\n\n const relativeUrl = join('/', ...slugs);\n\n const slicedDocKey = docKey.slice(1);\n\n // Normalise author: accept both a plain string handle (new format)\n // and a legacy object `{ github: '...' }` — always reduce to a plain string.\n const rawAuthor = metadata.author as\n | string\n | { name?: string; github?: string }\n | undefined;\n const author: string | undefined =\n typeof rawAuthor === 'string'\n ? rawAuthor || undefined\n : rawAuthor?.github || undefined;\n\n return {\n ...metadata,\n docKey,\n slugs,\n keywords,\n author,\n githubUrl: `${GITHUB_URL_PREFIX}${slicedDocKey}`.replace(\n '/en/',\n `/${locale}/`\n ),\n relativeUrl: getLocalizedUrl(relativeUrl, locale),\n url: getLocalizedUrl(join(URL_PREFIX, relativeUrl), locale),\n } as FileMetadata;\n};\n\nexport const getFileMetadata = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n R extends FileMetadata,\n>(\n files: F,\n docKey: keyof F,\n locale: LocalesValues = defaultLocale as LocalesValues\n): Promise<R> => {\n const file = await getFile(files, docKey, locale);\n\n return formatMetadata(docKey as string, file, locale) as R;\n};\n\nexport const getFileMetadataRecord = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n locale: LocalesValues = defaultLocale as LocalesValues\n): Promise<Record<keyof F, FileMetadata>> => {\n const results = await Promise.allSettled(\n Object.entries(files).map(async ([key]) => {\n const metadata = await getFileMetadata(files, key as keyof F, locale);\n return [key, metadata] as [string, FileMetadata];\n })\n );\n const filesEntries = results\n .filter(\n (r): r is PromiseFulfilledResult<[string, FileMetadata]> =>\n r.status === 'fulfilled'\n )\n .map((r) => r.value);\n const filesResult = Object.fromEntries(filesEntries);\n return filesResult as Record<keyof F, FileMetadata>;\n};\n\nexport const getFileMetadataBySlug = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n slugs: string | string[],\n locale: LocalesValues = defaultLocale as LocalesValues,\n strict = false\n) => {\n const slugsArray = Array.isArray(slugs) ? slugs : [slugs];\n const filesMetadata = await getFileMetadataRecord(\n files,\n defaultLocale as LocalesValues\n );\n\n let fileMetadataArray: FileMetadata[] = Object.values(filesMetadata).filter(\n (fileMetadata) =>\n slugsArray.every((slug) => fileMetadata.slugs?.includes(slug))\n );\n\n if (strict) {\n fileMetadataArray = fileMetadataArray.filter(\n (fileMetadata) => fileMetadata.slugs.length === slugsArray.length\n );\n }\n\n if (locale !== defaultLocale) {\n const localizedFileMetadata = await Promise.all(\n fileMetadataArray.map(\n async (fileMetadata) =>\n await getFileMetadata(files, fileMetadata.docKey, locale)\n )\n );\n\n return localizedFileMetadata;\n }\n\n return fileMetadataArray;\n};\n\nexport const getFileBySlug = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n slugs: string | string[],\n locale: LocalesValues = defaultLocale as LocalesValues,\n strict = false\n) => {\n const slugsArray = Array.isArray(slugs) ? slugs : [slugs];\n const filesMetadata = await getFileMetadataRecord(\n files,\n defaultLocale as LocalesValues\n );\n\n let fileMetadataArray = Object.values(filesMetadata).filter((fileMetadata) =>\n slugsArray.every((slug) => fileMetadata.slugs?.includes(slug))\n );\n\n if (strict) {\n fileMetadataArray = fileMetadataArray.filter(\n (fileMetadata) => fileMetadata.slugs.length === slugsArray.length\n );\n }\n\n const fileList = await Promise.all(\n fileMetadataArray.map(async (fileMetadata) => {\n const file = await getFile(files, fileMetadata.docKey, locale);\n return file;\n })\n );\n\n return fileList;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"common.mjs","names":[],"sources":["../../src/common.ts"],"sourcesContent":["import { join } from 'node:path';\nimport { getLocalizedUrl } from '@intlayer/core/localization';\nimport { getMarkdownMetadata } from '@intlayer/core/transpiler';\nimport * as Locales from '@intlayer/types/locales';\nimport type { LocalesValues } from '@intlayer/types/module_augmentation';\n\nexport const defaultLocale = Locales.ENGLISH;\n\nexport const GITHUB_URL_PREFIX =\n 'https://github.com/aymericzip/intlayer/blob/main/docs';\nexport const URL_PREFIX = 'https://intlayer.org/';\n\nexport const getKeys = <T extends Record<string, any>>(obj: T): (keyof T)[] =>\n Object.keys(obj) as (keyof T)[];\n\nexport const getFiles = async <\n F extends Record<`./${string}`, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n lang: LocalesValues = defaultLocale as LocalesValues\n): Promise<Record<string, string>> => {\n const filesEntries = await Promise.all(\n Object.entries(files)\n .map(([key, value]) => [key, value[lang as LocalesValues]])\n .map(async ([key, value]) => [key, await value])\n );\n const filesResult = Object.fromEntries(filesEntries);\n return filesResult;\n};\n\nexport const getFile = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n docKey: keyof F,\n locale: LocalesValues = defaultLocale as LocalesValues\n): Promise<string> => {\n const fileRecord = files[docKey];\n\n if (!fileRecord) {\n throw new Error(`File ${docKey as string} not found`);\n }\n\n const file = await files[docKey]?.[locale];\n\n if (!file) {\n const englishFile = await files[docKey]?.[defaultLocale as LocalesValues];\n\n if (!englishFile) {\n throw new Error(`File ${docKey as string} not found`);\n }\n\n return englishFile;\n }\n\n return file;\n};\n\nexport type FileMetadata = {\n docKey: string;\n url: string;\n relativeUrl: string;\n githubUrl: string;\n title: string;\n slugs: string[];\n description: string;\n keywords: string[];\n updatedAt: string;\n createdAt: string;\n author?: string;\n youtubeVideo?: string;\n applicationTemplate?: string;\n applicationShowcase?: string;\n history?: {\n version: string;\n date: string;\n changes: string;\n }[];\n};\n\nexport const formatMetadata = (\n docKey: string,\n file: string,\n locale: LocalesValues = defaultLocale as LocalesValues\n): FileMetadata => {\n const metadata = getMarkdownMetadata(file);\n\n const slugs = (metadata.slugs ?? []).map(String);\n const keywords = (metadata.keywords ?? []).map(String);\n\n const relativeUrl = join('/', ...slugs);\n\n const slicedDocKey = docKey.slice(1);\n\n // Normalise author: accept both a plain string handle (new format)\n // and a legacy object `{ github: '...' }` — always reduce to a plain string.\n const rawAuthor = metadata.author as\n | string\n | { name?: string; github?: string }\n | undefined;\n const author: string | undefined =\n typeof rawAuthor === 'string'\n ? rawAuthor || undefined\n : rawAuthor?.github || undefined;\n\n return {\n ...metadata,\n docKey,\n slugs,\n keywords,\n author,\n githubUrl: `${GITHUB_URL_PREFIX}${slicedDocKey}`.replace(\n '/en/',\n `/${locale}/`\n ),\n relativeUrl: getLocalizedUrl(relativeUrl, locale),\n url: getLocalizedUrl(join(URL_PREFIX, relativeUrl), locale),\n } as FileMetadata;\n};\n\nexport const getFileMetadata = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n R extends FileMetadata,\n>(\n files: F,\n docKey: keyof F,\n locale: LocalesValues = defaultLocale as LocalesValues\n): Promise<R> => {\n const file = await getFile(files, docKey, locale);\n\n return formatMetadata(docKey as string, file, locale) as R;\n};\n\n/**\n * Per-locale metadata records, keyed by the entry map they were built from.\n *\n * Building a record parses the frontmatter of every document of a category, and\n * callers such as {@link getFileMetadataBySlug} need the whole record just to\n * resolve a single slug — which a static site generator repeats for every page\n * it renders. Documents are read once per process anyway (each entry caches its\n * own read), so the derived metadata is equally safe to keep.\n */\nconst fileMetadataRecordCache = new WeakMap<\n Record<string, unknown>,\n Map<LocalesValues, Promise<Record<string, FileMetadata>>>\n>();\n\nconst buildFileMetadataRecord = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n locale: LocalesValues\n): Promise<Record<keyof F, FileMetadata>> => {\n const results = await Promise.allSettled(\n Object.entries(files).map(async ([key]) => {\n const metadata = await getFileMetadata(files, key as keyof F, locale);\n return [key, metadata] as [string, FileMetadata];\n })\n );\n const filesEntries = results\n .filter(\n (r): r is PromiseFulfilledResult<[string, FileMetadata]> =>\n r.status === 'fulfilled'\n )\n .map((r) => r.value);\n const filesResult = Object.fromEntries(filesEntries);\n return filesResult as Record<keyof F, FileMetadata>;\n};\n\nexport const getFileMetadataRecord = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n locale: LocalesValues = defaultLocale as LocalesValues\n): Promise<Record<keyof F, FileMetadata>> => {\n let localeCache = fileMetadataRecordCache.get(files);\n\n if (!localeCache) {\n localeCache = new Map();\n fileMetadataRecordCache.set(files, localeCache);\n }\n\n let record = localeCache.get(locale);\n\n if (!record) {\n record = buildFileMetadataRecord(files, locale);\n localeCache.set(locale, record);\n }\n\n return (await record) as Record<keyof F, FileMetadata>;\n};\n\nexport const getFileMetadataBySlug = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n slugs: string | string[],\n locale: LocalesValues = defaultLocale as LocalesValues,\n strict = false\n) => {\n const slugsArray = Array.isArray(slugs) ? slugs : [slugs];\n const filesMetadata = await getFileMetadataRecord(\n files,\n defaultLocale as LocalesValues\n );\n\n let fileMetadataArray: FileMetadata[] = Object.values(filesMetadata).filter(\n (fileMetadata) =>\n slugsArray.every((slug) => fileMetadata.slugs?.includes(slug))\n );\n\n if (strict) {\n fileMetadataArray = fileMetadataArray.filter(\n (fileMetadata) => fileMetadata.slugs.length === slugsArray.length\n );\n }\n\n if (locale !== defaultLocale) {\n const localizedFileMetadata = await Promise.all(\n fileMetadataArray.map(\n async (fileMetadata) =>\n await getFileMetadata(files, fileMetadata.docKey, locale)\n )\n );\n\n return localizedFileMetadata;\n }\n\n return fileMetadataArray;\n};\n\nexport const getFileBySlug = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n slugs: string | string[],\n locale: LocalesValues = defaultLocale as LocalesValues,\n strict = false\n) => {\n const slugsArray = Array.isArray(slugs) ? slugs : [slugs];\n const filesMetadata = await getFileMetadataRecord(\n files,\n defaultLocale as LocalesValues\n );\n\n let fileMetadataArray = Object.values(filesMetadata).filter((fileMetadata) =>\n slugsArray.every((slug) => fileMetadata.slugs?.includes(slug))\n );\n\n if (strict) {\n fileMetadataArray = fileMetadataArray.filter(\n (fileMetadata) => fileMetadata.slugs.length === slugsArray.length\n );\n }\n\n const fileList = await Promise.all(\n fileMetadataArray.map(async (fileMetadata) => {\n const file = await getFile(files, fileMetadata.docKey, locale);\n return file;\n })\n );\n\n return fileList;\n};\n"],"mappings":";;;;;;AAMA,MAAa,gBAAgB,QAAQ;AAErC,MAAa,oBACX;AACF,MAAa,aAAa;AAE1B,MAAa,WAA0C,QACrD,OAAO,KAAK,GAAG;AAEjB,MAAa,WAAW,OAGtB,OACA,OAAsB,kBACc;CACpC,MAAM,eAAe,MAAM,QAAQ,IACjC,OAAO,QAAQ,KAAK,CAAC,CAClB,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,MAAM,KAAsB,CAAC,CAAC,CAC1D,IAAI,OAAO,CAAC,KAAK,WAAW,CAAC,KAAK,MAAM,KAAK,CAAC,CACnD;CAEA,OADoB,OAAO,YAAY,YACtB;AACnB;AAEA,MAAa,UAAU,OAGrB,OACA,QACA,SAAwB,kBACJ;CAGpB,IAAI,CAFe,MAAM,SAGvB,MAAM,IAAI,MAAM,QAAQ,OAAiB,WAAW;CAGtD,MAAM,OAAO,MAAM,MAAM,OAAO,GAAG;CAEnC,IAAI,CAAC,MAAM;EACT,MAAM,cAAc,MAAM,MAAM,OAAO,GAAG;EAE1C,IAAI,CAAC,aACH,MAAM,IAAI,MAAM,QAAQ,OAAiB,WAAW;EAGtD,OAAO;CACT;CAEA,OAAO;AACT;AAwBA,MAAa,kBACX,QACA,MACA,SAAwB,kBACP;CACjB,MAAM,WAAW,oBAAoB,IAAI;CAEzC,MAAM,SAAS,SAAS,SAAS,CAAC,EAAC,CAAE,IAAI,MAAM;CAC/C,MAAM,YAAY,SAAS,YAAY,CAAC,EAAC,CAAE,IAAI,MAAM;CAErD,MAAM,cAAc,KAAK,KAAK,GAAG,KAAK;CAEtC,MAAM,eAAe,OAAO,MAAM,CAAC;CAInC,MAAM,YAAY,SAAS;CAI3B,MAAM,SACJ,OAAO,cAAc,WACjB,aAAa,SACb,WAAW,UAAU;CAE3B,OAAO;EACL,GAAG;EACH;EACA;EACA;EACA;EACA,WAAW,GAAG,oBAAoB,eAAe,QAC/C,QACA,IAAI,OAAO,EACb;EACA,aAAa,gBAAgB,aAAa,MAAM;EAChD,KAAK,gBAAgB,KAAK,YAAY,WAAW,GAAG,MAAM;CAC5D;AACF;AAEA,MAAa,kBAAkB,OAI7B,OACA,QACA,SAAwB,kBACT;CACf,MAAM,OAAO,MAAM,QAAQ,OAAO,QAAQ,MAAM;CAEhD,OAAO,eAAe,QAAkB,MAAM,MAAM;AACtD;;;;;;;;;;AAWA,MAAM,0CAA0B,IAAI,QAGlC;AAEF,MAAM,0BAA0B,OAG9B,OACA,WAC2C;CAO3C,MAAM,gBAAe,MANC,QAAQ,WAC5B,OAAO,QAAQ,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,SAAS;EAEzC,OAAO,CAAC,KAAK,MADU,gBAAgB,OAAO,KAAgB,MAAM,CAC/C;CACvB,CAAC,CACH,EAC4B,CACzB,QACE,MACC,EAAE,WAAW,WACjB,CAAC,CACA,KAAK,MAAM,EAAE,KAAK;CAErB,OADoB,OAAO,YAAY,YACtB;AACnB;AAEA,MAAa,wBAAwB,OAGnC,OACA,SAAwB,kBACmB;CAC3C,IAAI,cAAc,wBAAwB,IAAI,KAAK;CAEnD,IAAI,CAAC,aAAa;EAChB,8BAAc,IAAI,IAAI;EACtB,wBAAwB,IAAI,OAAO,WAAW;CAChD;CAEA,IAAI,SAAS,YAAY,IAAI,MAAM;CAEnC,IAAI,CAAC,QAAQ;EACX,SAAS,wBAAwB,OAAO,MAAM;EAC9C,YAAY,IAAI,QAAQ,MAAM;CAChC;CAEA,OAAQ,MAAM;AAChB;AAEA,MAAa,wBAAwB,OAGnC,OACA,OACA,SAAwB,eACxB,SAAS,UACN;CACH,MAAM,aAAa,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;CACxD,MAAM,gBAAgB,MAAM,sBAC1B,OACA,aACF;CAEA,IAAI,oBAAoC,OAAO,OAAO,aAAa,CAAC,CAAC,QAClE,iBACC,WAAW,OAAO,SAAS,aAAa,OAAO,SAAS,IAAI,CAAC,CACjE;CAEA,IAAI,QACF,oBAAoB,kBAAkB,QACnC,iBAAiB,aAAa,MAAM,WAAW,WAAW,MAC7D;CAGF,IAAI,WAAW,eAQb,OAAO,MAP6B,QAAQ,IAC1C,kBAAkB,IAChB,OAAO,iBACL,MAAM,gBAAgB,OAAO,aAAa,QAAQ,MAAM,CAC5D,CACF;CAKF,OAAO;AACT;AAEA,MAAa,gBAAgB,OAG3B,OACA,OACA,SAAwB,eACxB,SAAS,UACN;CACH,MAAM,aAAa,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;CACxD,MAAM,gBAAgB,MAAM,sBAC1B,OACA,aACF;CAEA,IAAI,oBAAoB,OAAO,OAAO,aAAa,CAAC,CAAC,QAAQ,iBAC3D,WAAW,OAAO,SAAS,aAAa,OAAO,SAAS,IAAI,CAAC,CAC/D;CAEA,IAAI,QACF,oBAAoB,kBAAkB,QACnC,iBAAiB,aAAa,MAAM,WAAW,WAAW,MAC7D;CAUF,OAAO,MAPgB,QAAQ,IAC7B,kBAAkB,IAAI,OAAO,iBAAiB;EAE5C,OAAO,MADY,QAAQ,OAAO,aAAa,QAAQ,MAAM;CAE/D,CAAC,CACH;AAGF"}
@@ -16,22 +16,49 @@ try {
16
16
  baseDir = getPackageJsonPath(currentDir).baseDir;
17
17
  }
18
18
  }
19
- const readLocale = (relativeAfterLocale, locale) => {
19
+ /**
20
+ * Reads a document, preferring the requested locale and falling back to English.
21
+ */
22
+ const readLocaleFile = async (relativeAfterLocale, locale) => {
20
23
  const target1 = join(baseDir, `./blog/${locale}/${relativeAfterLocale}`);
21
- if (existsSync(target1)) return readFile(target1, "utf8");
24
+ if (existsSync(target1)) return await readFile(target1, "utf8");
22
25
  const target2 = join(baseDir, `./blog/en/${relativeAfterLocale}`);
23
- if (existsSync(target2)) return readFile(target2, "utf8");
24
- return Promise.reject(/* @__PURE__ */ new Error(`[docs] File not found: ${relativeAfterLocale} - locale: ${locale} - path: ${target1} - path: ${target2}`));
26
+ if (existsSync(target2)) return await readFile(target2, "utf8");
27
+ throw new Error(`[docs] File not found: ${relativeAfterLocale} - locale: ${locale} - path: ${target1} - path: ${target2}`);
28
+ };
29
+ /**
30
+ * Builds a lazy, awaitable handle over a document.
31
+ *
32
+ * The entry map below holds one handle per document *per locale*, so reading
33
+ * eagerly would pull every markdown file of every locale into memory as soon as
34
+ * this module is imported — hundreds of megabytes, duplicated in every
35
+ * prerender worker, for the handful of documents a page actually renders.
36
+ *
37
+ * The returned value is a thenable rather than a promise: consumers only ever
38
+ * `await` it, and `await` triggers `then`, so the file is read on first use and
39
+ * the resulting promise is cached for subsequent reads.
40
+ */
41
+ const readLocale = (relativeAfterLocale, locale) => {
42
+ let pendingRead;
43
+ const read = () => {
44
+ pendingRead ??= readLocaleFile(relativeAfterLocale, locale);
45
+ return pendingRead;
46
+ };
47
+ return {
48
+ then: (onFulfilled, onRejected) => read().then(onFulfilled, onRejected),
49
+ catch: (onRejected) => read().catch(onRejected),
50
+ finally: (onFinally) => read().finally(onFinally)
51
+ };
25
52
  };
26
53
  const blogEntry = {
27
54
  "./blog/en/compiler_vs_declarative_i18n.md": {
28
55
  en: readLocale("compiler_vs_declarative_i18n.md", "en"),
56
+ es: readLocale("compiler_vs_declarative_i18n.md", "es"),
29
57
  ru: readLocale("compiler_vs_declarative_i18n.md", "ru"),
30
58
  ja: readLocale("compiler_vs_declarative_i18n.md", "ja"),
31
59
  fr: readLocale("compiler_vs_declarative_i18n.md", "fr"),
32
60
  ko: readLocale("compiler_vs_declarative_i18n.md", "ko"),
33
61
  zh: readLocale("compiler_vs_declarative_i18n.md", "zh"),
34
- es: readLocale("compiler_vs_declarative_i18n.md", "es"),
35
62
  de: readLocale("compiler_vs_declarative_i18n.md", "de"),
36
63
  ar: readLocale("compiler_vs_declarative_i18n.md", "ar"),
37
64
  it: readLocale("compiler_vs_declarative_i18n.md", "it"),
@@ -46,12 +73,12 @@ const blogEntry = {
46
73
  },
47
74
  "./blog/en/i18n_meaning.md": {
48
75
  en: readLocale("i18n_meaning.md", "en"),
76
+ es: readLocale("i18n_meaning.md", "es"),
49
77
  ru: readLocale("i18n_meaning.md", "ru"),
50
78
  ja: readLocale("i18n_meaning.md", "ja"),
51
79
  fr: readLocale("i18n_meaning.md", "fr"),
52
80
  ko: readLocale("i18n_meaning.md", "ko"),
53
81
  zh: readLocale("i18n_meaning.md", "zh"),
54
- es: readLocale("i18n_meaning.md", "es"),
55
82
  de: readLocale("i18n_meaning.md", "de"),
56
83
  ar: readLocale("i18n_meaning.md", "ar"),
57
84
  it: readLocale("i18n_meaning.md", "it"),
@@ -66,12 +93,12 @@ const blogEntry = {
66
93
  },
67
94
  "./blog/en/i18n_using_next-i18next.md": {
68
95
  en: readLocale("i18n_using_next-i18next.md", "en"),
96
+ es: readLocale("i18n_using_next-i18next.md", "es"),
69
97
  ru: readLocale("i18n_using_next-i18next.md", "ru"),
70
98
  ja: readLocale("i18n_using_next-i18next.md", "ja"),
71
99
  fr: readLocale("i18n_using_next-i18next.md", "fr"),
72
100
  ko: readLocale("i18n_using_next-i18next.md", "ko"),
73
101
  zh: readLocale("i18n_using_next-i18next.md", "zh"),
74
- es: readLocale("i18n_using_next-i18next.md", "es"),
75
102
  de: readLocale("i18n_using_next-i18next.md", "de"),
76
103
  ar: readLocale("i18n_using_next-i18next.md", "ar"),
77
104
  it: readLocale("i18n_using_next-i18next.md", "it"),
@@ -86,12 +113,12 @@ const blogEntry = {
86
113
  },
87
114
  "./blog/en/i18n_using_next-intl.md": {
88
115
  en: readLocale("i18n_using_next-intl.md", "en"),
116
+ es: readLocale("i18n_using_next-intl.md", "es"),
89
117
  ru: readLocale("i18n_using_next-intl.md", "ru"),
90
118
  ja: readLocale("i18n_using_next-intl.md", "ja"),
91
119
  fr: readLocale("i18n_using_next-intl.md", "fr"),
92
120
  ko: readLocale("i18n_using_next-intl.md", "ko"),
93
121
  zh: readLocale("i18n_using_next-intl.md", "zh"),
94
- es: readLocale("i18n_using_next-intl.md", "es"),
95
122
  de: readLocale("i18n_using_next-intl.md", "de"),
96
123
  ar: readLocale("i18n_using_next-intl.md", "ar"),
97
124
  it: readLocale("i18n_using_next-intl.md", "it"),
@@ -106,12 +133,12 @@ const blogEntry = {
106
133
  },
107
134
  "./blog/en/index.md": {
108
135
  en: readLocale("index.md", "en"),
136
+ es: readLocale("index.md", "es"),
109
137
  ru: readLocale("index.md", "ru"),
110
138
  ja: readLocale("index.md", "ja"),
111
139
  fr: readLocale("index.md", "fr"),
112
140
  ko: readLocale("index.md", "ko"),
113
141
  zh: readLocale("index.md", "zh"),
114
- es: readLocale("index.md", "es"),
115
142
  de: readLocale("index.md", "de"),
116
143
  ar: readLocale("index.md", "ar"),
117
144
  it: readLocale("index.md", "it"),
@@ -126,12 +153,12 @@ const blogEntry = {
126
153
  },
127
154
  "./blog/en/internationalization_and_SEO.md": {
128
155
  en: readLocale("internationalization_and_SEO.md", "en"),
156
+ es: readLocale("internationalization_and_SEO.md", "es"),
129
157
  ru: readLocale("internationalization_and_SEO.md", "ru"),
130
158
  ja: readLocale("internationalization_and_SEO.md", "ja"),
131
159
  fr: readLocale("internationalization_and_SEO.md", "fr"),
132
160
  ko: readLocale("internationalization_and_SEO.md", "ko"),
133
161
  zh: readLocale("internationalization_and_SEO.md", "zh"),
134
- es: readLocale("internationalization_and_SEO.md", "es"),
135
162
  de: readLocale("internationalization_and_SEO.md", "de"),
136
163
  ar: readLocale("internationalization_and_SEO.md", "ar"),
137
164
  it: readLocale("internationalization_and_SEO.md", "it"),
@@ -146,12 +173,12 @@ const blogEntry = {
146
173
  },
147
174
  "./blog/en/intlayer_with_i18next.md": {
148
175
  en: readLocale("intlayer_with_i18next.md", "en"),
176
+ es: readLocale("intlayer_with_i18next.md", "es"),
149
177
  ru: readLocale("intlayer_with_i18next.md", "ru"),
150
178
  ja: readLocale("intlayer_with_i18next.md", "ja"),
151
179
  fr: readLocale("intlayer_with_i18next.md", "fr"),
152
180
  ko: readLocale("intlayer_with_i18next.md", "ko"),
153
181
  zh: readLocale("intlayer_with_i18next.md", "zh"),
154
- es: readLocale("intlayer_with_i18next.md", "es"),
155
182
  de: readLocale("intlayer_with_i18next.md", "de"),
156
183
  ar: readLocale("intlayer_with_i18next.md", "ar"),
157
184
  it: readLocale("intlayer_with_i18next.md", "it"),
@@ -166,12 +193,12 @@ const blogEntry = {
166
193
  },
167
194
  "./blog/en/intlayer_with_next-i18next.md": {
168
195
  en: readLocale("intlayer_with_next-i18next.md", "en"),
196
+ es: readLocale("intlayer_with_next-i18next.md", "es"),
169
197
  ru: readLocale("intlayer_with_next-i18next.md", "ru"),
170
198
  ja: readLocale("intlayer_with_next-i18next.md", "ja"),
171
199
  fr: readLocale("intlayer_with_next-i18next.md", "fr"),
172
200
  ko: readLocale("intlayer_with_next-i18next.md", "ko"),
173
201
  zh: readLocale("intlayer_with_next-i18next.md", "zh"),
174
- es: readLocale("intlayer_with_next-i18next.md", "es"),
175
202
  de: readLocale("intlayer_with_next-i18next.md", "de"),
176
203
  ar: readLocale("intlayer_with_next-i18next.md", "ar"),
177
204
  it: readLocale("intlayer_with_next-i18next.md", "it"),
@@ -186,12 +213,12 @@ const blogEntry = {
186
213
  },
187
214
  "./blog/en/intlayer_with_next-intl.md": {
188
215
  en: readLocale("intlayer_with_next-intl.md", "en"),
216
+ es: readLocale("intlayer_with_next-intl.md", "es"),
189
217
  ru: readLocale("intlayer_with_next-intl.md", "ru"),
190
218
  ja: readLocale("intlayer_with_next-intl.md", "ja"),
191
219
  fr: readLocale("intlayer_with_next-intl.md", "fr"),
192
220
  ko: readLocale("intlayer_with_next-intl.md", "ko"),
193
221
  zh: readLocale("intlayer_with_next-intl.md", "zh"),
194
- es: readLocale("intlayer_with_next-intl.md", "es"),
195
222
  de: readLocale("intlayer_with_next-intl.md", "de"),
196
223
  ar: readLocale("intlayer_with_next-intl.md", "ar"),
197
224
  it: readLocale("intlayer_with_next-intl.md", "it"),
@@ -206,12 +233,12 @@ const blogEntry = {
206
233
  },
207
234
  "./blog/en/intlayer_with_react-i18next.md": {
208
235
  en: readLocale("intlayer_with_react-i18next.md", "en"),
236
+ es: readLocale("intlayer_with_react-i18next.md", "es"),
209
237
  ru: readLocale("intlayer_with_react-i18next.md", "ru"),
210
238
  ja: readLocale("intlayer_with_react-i18next.md", "ja"),
211
239
  fr: readLocale("intlayer_with_react-i18next.md", "fr"),
212
240
  ko: readLocale("intlayer_with_react-i18next.md", "ko"),
213
241
  zh: readLocale("intlayer_with_react-i18next.md", "zh"),
214
- es: readLocale("intlayer_with_react-i18next.md", "es"),
215
242
  de: readLocale("intlayer_with_react-i18next.md", "de"),
216
243
  ar: readLocale("intlayer_with_react-i18next.md", "ar"),
217
244
  it: readLocale("intlayer_with_react-i18next.md", "it"),
@@ -226,12 +253,12 @@ const blogEntry = {
226
253
  },
227
254
  "./blog/en/intlayer_with_react-intl.md": {
228
255
  en: readLocale("intlayer_with_react-intl.md", "en"),
256
+ es: readLocale("intlayer_with_react-intl.md", "es"),
229
257
  ru: readLocale("intlayer_with_react-intl.md", "ru"),
230
258
  ja: readLocale("intlayer_with_react-intl.md", "ja"),
231
259
  fr: readLocale("intlayer_with_react-intl.md", "fr"),
232
260
  ko: readLocale("intlayer_with_react-intl.md", "ko"),
233
261
  zh: readLocale("intlayer_with_react-intl.md", "zh"),
234
- es: readLocale("intlayer_with_react-intl.md", "es"),
235
262
  de: readLocale("intlayer_with_react-intl.md", "de"),
236
263
  ar: readLocale("intlayer_with_react-intl.md", "ar"),
237
264
  it: readLocale("intlayer_with_react-intl.md", "it"),
@@ -246,12 +273,12 @@ const blogEntry = {
246
273
  },
247
274
  "./blog/en/intlayer_with_vue-i18n.md": {
248
275
  en: readLocale("intlayer_with_vue-i18n.md", "en"),
276
+ es: readLocale("intlayer_with_vue-i18n.md", "es"),
249
277
  ru: readLocale("intlayer_with_vue-i18n.md", "ru"),
250
278
  ja: readLocale("intlayer_with_vue-i18n.md", "ja"),
251
279
  fr: readLocale("intlayer_with_vue-i18n.md", "fr"),
252
280
  ko: readLocale("intlayer_with_vue-i18n.md", "ko"),
253
281
  zh: readLocale("intlayer_with_vue-i18n.md", "zh"),
254
- es: readLocale("intlayer_with_vue-i18n.md", "es"),
255
282
  de: readLocale("intlayer_with_vue-i18n.md", "de"),
256
283
  ar: readLocale("intlayer_with_vue-i18n.md", "ar"),
257
284
  it: readLocale("intlayer_with_vue-i18n.md", "it"),
@@ -266,12 +293,12 @@ const blogEntry = {
266
293
  },
267
294
  "./blog/en/l10n_platform_alternative/Lokalise.md": {
268
295
  en: readLocale("l10n_platform_alternative/Lokalise.md", "en"),
296
+ es: readLocale("l10n_platform_alternative/Lokalise.md", "es"),
269
297
  ru: readLocale("l10n_platform_alternative/Lokalise.md", "ru"),
270
298
  ja: readLocale("l10n_platform_alternative/Lokalise.md", "ja"),
271
299
  fr: readLocale("l10n_platform_alternative/Lokalise.md", "fr"),
272
300
  ko: readLocale("l10n_platform_alternative/Lokalise.md", "ko"),
273
301
  zh: readLocale("l10n_platform_alternative/Lokalise.md", "zh"),
274
- es: readLocale("l10n_platform_alternative/Lokalise.md", "es"),
275
302
  de: readLocale("l10n_platform_alternative/Lokalise.md", "de"),
276
303
  ar: readLocale("l10n_platform_alternative/Lokalise.md", "ar"),
277
304
  it: readLocale("l10n_platform_alternative/Lokalise.md", "it"),
@@ -286,12 +313,12 @@ const blogEntry = {
286
313
  },
287
314
  "./blog/en/l10n_platform_alternative/crowdin.md": {
288
315
  en: readLocale("l10n_platform_alternative/crowdin.md", "en"),
316
+ es: readLocale("l10n_platform_alternative/crowdin.md", "es"),
289
317
  ru: readLocale("l10n_platform_alternative/crowdin.md", "ru"),
290
318
  ja: readLocale("l10n_platform_alternative/crowdin.md", "ja"),
291
319
  fr: readLocale("l10n_platform_alternative/crowdin.md", "fr"),
292
320
  ko: readLocale("l10n_platform_alternative/crowdin.md", "ko"),
293
321
  zh: readLocale("l10n_platform_alternative/crowdin.md", "zh"),
294
- es: readLocale("l10n_platform_alternative/crowdin.md", "es"),
295
322
  de: readLocale("l10n_platform_alternative/crowdin.md", "de"),
296
323
  ar: readLocale("l10n_platform_alternative/crowdin.md", "ar"),
297
324
  it: readLocale("l10n_platform_alternative/crowdin.md", "it"),
@@ -306,12 +333,12 @@ const blogEntry = {
306
333
  },
307
334
  "./blog/en/l10n_platform_alternative/phrase.md": {
308
335
  en: readLocale("l10n_platform_alternative/phrase.md", "en"),
336
+ es: readLocale("l10n_platform_alternative/phrase.md", "es"),
309
337
  ru: readLocale("l10n_platform_alternative/phrase.md", "ru"),
310
338
  ja: readLocale("l10n_platform_alternative/phrase.md", "ja"),
311
339
  fr: readLocale("l10n_platform_alternative/phrase.md", "fr"),
312
340
  ko: readLocale("l10n_platform_alternative/phrase.md", "ko"),
313
341
  zh: readLocale("l10n_platform_alternative/phrase.md", "zh"),
314
- es: readLocale("l10n_platform_alternative/phrase.md", "es"),
315
342
  de: readLocale("l10n_platform_alternative/phrase.md", "de"),
316
343
  ar: readLocale("l10n_platform_alternative/phrase.md", "ar"),
317
344
  it: readLocale("l10n_platform_alternative/phrase.md", "it"),
@@ -326,12 +353,12 @@ const blogEntry = {
326
353
  },
327
354
  "./blog/en/list_i18n_technologies/frameworks/angular.md": {
328
355
  en: readLocale("list_i18n_technologies/frameworks/angular.md", "en"),
356
+ es: readLocale("list_i18n_technologies/frameworks/angular.md", "es"),
329
357
  ru: readLocale("list_i18n_technologies/frameworks/angular.md", "ru"),
330
358
  ja: readLocale("list_i18n_technologies/frameworks/angular.md", "ja"),
331
359
  fr: readLocale("list_i18n_technologies/frameworks/angular.md", "fr"),
332
360
  ko: readLocale("list_i18n_technologies/frameworks/angular.md", "ko"),
333
361
  zh: readLocale("list_i18n_technologies/frameworks/angular.md", "zh"),
334
- es: readLocale("list_i18n_technologies/frameworks/angular.md", "es"),
335
362
  de: readLocale("list_i18n_technologies/frameworks/angular.md", "de"),
336
363
  ar: readLocale("list_i18n_technologies/frameworks/angular.md", "ar"),
337
364
  it: readLocale("list_i18n_technologies/frameworks/angular.md", "it"),
@@ -346,12 +373,12 @@ const blogEntry = {
346
373
  },
347
374
  "./blog/en/list_i18n_technologies/frameworks/react-native.md": {
348
375
  en: readLocale("list_i18n_technologies/frameworks/react-native.md", "en"),
376
+ es: readLocale("list_i18n_technologies/frameworks/react-native.md", "es"),
349
377
  ru: readLocale("list_i18n_technologies/frameworks/react-native.md", "ru"),
350
378
  ja: readLocale("list_i18n_technologies/frameworks/react-native.md", "ja"),
351
379
  fr: readLocale("list_i18n_technologies/frameworks/react-native.md", "fr"),
352
380
  ko: readLocale("list_i18n_technologies/frameworks/react-native.md", "ko"),
353
381
  zh: readLocale("list_i18n_technologies/frameworks/react-native.md", "zh"),
354
- es: readLocale("list_i18n_technologies/frameworks/react-native.md", "es"),
355
382
  de: readLocale("list_i18n_technologies/frameworks/react-native.md", "de"),
356
383
  ar: readLocale("list_i18n_technologies/frameworks/react-native.md", "ar"),
357
384
  it: readLocale("list_i18n_technologies/frameworks/react-native.md", "it"),
@@ -366,12 +393,12 @@ const blogEntry = {
366
393
  },
367
394
  "./blog/en/list_i18n_technologies/frameworks/react.md": {
368
395
  en: readLocale("list_i18n_technologies/frameworks/react.md", "en"),
396
+ es: readLocale("list_i18n_technologies/frameworks/react.md", "es"),
369
397
  ru: readLocale("list_i18n_technologies/frameworks/react.md", "ru"),
370
398
  ja: readLocale("list_i18n_technologies/frameworks/react.md", "ja"),
371
399
  fr: readLocale("list_i18n_technologies/frameworks/react.md", "fr"),
372
400
  ko: readLocale("list_i18n_technologies/frameworks/react.md", "ko"),
373
401
  zh: readLocale("list_i18n_technologies/frameworks/react.md", "zh"),
374
- es: readLocale("list_i18n_technologies/frameworks/react.md", "es"),
375
402
  de: readLocale("list_i18n_technologies/frameworks/react.md", "de"),
376
403
  ar: readLocale("list_i18n_technologies/frameworks/react.md", "ar"),
377
404
  it: readLocale("list_i18n_technologies/frameworks/react.md", "it"),
@@ -386,12 +413,12 @@ const blogEntry = {
386
413
  },
387
414
  "./blog/en/list_i18n_technologies/frameworks/svelte.md": {
388
415
  en: readLocale("list_i18n_technologies/frameworks/svelte.md", "en"),
416
+ es: readLocale("list_i18n_technologies/frameworks/svelte.md", "es"),
389
417
  ru: readLocale("list_i18n_technologies/frameworks/svelte.md", "ru"),
390
418
  ja: readLocale("list_i18n_technologies/frameworks/svelte.md", "ja"),
391
419
  fr: readLocale("list_i18n_technologies/frameworks/svelte.md", "fr"),
392
420
  ko: readLocale("list_i18n_technologies/frameworks/svelte.md", "ko"),
393
421
  zh: readLocale("list_i18n_technologies/frameworks/svelte.md", "zh"),
394
- es: readLocale("list_i18n_technologies/frameworks/svelte.md", "es"),
395
422
  de: readLocale("list_i18n_technologies/frameworks/svelte.md", "de"),
396
423
  ar: readLocale("list_i18n_technologies/frameworks/svelte.md", "ar"),
397
424
  it: readLocale("list_i18n_technologies/frameworks/svelte.md", "it"),
@@ -406,12 +433,12 @@ const blogEntry = {
406
433
  },
407
434
  "./blog/en/list_i18n_technologies/frameworks/vue.md": {
408
435
  en: readLocale("list_i18n_technologies/frameworks/vue.md", "en"),
436
+ es: readLocale("list_i18n_technologies/frameworks/vue.md", "es"),
409
437
  ru: readLocale("list_i18n_technologies/frameworks/vue.md", "ru"),
410
438
  ja: readLocale("list_i18n_technologies/frameworks/vue.md", "ja"),
411
439
  fr: readLocale("list_i18n_technologies/frameworks/vue.md", "fr"),
412
440
  ko: readLocale("list_i18n_technologies/frameworks/vue.md", "ko"),
413
441
  zh: readLocale("list_i18n_technologies/frameworks/vue.md", "zh"),
414
- es: readLocale("list_i18n_technologies/frameworks/vue.md", "es"),
415
442
  de: readLocale("list_i18n_technologies/frameworks/vue.md", "de"),
416
443
  ar: readLocale("list_i18n_technologies/frameworks/vue.md", "ar"),
417
444
  it: readLocale("list_i18n_technologies/frameworks/vue.md", "it"),
@@ -426,12 +453,12 @@ const blogEntry = {
426
453
  },
427
454
  "./blog/en/next-i18next_vs_next-intl_vs_intlayer.md": {
428
455
  en: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "en"),
456
+ es: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "es"),
429
457
  ru: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "ru"),
430
458
  ja: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "ja"),
431
459
  fr: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "fr"),
432
460
  ko: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "ko"),
433
461
  zh: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "zh"),
434
- es: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "es"),
435
462
  de: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "de"),
436
463
  ar: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "ar"),
437
464
  it: readLocale("next-i18next_vs_next-intl_vs_intlayer.md", "it"),
@@ -446,12 +473,12 @@ const blogEntry = {
446
473
  },
447
474
  "./blog/en/nextjs-multilingual-seo-comparison.md": {
448
475
  en: readLocale("nextjs-multilingual-seo-comparison.md", "en"),
476
+ es: readLocale("nextjs-multilingual-seo-comparison.md", "es"),
449
477
  ru: readLocale("nextjs-multilingual-seo-comparison.md", "ru"),
450
478
  ja: readLocale("nextjs-multilingual-seo-comparison.md", "ja"),
451
479
  fr: readLocale("nextjs-multilingual-seo-comparison.md", "fr"),
452
480
  ko: readLocale("nextjs-multilingual-seo-comparison.md", "ko"),
453
481
  zh: readLocale("nextjs-multilingual-seo-comparison.md", "zh"),
454
- es: readLocale("nextjs-multilingual-seo-comparison.md", "es"),
455
482
  de: readLocale("nextjs-multilingual-seo-comparison.md", "de"),
456
483
  ar: readLocale("nextjs-multilingual-seo-comparison.md", "ar"),
457
484
  it: readLocale("nextjs-multilingual-seo-comparison.md", "it"),
@@ -466,12 +493,12 @@ const blogEntry = {
466
493
  },
467
494
  "./blog/en/per-component_vs_centralized_i18n.md": {
468
495
  en: readLocale("per-component_vs_centralized_i18n.md", "en"),
496
+ es: readLocale("per-component_vs_centralized_i18n.md", "es"),
469
497
  ru: readLocale("per-component_vs_centralized_i18n.md", "ru"),
470
498
  ja: readLocale("per-component_vs_centralized_i18n.md", "ja"),
471
499
  fr: readLocale("per-component_vs_centralized_i18n.md", "fr"),
472
500
  ko: readLocale("per-component_vs_centralized_i18n.md", "ko"),
473
501
  zh: readLocale("per-component_vs_centralized_i18n.md", "zh"),
474
- es: readLocale("per-component_vs_centralized_i18n.md", "es"),
475
502
  de: readLocale("per-component_vs_centralized_i18n.md", "de"),
476
503
  ar: readLocale("per-component_vs_centralized_i18n.md", "ar"),
477
504
  it: readLocale("per-component_vs_centralized_i18n.md", "it"),
@@ -486,12 +513,12 @@ const blogEntry = {
486
513
  },
487
514
  "./blog/en/rag_powered_documentation_assistant.md": {
488
515
  en: readLocale("rag_powered_documentation_assistant.md", "en"),
516
+ es: readLocale("rag_powered_documentation_assistant.md", "es"),
489
517
  ru: readLocale("rag_powered_documentation_assistant.md", "ru"),
490
518
  ja: readLocale("rag_powered_documentation_assistant.md", "ja"),
491
519
  fr: readLocale("rag_powered_documentation_assistant.md", "fr"),
492
520
  ko: readLocale("rag_powered_documentation_assistant.md", "ko"),
493
521
  zh: readLocale("rag_powered_documentation_assistant.md", "zh"),
494
- es: readLocale("rag_powered_documentation_assistant.md", "es"),
495
522
  de: readLocale("rag_powered_documentation_assistant.md", "de"),
496
523
  ar: readLocale("rag_powered_documentation_assistant.md", "ar"),
497
524
  it: readLocale("rag_powered_documentation_assistant.md", "it"),
@@ -506,12 +533,12 @@ const blogEntry = {
506
533
  },
507
534
  "./blog/en/react-i18next_vs_react-intl_vs_intlayer.md": {
508
535
  en: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "en"),
536
+ es: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "es"),
509
537
  ru: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "ru"),
510
538
  ja: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "ja"),
511
539
  fr: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "fr"),
512
540
  ko: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "ko"),
513
541
  zh: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "zh"),
514
- es: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "es"),
515
542
  de: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "de"),
516
543
  ar: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "ar"),
517
544
  it: readLocale("react-i18next_vs_react-intl_vs_intlayer.md", "it"),
@@ -526,12 +553,12 @@ const blogEntry = {
526
553
  },
527
554
  "./blog/en/vue-i18n_vs_intlayer.md": {
528
555
  en: readLocale("vue-i18n_vs_intlayer.md", "en"),
556
+ es: readLocale("vue-i18n_vs_intlayer.md", "es"),
529
557
  ru: readLocale("vue-i18n_vs_intlayer.md", "ru"),
530
558
  ja: readLocale("vue-i18n_vs_intlayer.md", "ja"),
531
559
  fr: readLocale("vue-i18n_vs_intlayer.md", "fr"),
532
560
  ko: readLocale("vue-i18n_vs_intlayer.md", "ko"),
533
561
  zh: readLocale("vue-i18n_vs_intlayer.md", "zh"),
534
- es: readLocale("vue-i18n_vs_intlayer.md", "es"),
535
562
  de: readLocale("vue-i18n_vs_intlayer.md", "de"),
536
563
  ar: readLocale("vue-i18n_vs_intlayer.md", "ar"),
537
564
  it: readLocale("vue-i18n_vs_intlayer.md", "it"),
@@ -546,12 +573,12 @@ const blogEntry = {
546
573
  },
547
574
  "./blog/en/what_is_internationalization.md": {
548
575
  en: readLocale("what_is_internationalization.md", "en"),
576
+ es: readLocale("what_is_internationalization.md", "es"),
549
577
  ru: readLocale("what_is_internationalization.md", "ru"),
550
578
  ja: readLocale("what_is_internationalization.md", "ja"),
551
579
  fr: readLocale("what_is_internationalization.md", "fr"),
552
580
  ko: readLocale("what_is_internationalization.md", "ko"),
553
581
  zh: readLocale("what_is_internationalization.md", "zh"),
554
- es: readLocale("what_is_internationalization.md", "es"),
555
582
  de: readLocale("what_is_internationalization.md", "de"),
556
583
  ar: readLocale("what_is_internationalization.md", "ar"),
557
584
  it: readLocale("what_is_internationalization.md", "it"),