@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
@@ -49,37 +49,6 @@ author: aymericzip
49
49
 
50
50
  <TOC/>
51
51
 
52
- ## Огляд
53
-
54
- Intlayer надає набір легких хелперів, побудованих поверх рідних API `Intl`, а також кешований обгорток `Intl`, щоб уникнути повторного створення важких форматерів. Ці утиліти повністю враховують локаль і можуть використовуватися з основного пакета `intlayer`.
55
-
56
- ### Імпорт
57
-
58
- ```ts
59
- import {
60
- Intl,
61
- number,
62
- percentage,
63
- currency,
64
- date,
65
- relativeTime,
66
- units,
67
- compact,
68
- list,
69
- getLocaleName,
70
- getLocaleLang,
71
- getLocaleFromPath,
72
- getPathWithoutLocale,
73
- getLocalizedUrl,
74
- getHTMLTextDir,
75
- getContent,
76
- getTranslation,
77
- getIntlayer,
78
- } from "intlayer";
79
- ```
80
-
81
- If you are using React, hooks are also available; see `react-intlayer/format`.
82
-
83
52
  ## Cached Intl
84
53
 
85
54
  The exported `Intl` is a thin, cached wrapper around the global `Intl`. It memoizes instances of `NumberFormat`, `DateTimeFormat`, `RelativeTimeFormat`, `ListFormat`, `DisplayNames`, `Collator`, and `PluralRules`, which avoids rebuilding the same formatter repeatedly.
@@ -116,51 +85,6 @@ pluralRules.select(1); // "one"
116
85
  pluralRules.select(2); // "інше"
117
86
  ```
118
87
 
119
- ### `Intl.DisplayNames`
120
-
121
- Для локалізованих назв мов, регіонів, валют та писемностей:
122
-
123
- ```ts
124
- import { Intl } from "intlayer";
125
-
126
- const languageNames = new Intl.DisplayNames("en", { type: "language" });
127
- languageNames.of("fr"); // "французька"
128
-
129
- const regionNames = new Intl.DisplayNames("fr", { type: "region" });
130
- regionNames.of("US"); // "Сполучені Штати"
131
- ```
132
-
133
- ### `Intl.Collator`
134
-
135
- Для порівняння рядків та сортування з урахуванням локалі:
136
-
137
- ```ts
138
- import { Intl } from "intlayer";
139
-
140
- const collator = new Intl.Collator("de", {
141
- sensitivity: "base",
142
- numeric: true,
143
- });
144
-
145
- const words = ["äpfel", "zebra", "100", "20"];
146
- words.sort(collator.compare); // ["20", "100", "äpfel", "zebra"]
147
- ```
148
-
149
- ### `Intl.PluralRules`
150
-
151
- Для визначення форм множини в різних локалях:
152
-
153
- ```ts
154
- import { Intl } from "intlayer";
155
-
156
- const pluralRules = new Intl.PluralRules("ar");
157
- pluralRules.select(0); // "нуль"
158
- pluralRules.select(1); // "один"
159
- pluralRules.select(2); // "два"
160
- pluralRules.select(3); // "кілька"
161
- pluralRules.select(11); // "багато"
162
- ```
163
-
164
88
  ## Утиліти локалей
165
89
 
166
90
  ### `getLocaleName(displayLocale, targetLocale?)`
@@ -178,22 +102,6 @@ getLocaleName("de", "es"); // іспанською: "alemán"
178
102
  - **displayLocale**: Локаль, для якої потрібно отримати назву
179
103
  - **targetLocale**: Локаль, в якій відображається назва (за замовчуванням displayLocale)
180
104
 
181
- ### `getLocaleFromPath(inputUrl)`
182
-
183
- Витягує сегмент локалі з URL або шляху:
184
-
185
- ```ts
186
- import { getLocaleFromPath } from "intlayer";
187
-
188
- getLocaleFromPath("/en/dashboard"); // "en"
189
- getLocaleFromPath("/fr/dashboard"); // "fr"
190
- getLocaleFromPath("/dashboard"); // "en" (default locale)
191
- getLocaleFromPath("https://example.com/es/about"); // "es"
192
- ```
193
-
194
- - **inputUrl**: Повний рядок URL або шлях (pathname) для обробки
195
- - **returns**: Виявлена локаль або локаль за замовчуванням, якщо локаль не знайдена
196
-
197
105
  ### `getLocalizedUrl(url, currentLocale, locales?, defaultLocale?, prefixDefault?)`
198
106
 
199
107
  Генерує локалізований URL для поточної локалі:
@@ -212,21 +120,6 @@ getLocalizedUrl("https://example.com/about", "fr", ["en", "fr"], "en", true); //
212
120
  - **defaultLocale**: Необов'язкова локаль за замовчуванням (за замовчуванням, сконфігурована локаль за замовчуванням)
213
121
  - **prefixDefault**: Чи додавати префікс для локалі за замовчуванням (за замовчуванням, сконфігуроване значення)
214
122
 
215
- ### `getHTMLTextDir(locale?)`
216
-
217
- Повертає напрямок тексту для локалі:
218
-
219
- ```ts
220
- import { getHTMLTextDir } from "intlayer";
221
-
222
- getHTMLTextDir("en-US"); // повертає "ltr"
223
- getHTMLTextDir("ar"); // повертає "rtl"
224
- getHTMLTextDir("he"); // повертає "rtl"
225
- ```
226
-
227
- - **locale**: Локаль, для якої потрібно отримати напрямок тексту (за замовчуванням, поточна локаль)
228
- - **повертає**: `"ltr"`, `"rtl"`, або `"auto"`
229
-
230
123
  ### `getContent(node, nodeProps, locale?)`
231
124
 
232
125
  Перетворює вузол контенту за допомогою всіх доступних плагінів (translation, enumeration, insertion тощо):
@@ -281,25 +174,6 @@ number("1000000", { locale: "fr" }); // "1 000 000"
281
174
  number(1234.5, { minimumFractionDigits: 2 }); // "1,234.50"
282
175
  ```
