@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
@@ -29,199 +29,88 @@ author: aymericzip
29
29
 
30
30
  Чтобы установить вложение в вашем проекте Intlayer, сначала определите базовый контент, который вы хотите повторно использовать. Затем в отдельном модуле контента используйте функцию `nest` для импорта этого контента.
31
31
 
32
- ## Как работает вложенность
32
+ ### Базовый словарь
33
33
 
34
- <Tabs group="framework">
35
- <Tab label="React" value="react">
34
+ Ниже приведен пример базового словаря для вложения в другой словарь:
36
35
 
37
- To use nested content in a React component, leverage the `useIntlayer` hook from the `react-intlayer` package. This hook retrieves the correct content based on the specified key. Here's an example of how to use it:
38
-
39
- ```tsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
40
- import type { FC } from "react";
41
- import { useIntlayer } from "react-intlayer";
42
-
43
- const NestComponent: FC = () => {
44
- const { fullNestedContent, partialNestedContent } = useIntlayer(
45
- "key_of_my_second_dictionary"
46
- );
36
+ ```typescript fileName="firstDictionary.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
37
+ import { type Dictionary } from "intlayer";
47
38
 
48
- return (
49
- <div>
50
- <p>Full Nested Content: {JSON.stringify(fullNestedContent)}</p>
51
- <p>Partial Nested Value: {partialNestedContent}</p>
52
- </div>
53
- );
54
- };
39
+ const firstDictionary = {
40
+ key: "key_of_my_first_dictionary",
41
+ content: {
42
+ content: "content",
43
+ subContent: {
44
+ contentNumber: 0,
45
+ contentString: "string",
46
+ },
47
+ },
48
+ } satisfies Dictionary;
55
49
 
56
- export default NestComponent;
50
+ export default firstDictionary;
57
51
  ```
58
52
 
59
- </Tab>
60
- <Tab label="Next.js" value="nextjs">
61
-
62
- To use nested content in Next.js Client Components, retrieve it via the `useIntlayer` hook. Here's an example:
63
-
64
- ```tsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
65
- "use client";
66
-
67
- import type { FC } from "react";
68
- import { useIntlayer } from "next-intlayer";
69
-
70
- const NestComponent: FC = () => {
71
- const { fullNestedContent, partialNestedContent } = useIntlayer(
72
- "key_of_my_second_dictionary"
73
- );
74
-
75
- return (
76
- <div>
77
- <p>Full Nested Content: {JSON.stringify(fullNestedContent)}</p>
78
- <p>Partial Nested Value: {partialNestedContent}</p>
79
- </div>
80
- );
81
- };
82
-
83
- export default NestComponent;
84
- ```
85
-
86
- </Tab>
87
- <Tab label="Vue" value="vue">
88
-
89
- To use nested content in Vue components, retrieve it via the `useIntlayer` hook. Here's an example:
90
-
91
- ```vue fileName="**/*.vue"
92
- <script setup lang="ts">
93
- import { useIntlayer } from "vue-intlayer";
94
-
95
- const { fullNestedContent, partialNestedContent } = useIntlayer(
96
- "key_of_my_second_dictionary"
97
- );
98
- </script>
99
-
100
- <template>
101
- <div>
102
- <p>Full Nested Content: {{ JSON.stringify(fullNestedContent) }}</p>
103
- <p>Partial Nested Value: {{ partialNestedContent }}</p>
104
- </div>
105
- </template>
106
- ```
107
-
108
- </Tab>
109
- <Tab label="Svelte" value="svelte">
110
-
111
- To use nested content in Svelte components, retrieve it via the `useIntlayer` hook. The store is accessed with `$`. Here's an example:
112
-
113
- ```svelte fileName="**/*.svelte"
114
- <script lang="ts">
115
- import { useIntlayer } from "svelte-intlayer";
116
-
117
- const content = useIntlayer("key_of_my_second_dictionary");
118
- </script>
119
-
120
- <div>
121
- <p>Full Nested Content: {JSON.stringify($content.fullNestedContent)}</p>
122
- <p>Partial Nested Value: {$content.partialNestedContent}</p>
123
- </div>
124
- ```
125
-
126
- </Tab>
127
- <Tab label="Preact" value="preact">
128
-
129
- To use nested content in Preact components, retrieve it via the `useIntlayer` hook. Here's an example:
130
-
131
- ```tsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
132
- import type { FC } from "preact";
133
- import { useIntlayer } from "preact-intlayer";
134
-
135
- const NestComponent: FC = () => {
136
- const { fullNestedContent, partialNestedContent } = useIntlayer(
137
- "key_of_my_second_dictionary"
138
- );
139
-
140
- return (
141
- <div>
142
- <p>Full Nested Content: {JSON.stringify(fullNestedContent)}</p>
143
- <p>Partial Nested Value: {partialNestedContent}</p>
144
- </div>
145
- );
146
- };
147
-
148
- export default NestComponent;
53
+ ```json fileName="firstDictionary.content.json" contentDeclarationFormat="json"
54
+ {
55
+ "$schema": "https://intlayer.org/schema.json",
56
+ "key": "key_of_my_first_dictionary",
57
+ "content": {
58
+ "content": "content",
59
+ "subContent": {
60
+ "contentNumber": 0,
61
+ "contentString": "string"
62
+ }
63
+ }
64
+ }
149
65
  ```
