@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
@@ -137,45 +137,40 @@ const MyComponent = () => {
137
137
  };
138
138
  ```
139
139
 
140
- ## Intl được lưu trong bộ nhớ đệm
140
+ ### Hook `useIntl`
141
141
 
142
- `Intl` được xuất ra một wrapper mỏng, được lưu trong bộ nhớ đệm quanh `Intl` toàn cục. ghi nhớ các thể hiện của `NumberFormat`, `DateTimeFormat`, `RelativeTimeFormat`, `ListFormat`, `DisplayNames`, `Collator`, `PluralRules`, giúp tránh việc xây dựng lại cùng một bộ định dạng nhiều lần.
142
+ Hook `useIntl` cung cấp quyền truy cập trực tiếp vào một đối tượng `Intl` được ràng buộc với locale. Điều này hữu ích khi bạn cần toàn bộ API `Intl` (ví dụ: `DisplayNames`, `Collator`, `PluralRules`) với việc tiêm locale tự động.
143
143
 
144
- Vì việc tạo bộ định dạng khá tốn kém, việc lưu trong bộ nhớ đệm này cải thiện hiệu suất mà không làm thay đổi hành vi. Wrapper này cung cấp cùng API như `Intl` gốc, nên cách sử dụng hoàn toàn giống nhau.
145
-
146
- - Việc lưu trong bộ nhớ đệm là theo từng tiến trình và hoàn toàn minh bạch với người gọi.
147
-
148
- > Nếu `Intl.DisplayNames` không có sẵn trong môi trường, một cảnh báo chỉ dành cho nhà phát triển sẽ được in ra một lần (cân nhắc sử dụng polyfill).
149
-
150
- Ví dụ:
144
+ ```tsx
145
+ import { useIntl } from "react-intlayer/format";
151
146
 
152
- ```ts
153
- import { Intl } from "intlayer";
147
+ const MyComponent = () => {
148
+ const intl = useIntl(); // sử dụng locale từ context
154
149
 
155
- // Định dạng số
156
- const numberFormat = new Intl.NumberFormat("en-GB", {
157
- style: "currency",
158
- currency: "GBP",
159
- });
160
- numberFormat.format(1234.5); // "£1,234.50"
150
+ // API Intl tiêu chuẩn, nhưng locale được tiêm tự động khi undefined
151
+ const formatted = new intl.NumberFormat(undefined, {
152
+ style: "currency",
153
+ currency: "USD",
154
+ }).format(123.45);
161
155
 
162
- // Tên hiển thị cho ngôn ngữ, vùng, v.v.
163
- const displayNames = new Intl.DisplayNames("fr", { type: "language" });
164
- displayNames.of("en"); // "anglais"
156
+ // Bạn vẫn thể ghi đè locale nếu cần
157
+ const date = new intl.DateTimeFormat("fr-FR").format(new Date());
165
158
 
166
- // Sắp xếp theo thứ tự
167
- const collator = new Intl.Collator("fr", { sensitivity: "base" });
168
- collator.compare("é", "e"); // 0 (bằng nhau)
159
+ // Truy cập các tính năng Intl khác
160
+ const displayNames = new intl.DisplayNames(undefined, { type: "language" });
161
+ const languageName = displayNames.of("fr"); // "French" (hoặc được bản địa hóa)
169
162
 
170
- // Quy tắc số nhiều
171
- const pluralRules = new Intl.PluralRules("fr");
172
- pluralRules.select(1); // "one"
173
- pluralRules.select(2); // "other"
163
+ return (
164
+ <div>
165
+ <p>{formatted}</p>
166
+ <p>{date}</p>
167
+ <p>{languageName}</p>
168
+ </div>
169
+ );
170
+ };
174
171
  ```
175
172
 
176
- ## Tiện ích Intl bổ sung
177
-
178
- Ngoài các trình trợ giúp định dạng, bạn cũng có thể sử dụng trực tiếp wrapper Intl đã được lưu trong bộ nhớ đệm cho các tính năng Intl khác:
173
+ ## Vue Formatters
179
174
 