283
176
 
284
- ### `percentage(value, options?)`
285
-
286
- Форматує число у рядок відсотків.
287
-
288
- Поведінка: значення більше за 1 інтерпретується як повні відсотки та нормалізується (наприклад, `25` → `25%`, `0.25` → `25%`).
289
-
290
- - **value**: `number | string`
291
- - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
292
-
293
- Приклади:
294
-
295
- ```ts
296
- import { percentage } from "intlayer";
297
-
298
- percentage(0.25); // "25%"
299
- percentage(25); // "25%"
300
- percentage(0.237, { minimumFractionDigits: 1 }); // "23.7%"
301
- ```
302
-
303
177
  ### `currency(value, options?)`
304
178
 
305
179
  Форматує значення як локалізовану валюту. За замовчуванням `USD` з двома знаками після коми.
@@ -317,23 +191,6 @@ currency(1234.5, { currency: "EUR" }); // "€1,234.50"
317
191
  currency("5000", { locale: "fr", currency: "CAD", currencyDisplay: "code" }); // "5 000,00 CAD"
318
192
  ```
319
193
 
320
- ### `date(date, optionsOrPreset?)`
321
-
322
- Форматує значення дати/часу за допомогою `Intl.DateTimeFormat`.
323
-
324
- - **date**: `Date | string | number`
325
- - **optionsOrPreset**: `Intl.DateTimeFormatOptions & { locale?: LocalesValues }` або один із пресетів:
326
- - Presets: `"short" | "long" | "dateOnly" | "timeOnly" | "full"`
327
-
328
- Приклади:
329
-
330
- ```ts
331
- import { date } from "intlayer";
332
-
333
- date(new Date(), "short"); // наприклад: "08/02/25, 14:30"
334
- date("2025-08-02T14:30:00Z", { locale: "fr", month: "long", day: "numeric" }); // "2 août"
335
- ```
336
-
337
194
  ### `relativeTime(from, to = new Date(), options?)`
338
195
 
339
196
  Форматує відносний час між двома моментами за допомогою `Intl.RelativeTimeFormat`.
@@ -375,21 +232,9 @@ units(5, { unit: "kilometer", unitDisplay: "long", locale: "en-GB" }); // "5 к
375
232
  units(1024, { unit: "byte", unitDisplay: "narrow" }); // "1,024B" (залежить від локалі)
376
233
  ```