150
66
 
151
- </Tab>
152
- <Tab label="Solid" value="solid">
67
+ ### Ссылка с Nest
153
68
 
154
- To use nested content in SolidJS components, retrieve it via the `useIntlayer` hook. Here's an example:
69
+ Теперь создайте еще один модуль содержимого, который использует функцию `nest` для ссылки на приведенное выше содержимое. Вы можете ссылаться на все содержимое или на конкретное вложенное значение:
155
70
 
156
- ```tsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
157
- import type { Component } from "solid-js";
158
- import { useIntlayer } from "solid-intlayer";
71
+ ```typescript fileName="secondDictionary.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
72
+ import { nest, type Dictionary } from "intlayer";
159
73
 
160
- const NestComponent: Component = () => {
161
- const { fullNestedContent, partialNestedContent } = useIntlayer(
162
- "key_of_my_second_dictionary"
163
- );
74
+ const myNestingContent = {
75
+ key: "key_of_my_second_dictionary",
76
+ content: {
77
+ // Ссылается на весь словарь:
78
+ fullNestedContent: nest("key_of_my_first_dictionary"),
79
+ // Ссылается на конкретное вложенное значение:
80
+ partialNestedContent: nest(
81
+ "key_of_my_first_dictionary",
82
+ "subContent.contentNumber"
83
+ ),
84
+ },
85
+ } satisfies Dictionary;
164
86
 
165
- return (
166
- <div>
167
- <p>Full Nested Content: {JSON.stringify(fullNestedContent)}</p>
168
- <p>Partial Nested Value: {partialNestedContent}</p>
169
- </div>
170
- );
171
- };
172
-
173
- export default NestComponent;
87
+ export default myNestingContent;
174
88
  ```
175
89
 
176
- </Tab>
177
- <Tab label="Angular" value="angular">
178
-
179
- To use nested content in Angular components, retrieve it via the `useIntlayer` hook. Here's an example:
180
-
181
- ```typescript fileName="app.component.ts" codeFormat="typescript"
182
- import { Component } from "@angular/core";
183
- import { useIntlayer } from "angular-intlayer";
184
-
185
- @Component({
186
- selector: "app-nest",
187
- template: `
188
- <div>
189
- <p>
190
- Full Nested Content: {{ JSON.stringify(content().fullNestedContent) }}
191
- </p>
192
- <p>Partial Nested Value: {{ content().partialNestedContent }}</p>
193
- </div>
194
- `,
195
- })
196
- export class NestComponent {
197
- content = useIntlayer("key_of_my_second_dictionary");
198
- JSON = JSON;
90
+ ```json fileName="secondDictionary.content.json" contentDeclarationFormat="json"
91
+ {
92
+ "$schema": "https://intlayer.org/schema.json",
93
+ "key": "key_of_my_second_dictionary",
94
+ "content": {
95
+ "fullNestedContent": {
96
+ "nodeType": "nested",
97
+ "nested": {
98
+ "dictionaryKey": "key_of_my_first_dictionary"
99
+ }
100
+ },
101
+ "partialNestedContent": {
102
+ "nodeType": "nested",
103
+ "nested": {
104
+ "dictionaryKey": "key_of_my_first_dictionary",
105
+ "path": "subContent.contentNumber"
106
+ }
107
+ }
108
+ }
199
109
  }
200
110
  ```
201
111
 
202
- </Tab>
203
- <Tab label="Vanilla JS" value="vanilla">
204
-
205
- To use nested content with `vanilla-intlayer`, retrieve it via the `useIntlayer` hook. Here's an example:
206
-
207
- ```typescript fileName="**/*.ts" codeFormat={["typescript", "esm"]}
208
- import { installIntlayer, useIntlayer } from "vanilla-intlayer";
209
-
210
- installIntlayer();
112
+ Как второй параметр можно указать путь к вложенному значению внутри этого содержимого. Если путь не предоставлен, будет возвращено все содержимое из указанного словаря.
211
113
 
212
- const content = useIntlayer("key_of_my_second_dictionary").onChange(
213
- (newContent) => {
214
- document.getElementById("nested")!.textContent =
215
- newContent.partialNestedContent;
216
- }
217
- );
218
-
219
- // Initial render
220
- document.getElementById("nested")!.textContent = content.partialNestedContent;
221
- ```
222
-
223
- </Tab>
224
- </Tabs>
225
114
  ## Настройка вложенности
226
115
 
227
116
  <Tabs group="framework">
@@ -416,36 +305,6 @@ document.getElementById("nested")!.textContent = content.partialNestedContent;
416
305
  </Tab>
417
306
  </Tabs>
418
307
 
419
- ## Использование вложенности с React Intlayer
420
-
421
- Чтобы использовать вложенный контент в React-компоненте, используйте хук `useIntlayer` из пакета `react-intlayer`. Этот хук извлекает правильный контент на основе указанного ключа. Вот пример его использования:
422
-
423
- ```tsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
424
- import type { FC } from "react";
425
- import { useIntlayer } from "react-intlayer";
426
-
427
- const NestComponent: FC = () => {
428
- const { fullNestedContent, partialNestedContent } = useIntlayer(
429
- "key_of_my_second_dictionary"
430
- );
431
-
432
- return (
433
- <div>
434
- <p>
435
- Полный вложенный контент: {JSON.stringify(fullNestedContent)}
436
- {/* Вывод: {"content": "content", "subContent": {"contentNumber": 0, "contentString": "string"}} */}
437
- </p>
438
- <p>
439
- Частичное вложенное значение: {partialNestedContent}
440
- {/* Вывод: 0 */}
441
- </p>
442
- </div>
443
- );
444
- };
445
-
446
- export default NestComponent;
447
- ```
448
-
449
308
  ## Дополнительные ресурсы
450
309
 
451
310
  Для получения более подробной информации о настройке и использовании обратитесь к следующим ресурсам:
@@ -46,34 +46,6 @@ author: aymericzip
46
46
 
47
47
  Intlayer предоставляет набор лёгких помощников, построенных поверх нативных API `Intl`, а также кешированный обёртку `Intl`, чтобы избежать многократного создания тяжёлых форматтеров. Эти утилиты полностью учитывают локаль и могут использоваться из основного пакета `intlayer`.
48
48
 
49
- ### Импорт
50
-
51
- ```ts
52
- import {
53
- Intl,
54
- number,
55
- percentage,
56
- currency,
57
- date,
58
- relativeTime,
59
- units,
60
- compact,
61
- list,
62
- getLocaleName,
63
- getLocaleLang,
64
- getLocaleFromPath,
65
- getPathWithoutLocale,
66
- getLocalizedUrl,
67
- getHTMLTextDir,
68
- getContent,
69
- getTranslation,
70
- getIntlayer,
71
- getIntlayerAsync,
72
- } from "intlayer";
73
- ```
74
-
75
- Если вы используете React, хуки также доступны; смотрите `react-intlayer/format`.
76
-
77
49
  ## Кешированный Intl
78
50
 
79
51
  Экспортируемый `Intl`, это тонкая кешированная обёртка вокруг глобального `Intl`. Он мемоизирует экземпляры `NumberFormat`, `DateTimeFormat`, `RelativeTimeFormat`, `ListFormat`, `DisplayNames`, `Collator` и `PluralRules`, что позволяет избежать повторного создания одного и того же форматтера.
@@ -110,9 +82,7 @@ pluralRules.select(1); // "one"
110
82
  pluralRules.select(2); // "other"
111
83
  ```
112
84
 
113
- ## Дополнительные утилиты Intl
114
-
115
- Помимо помощников для форматтеров, вы также можете использовать кешированную обёртку Intl напрямую для других возможностей Intl:
85
+ ## React Formatters
116
86
 
117
87
  ### `Intl.DisplayNames`
118
88
 
@@ -128,6 +98,22 @@ const regionNames = new Intl.DisplayNames("fr", { type: "region" });
128
98
  regionNames.of("US"); // "États-Unis"
129
99
  ```
130
100
 
101
+ ### Доступные Hooks
102
+
103
+ Все hooks автоматически используют локаль из `IntlayerProvider` или `IntlayerServerProvider`.
104
+
105
+ | Hook | Description | Example Output |
106
+ | ------------------- | ------------------------------------------- | ----------------------------- |
107
+ | `useNumber()` | Форматирование чисел с разделением | `"123,456.789"` |
108
+ | `useCurrency()` | Форматирование значений валют | `"€1,234.50"` |
109
+ | `usePercentage()` | Форматирование процентов | `"25%"` |
110
+ | `useDate()` | Форматирование дат и времени | `"Aug 2, 2025"` |
111
+ | `useRelativeTime()` | Форматирование относительного времени | `"in 3 days"` |
112
+ | `useUnit()` | Форматирование значений с единицами | `"5 kilometers"` |
113
+ | `useCompact()` | Форматирование чисел в сокращенной форме | `"1.2K"` |
114
+ | `useList()` | Форматирование массивов как списки | `"apple, banana, and orange"` |
115
+ | `useIntl()` | Получить привязанный к локали объект `Intl` | Full `Intl` API access |
116
+
131
117
  ### `Intl.Collator`
132
118
 
133
119
  Для локализованного сравнения и сортировки строк:
@@ -286,127 +272,111 @@ getLocaleLang("de"); // "de"
286
272
 
287
273
  ### Функции форматирования
288
274
 
289
- ### `getLocaleFromPath(inputUrl)`
275
+ #### `number(value, options?)`
290
276
 
291
- Извлекает сегмент локали из URL или пути:
277
+ Форматирует числовое значение с учётом локали, используя локализованные разделители групп и десятичные разделители.
292
278
 
293
- ```ts
294
- import { getLocaleFromPath } from "intlayer";
279
+ - **value**: `number | string`
280
+ - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
295
281
 
296
- getLocaleFromPath("/en/dashboard"); // "en"
297
- getLocaleFromPath("/fr/dashboard"); // "fr"
298
- getLocaleFromPath("/dashboard"); // "en" (локаль по умолчанию)
299
- getLocaleFromPath("https://example.com/es/about"); // "es"
282
+ ```ts
283
+ number(123456.789); // "123,456.789" (в en-US)
284
+ number("1000000", { locale: "fr" }); // "1 000 000"
285
+ number(1234.5, { minimumFractionDigits: 2 }); // "1,234.50"
300
286
  ```
301
287
 
302
- - **inputUrl**: Полная строка URL или путь для обработки
303
- - **returns**: Обнаруженная локаль или локаль по умолчанию, если локаль не найдена
288
+ #### `percentage(value, options?)`
304
289
 
305
- ### `getPathWithoutLocale(inputUrl, locales?)`
290
+ Форматирует число как строку процента. Значения больше 1 нормализуются (например, `25` → `25%`, `0.25` → `25%`).
306
291
 
307
- Удаляет сегмент локали из URL или пути:
292
+ - **value**: `number | string`
293
+ - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
308
294
 
309
295
  ```ts
310
- import { getPathWithoutLocale } from "intlayer";
311
-
312
- getPathWithoutLocale("/en/dashboard"); // "/dashboard"
313
- getPathWithoutLocale("/fr/dashboard"); // "/dashboard"
314
- getPathWithoutLocale("https://example.com/en/about"); // "https://example.com/about"
296
+ percentage(0.25); // "25%"
297
+ percentage(25); // "25%"
298
+ percentage(0.237, { minimumFractionDigits: 1 }); // "23.7%"
315
299
  ```
316
300
 
317
- - **inputUrl**: Полная строка URL или путь для обработки
318
- - **locales**: Необязательный массив поддерживаемых локалей (по умолчанию используется настроенный список локалей)
319
- - **returns**: URL без сегмента локали
301
+ #### `currency(value, options?)`
320
302
 
321
- ### `getLocalizedUrl(url, currentLocale, locales?, defaultLocale?, prefixDefault?)`
303
+ Форматирует значение как локализованную валюту. По умолчанию `USD`.
322
304
 
323
- Генерирует локализованный URL для текущей локали:
305
+ - **value**: `number | string`
306
+ - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
307
+ - Common: `currency`, `currencyDisplay` (`"symbol" | "code" | "name"`)
324
308
 
325
309
  ```ts
326
- import { getLocalizedUrl } from "intlayer";
327
-
328
- getLocalizedUrl("/about", "fr", ["en", "fr"], "en", false); // "/fr/about"
329
- getLocalizedUrl("/about", "en", ["en", "fr"], "en", false); // "/about"
330
- getLocalizedUrl("https://example.com/about", "fr", ["en", "fr"], "en", true); // "https://example.com/fr/about"
310
+ currency(1234.5, { currency: "EUR" }); // "€1,234.50"
311
+ currency("5000", { locale: "fr", currency: "CAD", currencyDisplay: "code" }); // "5 000,00 CAD"
331
312
  ```
332
313
 
333
- - **url**: Исходный URL для локализации
334
- - **currentLocale**: Текущая локаль
335
- - **locales**: Необязательный массив поддерживаемых локалей (по умолчанию используется настроенный список локалей)
336
- - **defaultLocale**: Необязательная локаль по умолчанию (по умолчанию используется настроенная локаль по умолчанию)
337
- - **prefixDefault**: Добавлять ли префикс для локали по умолчанию (по умолчанию используется настроенное значение)
314
+ #### `date(date, optionsOrPreset?)`
338
315
 
339
- ### `getHTMLTextDir(locale?)`
316
+ Форматирует значение даты/времени.
340
317
 
341
- Возвращает направление текста для локали:
318
+ - **date**: `Date | string | number`
319
+ - **optionsOrPreset**: `Intl.DateTimeFormatOptions & { locale?: LocalesValues }` или preset: `"short" | "long" | "dateOnly" | "timeOnly" | "full"`
342
320
 
343
321
  ```ts
344
- import { getHTMLTextDir } from "intlayer";
345
-
346
- getHTMLTextDir("en-US"); // "ltr"
347
- getHTMLTextDir("ar"); // "rtl"
348
- getHTMLTextDir("he"); // "rtl"
322
+ date(new Date(), "short"); // например, "08/02/25, 14:30"
323
+ date("2025-08-02T14:30:00Z", { locale: "fr", month: "long", day: "numeric" }); // "2 août"
349
324
  ```
350
325
 
351
- - **locale**: Локаль, для которой нужно получить направление текста (по умолчанию текущая локаль)
352
- - **returns**: `"ltr"`, `"rtl"` или `"auto"`
326
+ #### `relativeTime(from, to?, options?)`
353
327
 
354
- ## Утилиты для обработки контента
328
+ Форматирует относительное время между двумя моментами.
355
329
 
356
- ### `getContent(node, nodeProps, locale?)`
357
-
358
- Преобразует узел контента со всеми доступными плагинами (перевод, перечисление, вставка и т.д.):
330
+ - **from**: `Date | string | number`
331
+ - **to**: `Date | string | number` (по умолчанию `new Date()`)
332
+ - **options**: `{ locale?, unit?, numeric?, style? }`
359
333
 
360
334
  ```ts
361
- import { getContent } from "intlayer";
335
+ const now = new Date();
336
+ const in3Days = new Date(now.getTime() + 3 * 864e5);
337
+ relativeTime(now, in3Days, { unit: "day" }); // "через 3 дня"
362
338
 
363
- const content = getContent(
364
- contentNode,
365
- { dictionaryKey: "common", dictionaryPath: "/path/to/dict" },
366
- "fr"
367
- );
339
+ const twoHoursAgo = new Date(now.getTime() - 2 * 3600e3);
340
+ relativeTime(now, twoHoursAgo, { unit: "hour", numeric: "auto" }); // "2 часа назад"
368
341
  ```
369
342
 
370
- - **node**: Узел контента для преобразования
371
- - **nodeProps**: Свойства для контекста преобразования
372
- - **locale**: Необязательная локаль (по умолчанию используется настроенная локаль по умолчанию)
343
+ #### `units(value, options?)`
373
344
 
374
- ### `getTranslation(languageContent, locale?, fallback?)`
345
+ Форматирует числовое значение с единицей измерения.
375
346
 
376
- Извлекает контент для конкретной локали из объекта с языковым содержимым:
347
+ - **value**: `number | string`
348
+ - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
349
+ - Common: `unit` (например, `"kilometer"`, `"byte"`), `unitDisplay` (`"short" | "narrow" | "long"`)
377
350
 
378
351
  ```ts
379
- import { getTranslation } from "intlayer";
380
-
381
- const content = getTranslation(
382
- {
383
- en: "Hello",
384
- fr: "Bonjour",
385
- de: "Hallo",
386
- },
387
- "fr",
388
- true
389
- ); // "Bonjour"
352
+ units(5, { unit: "kilometer", unitDisplay: "long", locale: "en-GB" }); // "5 kilometers"
353
+ units(1024, { unit: "byte", unitDisplay: "narrow" }); // "1,024B"
390
354
  ```
391
355
 
392
- - **languageContent**: Объект, сопоставляющий локали с контентом
393
- - **locale**: Целевая локаль (по умолчанию используется настроенная локаль по умолчанию)
394
- - **fallback**: Использовать ли резервный вариант с локалью по умолчанию (по умолчанию true)
356
+ #### `compact(value, options?)`
395
357
 
396
- ### `getIntlayer(dictionaryKey, locale?, plugins?)`
358
+ Форматирует число с использованием компактной нотации.
397
359
 
398
- Получает и преобразует контент из словаря по ключу:
360
+ - **value**: `number | string`
361
+ - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
399
362
 
400
363
  ```ts
401
- import { getIntlayer } from "intlayer";
402
-
403
- const content = getIntlayer("common", "fr");
404
- const nestedContent = getIntlayer("common", "fr", customPlugins);
364
+ compact(1200); // "1.2K"
365
+ compact("1000000", { locale: "fr", compactDisplay: "long" }); // "1 million"
405
366
  ```
406
367
 
407
- - **dictionaryKey**: Ключ словаря для получения
408
- - **locale**: Необязательная локаль (по умолчанию используется настроенная локаль по умолчанию)
409
- - **plugins**: Необязательный массив пользовательских плагинов трансформации
368
+ #### `list(values, options?)`
369
+
370
+ Форматирует массив в локализованную строку списка.
371
+
372
+ - **values**: `(string | number)[]`
373
+ - **options**: `Intl.ListFormatOptions & { locale?: LocalesValues }`
374
+ - Common: `type` (`"conjunction" | "disjunction" | "unit"`), `style` (`"long" | "short" | "narrow"`)
375
+
376
+ ```ts
377
+ list(["apple", "banana", "orange"]); // "apple, banana, and orange"
378
+ list(["red", "green", "blue"], { locale: "fr", type: "disjunction" }); // "rouge, vert ou bleu"
379
+ ```
410
380
 
411
381
  ## Cached Intl
412
382
 
@@ -438,39 +408,49 @@ pluralRules.select(2); // "other"
438
408
 
439
409
  ### Дополнительные возможности Intl
440
410
 
441
- ### `getIntlayerAsync(dictionaryKey, locale?, plugins?)`
411
+ #### `Intl.DisplayNames`
442
412
 
443
- Асинхронно получает контент из удалённого словаря:
413
+ Для локализованных названий языков, регионов, валют и письменностей:
444
414
 
445
415
  ```ts
446
- import { getIntlayerAsync } from "intlayer";
416
+ import { Intl } from "intlayer";
447
417
 
448
- const content = await getIntlayerAsync("common", "fr");
418
+ const languageNames = new Intl.DisplayNames("en", { type: "language" });
419
+ languageNames.of("fr"); // "French"
420
+
421
+ const regionNames = new Intl.DisplayNames("fr", { type: "region" });
422
+ regionNames.of("US"); // "États-Unis"
449
423
  ```
450
424
 
451
- - **dictionaryKey**: Ключ словаря для получения
452
- - **locale**: Необязательная локаль (по умолчанию используется настроенная локаль по умолчанию)
453
- - **plugins**: Необязательный массив пользовательских плагинов трансформации
425
+ #### `Intl.Collator`
454
426
 
455
- ## Форматтеры
427
+ Для локализованного сравнения и сортировки строк:
456
428
 
457
- Все ниже перечисленные помощники экспортируются из `intlayer`.
429
+ ```ts
430
+ import { Intl } from "intlayer";
458
431
 
459
- ### `number(value, options?)`
432
+ const collator = new Intl.Collator("de", {
433
+ sensitivity: "base",
434
+ numeric: true,
435
+ });
460
436
 
461
- Форматирует числовое значение с учетом локали, группировки и десятичных знаков.
437
+ const words = ["äpfel", "zebra", "100", "20"];
438
+ words.sort(collator.compare); // ["20", "100", "äpfel", "zebra"]
439
+ ```
462
440
 
463
- - **value**: `number | string`
464
- - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
441
+ #### `Intl.PluralRules`
465
442
 
466
- Примеры:
443
+ Для определения форм множественного числа в разных локалях:
467
444
 
468
445
  ```ts
469
- import { number } from "intlayer";
446
+ import { Intl } from "intlayer";
470
447
 
471
- number(123456.789); // "123,456.789" (в en-US)
472
- number("1000000", { locale: "fr" }); // "1 000 000"
473
- number(1234.5, { minimumFractionDigits: 2 }); // "1,234.50"
448
+ const pluralRules = new Intl.PluralRules("ar");
449
+ pluralRules.select(0); // "zero"
450
+ pluralRules.select(1); // "one"
451
+ pluralRules.select(2); // "two"
452
+ pluralRules.select(3); // "few"
453
+ pluralRules.select(11); // "many"
474
454
  ```
475
455
 
476
456
  ## Утилиты Локализации