180
175
  ### `Intl.DisplayNames`
181
176
 
@@ -281,6 +276,189 @@ pluralRules.select(3); // "few" // số ít
281
276
  pluralRules.select(11); // "many" // số nhiều
282
277
  ```
283
278
 
279
+ ### Các Hàm Định Dạng
280
+
281
+ #### `number(value, options?)`
282
+
283
+ Định dạng một giá trị số sử dụng nhóm và thập phân nhận biết địa phương.
284
+
285
+ - **value**: `number | string`
286
+ - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
287
+
288
+ ```ts
289
+ number(123456.789); // "123,456.789" (in en-US)
290
+ number("1000000", { locale: "fr" }); // "1 000 000"
291
+ number(1234.5, { minimumFractionDigits: 2 }); // "1,234.50"
292
+ ```
293
+
294
+ #### `percentage(value, options?)`
295
+
296
+ Định dạng một số dưới dạng chuỗi phần trăm. Các giá trị lớn hơn 1 được chuẩn hóa (ví dụ: `25` → `25%`, `0.25` → `25%`).
297
+
298
+ - **value**: `number | string`
299
+ - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
300
+
301
+ ```ts
302
+ percentage(0.25); // "25%"
303
+ percentage(25); // "25%"
304
+ percentage(0.237, { minimumFractionDigits: 1 }); // "23.7%"
305
+ ```
306
+
307
+ #### `currency(value, options?)`
308
+
309
+ Định dạng một giá trị dưới dạng tiền tệ được bản địa hóa. Mặc định là `USD`.
310
+
311
+ - **value**: `number | string`
312
+ - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
313
+ - Common: `currency`, `currencyDisplay` (`"symbol" | "code" | "name"`)
314
+
315
+ ```ts
316
+ currency(1234.5, { currency: "EUR" }); // "€1,234.50"
317
+ currency("5000", { locale: "fr", currency: "CAD", currencyDisplay: "code" }); // "5 000,00 CAD"
318
+ ```
319
+
320
+ #### `date(date, optionsOrPreset?)`
321
+
322
+ Định dạng một giá trị ngày/giờ.
323
+
324
+ - **date**: `Date | string | number`
325
+ - **optionsOrPreset**: `Intl.DateTimeFormatOptions & { locale?: LocalesValues }` hoặc preset: `"short" | "long" | "dateOnly" | "timeOnly" | "full"`
326
+
327
+ ```ts
328
+ date(new Date(), "short"); // ví dụ: "08/02/25, 14:30"
329
+ date("2025-08-02T14:30:00Z", { locale: "fr", month: "long", day: "numeric" }); // "2 août"
330
+ ```
331
+
332
+ #### `relativeTime(from, to?, options?)`
333
+
334
+ Định dạng thời gian tương đối giữa hai thời điểm.
335
+
336
+ - **from**: `Date | string | number`
337
+ - **to**: `Date | string | number` (mặc định là `new Date()`)
338
+ - **options**: `{ locale?, unit?, numeric?, style? }`
339
+
340
+ ```ts
341
+ const now = new Date();
342
+ const in3Days = new Date(now.getTime() + 3 * 864e5);
343
+ relativeTime(now, in3Days, { unit: "day" }); // "in 3 days"
344
+
345
+ const twoHoursAgo = new Date(now.getTime() - 2 * 3600e3);
346
+ relativeTime(now, twoHoursAgo, { unit: "hour", numeric: "auto" }); // "2 hours ago"
347
+ ```
348
+
349
+ #### `units(value, options?)`
350
+
351
+ Định dạng một giá trị số với một đơn vị.
352
+
353
+ - **value**: `number | string`
354
+ - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
355
+ - Common: `unit` (e.g., `"kilometer"`, `"byte"`), `unitDisplay` (`"short" | "narrow" | "long"`)
356
+
357
+ ```ts
358
+ units(5, { unit: "kilometer", unitDisplay: "long", locale: "en-GB" }); // "5 kilometers"
359
+ units(1024, { unit: "byte", unitDisplay: "narrow" }); // "1,024B"
360
+ ```
361
+
362
+ #### `compact(value, options?)`
363
+
364
+ Định dạng một số sử dụng ký hiệu compact.
365
+
366
+ - **value**: `number | string`
367
+ - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
368
+
369
+ ```ts
370
+ compact(1200); // "1.2K"
371
+ compact("1000000", { locale: "fr", compactDisplay: "long" }); // "1 million"
372
+ ```
373
+
374
+ #### `list(values, options?)`
375
+
376
+ Định dạng một mảng thành một chuỗi danh sách đã được bản địa hóa.
377
+
378
+ - **values**: `(string | number)[]`
379
+ - **options**: `Intl.ListFormatOptions & { locale?: LocalesValues }`
380
+ - Common: `type` (`"conjunction" | "disjunction" | "unit"`), `style` (`"long" | "short" | "narrow"`)
381
+
382
+ ```ts
383
+ list(["apple", "banana", "orange"]); // "apple, banana, and orange"
384
+ list(["red", "green", "blue"], { locale: "fr", type: "disjunction" }); // "rouge, vert ou bleu"
385
+ ```
386
+
387
+ ## Cached Intl
388
+
389
+ `Intl` được xuất từ `intlayer` là một wrapper được lưu trong bộ nhớ cache xung quanh `Intl` toàn cục. Nó memoizes các instance formatter (`NumberFormat`, `DateTimeFormat`, v.v.) để tránh việc xây dựng lại chúng liên tục, cải thiện hiệu suất.
390
+
391
+ ```ts
392
+ import { Intl } from "intlayer";
393
+
394
+ // Định dạng số
395
+ const numberFormat = new Intl.NumberFormat("en-GB", {
396
+ style: "currency",
397
+ currency: "GBP",
398
+ });
399
+ numberFormat.format(1234.5); // "£1,234.50"
400
+
401
+ // Hiển thị tên cho các ngôn ngữ, khu vực, v.v.
402
+ const displayNames = new Intl.DisplayNames("fr", { type: "language" });
403
+ displayNames.of("en"); // "anglais"
404
+
405
+ // Collation để sắp xếp
406
+ const collator = new Intl.Collator("fr", { sensitivity: "base" });
407
+ collator.compare("é", "e"); // 0 (bằng nhau)
408
+
409
+ // Quy tắc số nhiều
410
+ const pluralRules = new Intl.PluralRules("fr");
411
+ pluralRules.select(1); // "one"
412
+ pluralRules.select(2); // "other"
413
+ ```
414
+
415
+ ### Các Tính Năng Intl Bổ Sung
416
+
417
+ #### `Intl.DisplayNames`
418
+
419
+ Để có được tên được bản địa hóa của các ngôn ngữ, khu vực, tiền tệ và chữ viết:
420
+
421
+ ```ts
422
+ import { Intl } from "intlayer";
423
+
424
+ const languageNames = new Intl.DisplayNames("en", { type: "language" });
425
+ languageNames.of("fr"); // "French"
426
+
427
+ const regionNames = new Intl.DisplayNames("fr", { type: "region" });
428
+ regionNames.of("US"); // "États-Unis"
429
+ ```
430
+
431
+ #### `Intl.Collator`
432
+
433
+ Để so sánh và sắp xếp chuỗi ký tự theo locale:
434
+
435
+ ```ts
436
+ import { Intl } from "intlayer";
437
+
438
+ const collator = new Intl.Collator("de", {
439
+ sensitivity: "base",
440
+ numeric: true,
441
+ });
442
+
443
+ const words = ["äpfel", "zebra", "100", "20"];
444
+ words.sort(collator.compare); // ["20", "100", "äpfel", "zebra"]
445
+ ```
446
+
447
+ #### `Intl.PluralRules`
448
+
449
+ Để xác định các dạng số nhiều trong các locale khác nhau:
450
+
451
+ ```ts
452
+ import { Intl } from "intlayer";
453
+
454
+ const pluralRules = new Intl.PluralRules("ar");
455
+ pluralRules.select(0); // "zero"
456
+ pluralRules.select(1); // "one"
457
+ pluralRules.select(2); // "two"
458
+ pluralRules.select(3); // "few"
459
+ pluralRules.select(11); // "many"
460
+ ```
461
+
284
462
  ## Tiện ích Locale
285
463
 
286
464
  ### `getLocaleName(displayLocale, targetLocale?)`
@@ -419,8 +597,6 @@ const content = getTranslation(
419
597
  - **locale**: Locale mục tiêu (mặc định là locale cấu hình sẵn)
420
598
  - **fallback**: Có fallback về locale mặc định hay không (mặc định là true)
421
599
 
422
- ### Các tính năng Intl bổ sung
423
-
424
600
  ### `getIntlayer(dictionaryKey, locale?, plugins?)`
425
601
 
426
602
  Lấy và chuyển đổi nội dung từ một từ điển theo key:
@@ -436,283 +612,6 @@ const nestedContent = getIntlayer("common", "fr", customPlugins);
436
612
  - **locale**: Locale tùy chọn (mặc định là locale cấu hình sẵn)
437
613
  - **plugins**: Mảng tùy chọn các plugin chuyển đổi tùy chỉnh
438
614
 
439
- ## Bộ định dạng
440
-
441
- Tất cả các helper dưới đây được xuất khẩu từ `intlayer`.
442
-
443
- ### `number(value, options?)`
444
-
445
- Định dạng một giá trị số sử dụng nhóm và phần thập phân theo locale.
446
-
447
- - **value**: `number | string`
448
- - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
449
-
450
- Ví dụ:
451
-
452
- ```ts
453
- import { number } from "intlayer";
454
-
455
- number(123456.789); // "123,456.789" (trong en-US)
456
- number("1000000", { locale: "fr" }); // "1 000 000"
457
- number(1234.5, { minimumFractionDigits: 2 }); // "1,234.50"
458
- ```
459
-
460
- ### `percentage(value, options?)`
461
-
462
- Định dạng một số thành chuỗi phần trăm.
463
-
464
- Hành vi: các giá trị lớn hơn 1 được hiểu là phần trăm nguyên và được chuẩn hóa (ví dụ, `25` → `25%`, `0.25` → `25%`).
465
-
466
- - **value**: `number | string`
467
- - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
468
-
469
- Ví dụ:
470
-
471
- ```ts
472
- import { percentage } from "intlayer";
473
-
474
- percentage(0.25); // "25%"
475
- percentage(25); // "25%"
476
- percentage(0.237, { minimumFractionDigits: 1 }); // "23.7%"
477
- ```
478
-
479
- ### `currency(value, options?)`
480
-
481
- Định dạng một giá trị dưới dạng tiền tệ theo locale. Mặc định là `USD` với hai chữ số thập phân.
482
-
483
- - **value**: `number | string`
484
- - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
485
- - Các trường phổ biến: `currency` (ví dụ, `"EUR"`), `currencyDisplay` (`"symbol" | "code" | "name"`)
486
-
487
- Ví dụ:
488
-
489
- ```ts
490
- import { currency } from "intlayer";
491
-
492
- currency(1234.5, { currency: "EUR" }); // "€1,234.50"
493
- currency("5000", { locale: "fr", currency: "CAD", currencyDisplay: "code" }); // "5 000,00 CAD"
494
- ```
495
-
496
- ### `date(date, optionsOrPreset?)`
497
-
498
- Định dạng giá trị ngày/giờ với `Intl.DateTimeFormat`.
499
-
500
- - **date**: `Date | string | number`
501
- - **optionsOrPreset**: `Intl.DateTimeFormatOptions & { locale?: LocalesValues }` hoặc một trong các preset:
502
- - Preset: `"short" | "long" | "dateOnly" | "timeOnly" | "full"`
503
-
504
- Ví dụ:
505
-
506
- ```ts
507
- import { date } from "intlayer";
508
-
509
- date(new Date(), "short"); // ví dụ, "08/02/25, 14:30"
510
- date("2025-08-02T14:30:00Z", { locale: "fr", month: "long", day: "numeric" }); // "2 août"
511
- ```
512
-
513
- ### `relativeTime(from, to = new Date(), options?)`
514
-
515
- Định dạng thời gian tương đối giữa hai thời điểm với `Intl.RelativeTimeFormat`.
516
-
517
- - Truyền "now" làm đối số đầu tiên và mục tiêu làm đối số thứ hai để có cách diễn đạt tự nhiên.
518
- - **from**: `Date | string | number`
519
- - **to**: `Date | string | number` (mặc định là `new Date()`)
520
- - **options**: `{ locale?: LocalesValues; unit?: Intl.RelativeTimeFormatUnit; numeric?: Intl.RelativeTimeFormatNumeric; style?: Intl.RelativeTimeFormatStyle }`
521
- - Mặc định `unit` là `"second"`.
522
-
523
- Ví dụ:
524
-
525
- ```ts
526
- import { relativeTime } from "intlayer";
527
-
528
- const now = new Date();
529
- const in3Days = new Date(now.getTime() + 3 * 864e5);
530
- relativeTime(now, in3Days, { unit: "day" }); // "in 3 days"
531
-
532
- const twoHoursAgo = new Date(now.getTime() - 2 * 3600e3);
533
- relativeTime(now, twoHoursAgo, { unit: "hour", numeric: "auto" }); // "2 hours ago"
534
- ```
535
-
536
- ### `units(value, options?)`
537
-
538
- Định dạng một giá trị số thành chuỗi đơn vị được địa phương hóa sử dụng `Intl.NumberFormat` với `style: 'unit'`.
539
-
540
- - **value**: `number | string`
541
- - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
542
- - Các trường phổ biến: `unit` (ví dụ, `"kilometer"`, `"byte"`), `unitDisplay` (`"short" | "narrow" | "long"`)
543
- - Mặc định: `unit: 'day'`, `unitDisplay: 'short'`, `useGrouping: false`
544
-
545
- Ví dụ:
546
-
547
- ```ts
548
- import { units } from "intlayer";
549
-
550
- units(5, { unit: "kilometer", unitDisplay: "long", locale: "en-GB" }); // "5 kilometers"
551
- units(1024, { unit: "byte", unitDisplay: "narrow" }); // "1,024B" (phụ thuộc vào locale)
552
- ```
553
-
554
- ### `compact(value, options?)`
555
-
556
- Định dạng một số sử dụng ký hiệu rút gọn (ví dụ, `1.2K`, `1M`).
557
-
558
- - **value**: `number | string`
559
- - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }` (sử dụng `notation: 'compact'` bên trong)
560
-
561
- Ví dụ:
562
-
563
- ```ts
564
- import { compact } from "intlayer";
565
-
566
- compact(1200); // "1.2K"
567
- compact("1000000", { locale: "fr", compactDisplay: "long" }); // "1 million"
568
- ```
569
-
570
- ### `list(values, options?)`
571
-
572
- Định dạng một mảng các giá trị thành chuỗi danh sách được địa phương hóa sử dụng `Intl.ListFormat`.
573
-
574
- - **values**: `(string | number)[]`
575
- - **options**: `Intl.ListFormatOptions & { locale?: LocalesValues }`
576
- - Các trường phổ biến: `type` (`"conjunction" | "disjunction" | "unit"`), `style` (`"long" | "short" | "narrow"`)
577
- - Mặc định: `type: 'conjunction'`, `style: 'long'`
578
-
579
- Ví dụ:
580
-
581
- ```ts
582
- import { list } from "intlayer";
583
-
584
- list(["apple", "banana", "orange"]); // "apple, banana, and orange"
585
- list(["red", "green", "blue"], { locale: "fr", type: "disjunction" }); // "rouge, vert ou bleu"
586
- list([1, 2, 3], { type: "unit" }); // "1, 2, 3"
587
- ```
588
-
589
- ## Ghi chú
590
-
591
- - Tất cả các helper chấp nhận đầu vào kiểu `string`; chúng sẽ được ép kiểu nội bộ thành số hoặc ngày tháng.
592
- - Locale mặc định là `internationalization.defaultLocale` mà bạn đã cấu hình nếu không được cung cấp.
593
- - Các tiện ích này là các wrapper mỏng; để định dạng nâng cao, hãy truyền các tùy chọn tiêu chuẩn của `Intl`.
594
-
595
- ## Điểm vào và tái xuất (`@index.ts`)
596
-
597
- Các bộ định dạng nằm trong package core và được tái xuất từ các package cấp cao hơn để giữ cho việc import thuận tiện trên các runtime khác nhau:
598
-
599
- Ví dụ:
600
-
601
- ```ts
602
- // Mã ứng dụng (khuyến nghị)
603
- import {
604
- number,
605
- currency,
606
- date,
607
- relativeTime,
608
- units,
609
- compact,
610
- list,
611
- Intl,
612
- getLocaleName,
613
- getLocaleLang,
614
- getLocaleFromPath,
615
- getPathWithoutLocale,
616
- getLocalizedUrl,
617
- getHTMLTextDir,
618
- getContent,
619
- getTranslation,
620
- getIntlayer,
621
- } from "intlayer";
622
- ```
623
-
624
- ### React
625
-
626
- Các thành phần client:
627
-
628
- ```tsx
629
- import {
630
- useNumber,
631
- useCurrency,
632
- useDate,
633
- usePercentage,
634
- useCompact,
635
- useList,
636
- useRelativeTime,
637
- useUnit,
638
- } from "react-intlayer/format";
639
- // hoặc trong các ứng dụng Preact
640
- // "preact-intlayer/format";
641
- // hoặc trong các ứng dụng Next.js
642
- // "next-intlayer/client/format";
643
-
644
- const MyComponent = () => {
645
- const number = useNumber();
646
- const currency = useCurrency();
647
- const date = useDate();
648
- const percentage = usePercentage();
649
- const compact = useCompact();
650
- const list = useList();
651
- const relativeTime = useRelativeTime();
652
- const unit = useUnit();
653
-
654
- return (
655
- <div>
656
- <p>{number(123456.789)}</p>
657
- <p>{currency(1234.5, { currency: "EUR" })}</p>
658
- <p>{date(new Date(), "short")}</p>
659
- <p>{percentage(0.25)}</p>
660
- <p>{compact(1200)}</p>
661
- <p>{list(["apple", "banana", "orange"])}</p>
662
- <p>{relativeTime(new Date(), new Date() + 1000)}</p>
663
- <p>{unit(123456.789, { unit: "kilometer" })}</p>
664
- </div>
665
- );
666
- };
667
- ```
668
-
669
- Các thành phần server (hoặc runtime React Server):
670
-
671
- ```ts
672
- import {
673
- useNumber,
674
- useCurrency,
675
- useDate,
676
- usePercentage,
677
- useCompact,
678
- useList,
679
- useRelativeTime,
680
- useUnit,
681
- } from "react-intlayer/server/format";
682
- // hoặc trong các ứng dụng Next.js
683
- import {
684
- useNumber,
685
- useCurrency,
686
- useDate,
687
- usePercentage,
688
- useCompact,
689
- useList,
690
- useRelativeTime,
691
- useUnit,
692
- } from "next-intlayer/server/format";
693
- ```
694
-
695
- > Các hook đó sẽ lấy locale từ `IntlayerProvider` hoặc `IntlayerServerProvider`
696
-
697
- ### Vue
698
-
699
- Các component phía client:
700
-
701
- ```ts
702
- import {
703
- useNumber,
704
- useCurrency,
705
- useDate,
706
- usePercentage,
707
- useCompact,
708
- useList,
709
- useRelativeTime,
710
- useUnit,
711
- } from "vue-intlayer/format";
712
- ```
713
-
714
- > Các composable đó sẽ lấy locale từ `IntlayerProvider` được inject vào
715
-
716
615
  ## Ghi chú
717
616
 
718
617
  - Tất cả các helper chấp nhận `string` inputs; chúng được chuyển đổi nội bộ thành numbers hoặc dates.