377
234
 
378
- ### `compact(value, options?)`
379
-
380
- Форматує число з використанням компактної нотації (наприклад, `1.2K`, `1M`).
235
+ ## Vanilla JS / Node.js Formatters
381
236
 
382
- - **value**: `number | string`
383
- - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }` (використовує `notation: 'compact'` під капотом)
384
-
385
- Приклади:
386
-
387
- ```ts
388
- import { compact } from "intlayer";
389
-
390
- compact(1200); // результат: "1.2K"
391
- compact("1000000", { locale: "fr", compactDisplay: "long" }); // результат: "1 million"
392
- ```
237
+ Для контекстів без фреймворку імпортуйте форматери безпосередньо з `intlayer`. Зверніть увагу, що ви повинні передати locale вручну.
393
238
 
394
239
  ### `list(values, options?)`
395
240
 
@@ -410,6 +255,114 @@ list(["red", "green", "blue"], { locale: "fr", type: "disjunction" }); // "rouge
410
255
  list([1, 2, 3], { type: "unit" }); // "1, 2, 3"
411
256
  ```
412
257
 
258
+ ### Функції форматування
259
+
260
+ #### `number(value, options?)`
261
+
262
+ Форматує числове значення з врахуванням локалі для групування та десяткових знаків.
263
+
264
+ - **value**: `number | string`
265
+ - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
266
+
267
+ ```ts
268
+ number(123456.789); // "123,456.789" (in en-US)
269
+ number("1000000", { locale: "fr" }); // "1 000 000"
270
+ number(1234.5, { minimumFractionDigits: 2 }); // "1,234.50"
271
+ ```
272
+
273
+ #### `percentage(value, options?)`
274
+
275
+ Форматує число як рядок відсотка. Значення більше 1 нормалізуються (наприклад, `25` → `25%`, `0.25` → `25%`).
276
+
277
+ - **value**: `number | string`
278
+ - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
279
+
280
+ ```ts
281
+ percentage(0.25); // "25%"
282
+ percentage(25); // "25%"
283
+ percentage(0.237, { minimumFractionDigits: 1 }); // "23.7%"
284
+ ```
285
+
286
+ #### `currency(value, options?)`
287
+
288
+ Форматує значення як локалізовану валюту. За замовчуванням використовує `USD`.
289
+
290
+ - **value**: `number | string`
291
+ - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
292
+ - Common: `currency`, `currencyDisplay` (`"symbol" | "code" | "name"`)
293
+
294
+ ```ts
295
+ currency(1234.5, { currency: "EUR" }); // "€1,234.50"
296
+ currency("5000", { locale: "fr", currency: "CAD", currencyDisplay: "code" }); // "5 000,00 CAD"
297
+ ```
298
+
299
+ #### `date(date, optionsOrPreset?)`
300
+
301
+ Форматує значення дати/часу.
302
+
303
+ - **date**: `Date | string | number`
304
+ - **optionsOrPreset**: `Intl.DateTimeFormatOptions & { locale?: LocalesValues }` або preset: `"short" | "long" | "dateOnly" | "timeOnly" | "full"`
305
+
306
+ ```ts
307
+ date(new Date(), "short"); // наприклад, "08/02/25, 14:30"
308
+ date("2025-08-02T14:30:00Z", { locale: "fr", month: "long", day: "numeric" }); // "2 août"
309
+ ```
310
+
311
+ #### `relativeTime(from, to?, options?)`
312
+
313
+ Форматує відносний час між двома моментами.
314
+
315
+ - **from**: `Date | string | number`
316
+ - **to**: `Date | string | number` (за замовчуванням `new Date()`)
317
+ - **options**: `{ locale?, unit?, numeric?, style? }`
318
+
319
+ ```ts
320
+ const now = new Date();
321
+ const in3Days = new Date(now.getTime() + 3 * 864e5);
322
+ relativeTime(now, in3Days, { unit: "day" }); // "через 3 дні"
323
+
324
+ const twoHoursAgo = new Date(now.getTime() - 2 * 3600e3);
325
+ relativeTime(now, twoHoursAgo, { unit: "hour", numeric: "auto" }); // "2 години тому"
326
+ ```
327
+
328
+ #### `units(value, options?)`
329
+
330
+ Форматує числове значення з одиницею виміру.
331
+
332
+ - **value**: `number | string`
333
+ - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
334
+ - Common: `unit` (e.g., `"kilometer"`, `"byte"`), `unitDisplay` (`"short" | "narrow" | "long"`)
335
+
336
+ ```ts
337
+ units(5, { unit: "kilometer", unitDisplay: "long", locale: "en-GB" }); // "5 kilometers"
338
+ units(1024, { unit: "byte", unitDisplay: "narrow" }); // "1,024B"
339
+ ```
340
+
341
+ #### `compact(value, options?)`
342
+
343
+ Форматує число за допомогою компактного запису.
344
+
345
+ - **value**: `number | string`
346
+ - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
347
+
348
+ ```ts
349
+ compact(1200); // "1.2K"
350
+ compact("1000000", { locale: "fr", compactDisplay: "long" }); // "1 million"
351
+ ```
352
+
353
+ #### `list(values, options?)`
354
+
355
+ Форматує масив у локалізований рядок списку.
356
+
357
+ - **values**: `(string | number)[]`
358
+ - **options**: `Intl.ListFormatOptions & { locale?: LocalesValues }`
359
+ - Поширені: `type` (`"conjunction" | "disjunction" | "unit"`), `style` (`"long" | "short" | "narrow"`)
360
+
361
+ ```ts
362
+ list(["apple", "banana", "orange"]); // "apple, banana, and orange"
363
+ list(["red", "green", "blue"], { locale: "fr", type: "disjunction" }); // "rouge, vert ou bleu"
364
+ ```
365
+
413
366
  ## Cached Intl
414
367
 
415
368
  Експортований `Intl` з `intlayer` — це кешований wrapper навколо глобального `Intl`. Він мемоізує екземпляри форматерів (`NumberFormat`, `DateTimeFormat` тощо), щоб уникнути їхнього повторного створення та поліпшити продуктивність.
@@ -440,11 +393,19 @@ pluralRules.select(2); // "other"
440
393
 
441
394
  ### Додаткові функції Intl
442
395
 
443
- ## Примітки
396
+ #### `Intl.DisplayNames`
444
397
 
445
- - Усі утиліти приймають вхідні значення як `string`; всередині вони приводяться до чисел або дат.
446
- - Якщо локаль не вказана, за замовчуванням використовується налаштована вами `internationalization.defaultLocale`.
447
- - Ці утиліти, тонкі обгортки; для просунутого форматування передавайте стандартні опції `Intl`.
398
+ Для локалізованих назв мов, регіонів, валют та письмових систем:
399
+
400
+ ```ts
401
+ import { Intl } from "intlayer";
402
+
403
+ const languageNames = new Intl.DisplayNames("en", { type: "language" });
404
+ languageNames.of("fr"); // "French"
405
+
406
+ const regionNames = new Intl.DisplayNames("fr", { type: "region" });
407
+ regionNames.of("US"); // "États-Unis"
408
+ ```
448
409
 
449
410
  #### `Intl.Collator`
450
411
 
@@ -491,33 +452,15 @@ getLocaleName("en", "fr"); // "anglais"
491
452
  getLocaleName("de", "es"); // "alemán"
492
453
  ```
493
454
 
494
- ## Точки входу та повторні експорти (`@index.ts`)
495
-
496
- Форматери містяться в core-пакеті і реекспортуються з пакетів вищого рівня, щоб зробити імпорти зручними в різних середовищах виконання:
455
+ ### `getLocaleLang(locale?)`
497
456
 
498
- Приклади:
457
+ Витягує код мови з рядка локалі:
499
458
 
500
459
  ```ts
501
- // Код додатку (рекомендовано)
502
- import {
503
- number,
504
- currency,
505
- date,
506
- relativeTime,
507
- units,
508
- compact,
509
- list,
510
- Intl,
511
- getLocaleName,
512
- getLocaleLang,
513
- getLocaleFromPath,
514
- getPathWithoutLocale,
515
- getLocalizedUrl,
516
- getHTMLTextDir,
517
- getContent,
518
- getTranslation,
519
- getIntlayer,
520
- } from "intlayer";
460
+ import { getLocaleLang } from "intlayer";
461
+
462
+ getLocaleLang("en-US"); // "en"
463
+ getLocaleLang("fr-CA"); // "fr"
521
464
  ```
522
465
 
523
466
  ### `getLocaleFromPath(inputUrl)`
@@ -247,6 +247,158 @@ bun x intlayer dictionary push -d my-first-dictionary-key --env production
247
247
 
248
248
  Потім ви зможете переглядати та керувати своїм словником у [Intlayer CMS](https://app.intlayer.org/content).
249
249
 
250
+ ## Програмний доступ за допомогою `@intlayer/api` SDK
251
+
252
+ Крім CLI і візуального редактора, Intlayer поставляється з типізованим SDK у пакеті [`@intlayer/api`](https://www.npmjs.com/package/@intlayer/api). Це дозволяє вам розглядати CMS як **headless content database**: ви можете отримувати проекти, отримувати словники та безпосередньо змінювати їх з вашого власного додатку, скриптів або CI pipeline.
253
+
254
+ SDK обробляє автентифікацію за вас. Доки ваші `clientId` і `clientSecret` доступні (у вашій конфігурації Intlayer або середовищі), він автоматично отримує та оновлює OAuth2 access token та підписує кожен запит.
255
+
256
+ ### Установка
257
+
258
+ ```bash packageManager="npm"
259
+ npm install @intlayer/api
260
+ ```
261
+
262
+ ```bash packageManager="yarn"
263
+ yarn add @intlayer/api
264
+ ```
265
+
266
+ ```bash packageManager="pnpm"
267
+ pnpm add @intlayer/api
268
+ ```
269
+
270
+ ```bash packageManager="bun"
271
+ bun add @intlayer/api
272
+ ```
273
+
274
+ ### Як це працює: authenticator + endpoints
275
+
276
+ SDK розділений на **два окремі імпорти** навмисне, щоб зберегти ваш bundle компактним:
277
+
278
+ 1. `createIntlayerCMS` — створює легкий **authenticator**. Він містить лише облікові дані та керований токен доступу; він нічого не знає про будь-який конкретний домен.
279
+ 2. `dictionaryEndpoint`, `projectEndpoint`, … — привʼязки **endpoint** для кожного домену, кожна імпортується з власного підпапки (`@intlayer/api/dictionary`, `@intlayer/api/project`, …). Ви передаєте authenticator потрібному вам endpoint.
280
+
281
+ Оскільки кожний endpoint імпортується окремо, ваш bundle містить лише домени, які ви насправді використовуєте — імпортування `dictionaryEndpoint` ніколи не потягне за собою project, AI або будь-який інший клієнт домену.
282
+
283
+ ```typescript fileName="cms.ts" codeFormat="typescript"
284
+ import { createIntlayerCMS } from "@intlayer/api";
285
+
286
+ // Конфігурація є необов'язковою: якщо її опущено, облікові дані читаються з
287
+ // `@intlayer/config/built`, що розв'язує змінні середовища INTLAYER_CLIENT_ID та
288
+ // INTLAYER_CLIENT_SECRET.
289
+ export const cmsAuthenticator = createIntlayerCMS();
290
+ ```
291
+
292
+ > [!WARNING]
293
+ > Облікові дані CMS (`clientId` / `clientSecret`) надають **доступ до запису** вашого контенту. Завжди створюйте authenticator лише на **серверній стороні** (server actions, route handlers, scripts, CI). Ніколи не імпортуйте його в код на стороні клієнта та не розкривайте ваші облікові дані браузеру.
294
+
295
+ Якщо ви воліте не покладатися на конфігурацію на етапі збирання, передайте облікові дані явно:
296
+
297
+ ```typescript fileName="cms.ts" codeFormat="typescript"
298
+ import { createIntlayerCMS } from "@intlayer/api";
299
+
300
+ export const cmsAuthenticator = createIntlayerCMS({
301
+ editor: {
302
+ clientId: process.env.INTLAYER_CLIENT_ID,
303
+ clientSecret: process.env.INTLAYER_CLIENT_SECRET,
304
+ // Необов'язково, для самостійно розміщених backend:
305
+ // backendURL: process.env.INTLAYER_BACKEND_URL,
306
+ },
307
+ });
308
+ ```
309
+
310
+ > Отримайте свої облікові дані, створивши новий ключ доступу в [Intlayer Dashboard - Projects](https://app.intlayer.org/projects).
311
+
312
+ ### Завантажити проекти
313
+
314
+ ```typescript fileName="projects.ts" codeFormat="typescript"
315
+ import { createIntlayerCMS } from "@intlayer/api";
316
+ import { projectEndpoint } from "@intlayer/api/project";
317
+
318
+ const cmsAuthenticator = createIntlayerCMS();
319
+
320
+ // Список проектів, доступних з вашими облікові даними
321
+ const { data: projects } =
322
+ await projectEndpoint(cmsAuthenticator).getProjects();
323
+
324
+ // Читання агрегованих інформацій про локалізацію вибраного проекту
325
+ const { data: insights } =
326
+ await projectEndpoint(cmsAuthenticator).getProjectInsights();
327
+ ```
328
+
329
+ ### Отримання словників
330
+
331
+ ```typescript fileName="read-dictionaries.ts" codeFormat="typescript"
332
+ import { createIntlayerCMS } from "@intlayer/api";
333
+ import { dictionaryEndpoint } from "@intlayer/api/dictionary";
334
+
335
+ const cmsAuthenticator = createIntlayerCMS();
336
+
337
+ // Список усіх віддалених словників проекту
338
+ const { data: dictionaries } =
339
+ await dictionaryEndpoint(cmsAuthenticator).getDictionaries();
340
+
341
+ // Або отримайте один словник за ключем
342
+ const { data: dictionary } = await dictionaryEndpoint(
343
+ cmsAuthenticator
344
+ ).getDictionary("my-first-dictionary-key");
345
+ ```
346
+
347
+ ### Отправка та оновлення словників
348
+
349
+ Використовуйте CMS як базу даних для запису вмісту назад:
350
+
351
+ ```typescript fileName="write-dictionaries.ts" codeFormat="typescript"
352
+ import { createIntlayerCMS } from "@intlayer/api";
353
+ import { dictionaryEndpoint } from "@intlayer/api/dictionary";
354
+
355
+ const cmsAuthenticator = createIntlayerCMS();
356
+
357
+ // Створення нового словника
358
+ await dictionaryEndpoint(cmsAuthenticator).addDictionary({
359
+ key: "my-first-dictionary-key",
360
+ content: { title: "Hello world" },
361
+ });
362
+
363
+ // Upsert пакету словників (створення або оновлення в одному викликі)
364
+ await dictionaryEndpoint(cmsAuthenticator).pushDictionaries([
365
+ { key: "home", content: { title: "Home" } },
366
+ { key: "about", content: { title: "About" } },
367
+ ]);
368
+
369
+ // Оновлення існуючого словника
370
+ await dictionaryEndpoint(cmsAuthenticator).updateDictionary({
371
+ id: "<dictionary-id>",
372
+ key: "home",
373
+ content: { title: "Updated title" },
374
+ });
375
+ ```
376
+
377
+ > Порада: повторно використовуйте прив'язану endpoint, щоб уникнути повторень:
378
+ >
379
+ > ```typescript codeFormat="typescript"
380
+ > const dictionary = dictionaryEndpoint(cmsAuthenticator);
381
+ > await dictionary.pushDictionaries([myDictionary]);
382
+ > const { data } = await dictionary.getDictionaries();
383
+ > ```
384
+
385
+ ### Вилучення одного методу
386
+
387
+ Кожен метод endpoint уже автентифікований та самостійний (він має власну обробку токена), тому ви можете вилучити один і передавати його навколо — наприклад, щоб інжектувати його як залежність:
388
+
389
+ ```typescript fileName="push.ts" codeFormat="typescript"
390
+ import { createIntlayerCMS } from "@intlayer/api";
391
+ import { dictionaryEndpoint } from "@intlayer/api/dictionary";
392
+
393
+ const dictionary = dictionaryEndpoint(createIntlayerCMS());
394
+
395
+ // Уже автентифіковано — автоматично оновлює токен при кожному виклику
396
+ export const pushDictionaries = dictionary.pushDictionaries;
397
+
398
+ // Використання
399
+ await pushDictionaries([{ key: "home", content: { title: "Home" } }]);
400
+ ```
401
+
250
402
  ## Live Sync
251
403
 
252
404
  Live Sync дозволяє вашому застосунку відображати зміни контенту з CMS під час виконання. Немає потреби у перебудові або повторному розгортанні. Коли увімкнено, оновлення передаються на сервер Live Sync, який оновлює словники, які читає ваш застосунок.
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  createdAt: 2025-04-18
3
3
  updatedAt: 2026-05-31
4
- title: "Angular 21 i18n - Повний посібник з перекладу вашого застосунку"
5
- description: "Більше ніякого i18next. Посібник 2026 зі створення багатомовного (i18n) застосунку Angular 21. Перекладайте за допомогою ШІ-агентів та оптимізуйте розмір бандлу, SEO та продуктивність."
4
+ title: "Angular 22 i18n - Повний посібник з перекладу вашого застосунку"
5
+ description: "Більше ніякого i18next. Посібник 2026 зі створення багатомовного (i18n) застосунку Angular 22. Перекладайте за допомогою ШІ-агентів та оптимізуйте розмір бандлу, SEO та продуктивність."
6
6
  keywords:
7
7
  - Інтернаціоналізація
8
8
  - Документація
@@ -13,8 +13,8 @@ slugs:
13
13
  - doc
14
14
  - environment
15
15
  - angular
16
- applicationTemplate: https://github.com/aymericzip/intlayer-angular-21-template
17
- applicationShowcase: https://intlayer-angular-21-template.vercel.app/
16
+ applicationTemplate: https://github.com/aymericzip/intlayer-angular-22-template
17
+ applicationShowcase: https://intlayer-angular-22-template.vercel.app/
18
18
  history:
19
19
  - version: 8.9.0
20
20
  date: 2026-05-04
@@ -31,7 +31,7 @@ history:
31
31
  author: aymericzip
32
32
  ---
33
33
 
34
- # Перекладіть ваш вебсайт Angular 21 (Vite) за допомогою Intlayer | Інтернаціоналізація (i18n)
34
+ # Перекладіть ваш вебсайт Angular 22 (Vite) за допомогою Intlayer | Інтернаціоналізація (i18n)
35
35
 
36
36
  ## Зміст
37
37
 
@@ -94,7 +94,7 @@ Intlayer оптимізовано для ідеальної роботи з Angu
94
94
  <Tab label="Код" value="code">
95
95
 
96
96
  <iframe
97
- src="https://ide.intlayer.org/aymericzip/intlayer-angular-21-template?file=intlayer.config.ts"
97
+ src="https://ide.intlayer.org/aymericzip/intlayer-angular-22-template?file=intlayer.config.ts"
98
98
  className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
99
99
  title="Demo CodeSandbox - Як інтернаціоналізувати ваш додаток за допомогою Intlayer"
100
100
  sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
@@ -105,7 +105,7 @@ Intlayer оптимізовано для ідеальної роботи з Angu
105
105
  <Tab label="Демо" value="demo">
106
106
 
107
107
  <iframe
108
- src="https://intlayer-angular-21-template.vercel.app/"
108
+ src="https://intlayer-angular-22-template.vercel.app/"
109
109
  className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
110
110
  title="Demo - intlayer-angular-template"
111
111
  sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
@@ -115,7 +115,7 @@ Intlayer оптимізовано для ідеальної роботи з Angu
115
115
  </Tab>
116
116
  </Tabs>
117
117
 
118
- Перегляньте [Шаблон Додатку](https://github.com/aymericzip/intlayer-angular-21-template) на GitHub.
118
+ Перегляньте [Шаблон Додатку](https://github.com/aymericzip/intlayer-angular-22-template) на GitHub.
119
119
 
120
120
  <Steps>
121
121
 
@@ -203,7 +203,7 @@ export default config;
203
203
 
204
204
  <Step number={3} title="Інтеграція Intlayer у вашу конфігурацію Angular">
205
205
 
206
- Щоб інтегрувати Intlayer з Angular CLI, вам потрібно використовувати кастомний збирач. У цьому посібнику передбачається, що ви використовуєте Vite/esbuild (за замовчуванням для проєктів Angular 21).
206
+ Щоб інтегрувати Intlayer з Angular CLI, вам потрібно використовувати кастомний збирач. У цьому посібнику передбачається, що ви використовуєте Vite/esbuild (за замовчуванням для проєктів Angular 22).
207
207
 
208
208
  Спершу змініть ваш `angular.json` для використання користувацького esbuild. Оновіть конфігурації `build` та `serve`:
209
209
 
@@ -42,32 +42,7 @@ history:
42
42
  author: aymericzip
43
43
  ---
44
44
 
45
- # Перекладіть ваш сайт на Next.js 14 та App Router за допомогою Intlayer | Інтернаціоналізація (i18n)
46
-
47
- <Tabs defaultTab="code">
48
- <Tab label="Код" value="code">
49
-
50
- <iframe
51
- src="https://ide.intlayer.org/aymericzip/intlayer-next-14-template?file=intlayer.config.ts"
52
- className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
53
- title="Демонстрація CodeSandbox. Як інтернаціоналізувати ваш додаток за допомогою Intlayer"
54
- sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
55
- loading="lazy"
56
- />
57
-
58
- </Tab>
59
- <Tab label="Демо" value="demo">
60
-
61
- <iframe
62
- src="https://intlayer-next-14-template.vercel.app"
63
- className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
64
- title="Демо - intlayer-next-14-template"
65
- sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
66
- loading="lazy"
67
- />
68
-
69
- </Tab>
70
- </Tabs>
45
+ # Перекладіть ваш веб-сайт Next.js 14 та App Router за допомогою Intlayer | Інтернаціоналізація (i18n)
71
46
 
72
47
  ## Зміст
73
48