@intlayer/docs 8.12.5-canary.0 → 9.0.0-canary.3

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 (429) hide show
  1. package/dist/cjs/generated/docs.entry.cjs +320 -0
  2. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  3. package/dist/esm/generated/docs.entry.mjs +320 -0
  4. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  5. package/dist/types/generated/docs.entry.d.ts +16 -0
  6. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  7. package/docs/ar/cli/doc-review.md +110 -4
  8. package/docs/ar/cli/index.md +1 -1
  9. package/docs/ar/cli/scan.md +1 -1
  10. package/docs/ar/configuration.md +36 -3
  11. package/docs/ar/dictionary/condition.md +167 -5
  12. package/docs/ar/dictionary/enumeration.md +540 -6
  13. package/docs/ar/dictionary/file.md +151 -1
  14. package/docs/ar/dictionary/gender.md +168 -7
  15. package/docs/ar/dictionary/nesting.md +173 -65
  16. package/docs/ar/dictionary/plurial.md +174 -5
  17. package/docs/ar/dictionary/translation.md +156 -2
  18. package/docs/ar/dynamic_dictionaries/collections.md +1 -1
  19. package/docs/ar/dynamic_dictionaries/dynamic_content.md +1 -1
  20. package/docs/ar/dynamic_dictionaries/index.md +1 -1
  21. package/docs/ar/dynamic_dictionaries/variants.md +1 -1
  22. package/docs/ar/intlayer_with_vite+react.md +31 -31
  23. package/docs/ar/plugins/sync-json.md +222 -49
  24. package/docs/ar/releases/v8.md +187 -1
  25. package/docs/ar/releases/v9.md +232 -0
  26. package/docs/bn/cli/index.md +1 -1
  27. package/docs/bn/cli/scan.md +1 -1
  28. package/docs/bn/configuration.md +36 -3
  29. package/docs/cs/cli/index.md +1 -1
  30. package/docs/cs/cli/scan.md +1 -1
  31. package/docs/cs/configuration.md +35 -2
  32. package/docs/de/cli/doc-review.md +110 -4
  33. package/docs/de/cli/index.md +1 -1
  34. package/docs/de/cli/scan.md +1 -1
  35. package/docs/de/configuration.md +35 -2
  36. package/docs/de/dictionary/condition.md +167 -5
  37. package/docs/de/dictionary/enumeration.md +777 -7
  38. package/docs/de/dictionary/file.md +151 -1
  39. package/docs/de/dictionary/gender.md +168 -7
  40. package/docs/de/dictionary/nesting.md +173 -65
  41. package/docs/de/dictionary/plurial.md +347 -7
  42. package/docs/de/dictionary/translation.md +156 -2
  43. package/docs/de/dynamic_dictionaries/collections.md +1 -1
  44. package/docs/de/dynamic_dictionaries/dynamic_content.md +1 -1
  45. package/docs/de/dynamic_dictionaries/index.md +1 -1
  46. package/docs/de/dynamic_dictionaries/variants.md +1 -1
  47. package/docs/de/intlayer_with_vite+react.md +48 -48
  48. package/docs/de/migration_from_i18next_to_intlayer.md +1 -1
  49. package/docs/de/migration_from_next-i18next_to_intlayer.md +1 -1
  50. package/docs/de/migration_from_next-intl_to_intlayer.md +1 -1
  51. package/docs/de/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
  52. package/docs/de/migration_from_react-i18next_to_intlayer.md +1 -1
  53. package/docs/de/migration_from_vue-i18n_to_intlayer.md +1 -1
  54. package/docs/de/plugins/sync-json.md +222 -49
  55. package/docs/de/releases/v8.md +197 -1
  56. package/docs/de/releases/v9.md +232 -0
  57. package/docs/en/CI_CD.md +7 -7
  58. package/docs/en/cli/ci.md +62 -8
  59. package/docs/en/cli/doc-review.md +110 -4
  60. package/docs/en/cli/index.md +1 -1
  61. package/docs/en/cli/scan.md +1 -1
  62. package/docs/en/compat/i18n-js.md +44 -0
  63. package/docs/en/compat/i18next.md +59 -0
  64. package/docs/en/compat/index.md +51 -0
  65. package/docs/en/compat/lingui.md +44 -0
  66. package/docs/en/compat/next-i18next.md +57 -0
  67. package/docs/en/compat/next-intl.md +59 -0
  68. package/docs/en/compat/next-translate.md +45 -0
  69. package/docs/en/compat/ngx-translate.md +45 -0
  70. package/docs/en/compat/nuxtjs-i18n.md +46 -0
  71. package/docs/en/compat/polyglot.md +45 -0
  72. package/docs/en/compat/react-i18next.md +58 -0
  73. package/docs/en/compat/react-intl.md +55 -0
  74. package/docs/en/compat/svelte-i18n.md +47 -0
  75. package/docs/en/compat/transloco.md +45 -0
  76. package/docs/en/compat/vue-i18n.md +58 -0
  77. package/docs/en/configuration.md +35 -2
  78. package/docs/en/dictionary/condition.md +163 -1
  79. package/docs/en/dictionary/enumeration.md +309 -7
  80. package/docs/en/dictionary/file.md +151 -1
  81. package/docs/en/dictionary/gender.md +162 -1
  82. package/docs/en/dictionary/nesting.md +173 -9
  83. package/docs/en/dictionary/plurial.md +155 -10
  84. package/docs/en/dictionary/translation.md +145 -52
  85. package/docs/en/dynamic_dictionaries/collections.md +1 -1
  86. package/docs/en/dynamic_dictionaries/dynamic_content.md +1 -1
  87. package/docs/en/dynamic_dictionaries/index.md +1 -1
  88. package/docs/en/dynamic_dictionaries/variants.md +1 -1
  89. package/docs/en/migration_from_i18next_to_intlayer.md +1 -1
  90. package/docs/en/migration_from_next-i18next_to_intlayer.md +1 -1
  91. package/docs/en/migration_from_next-intl_to_intlayer.md +1 -1
  92. package/docs/en/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
  93. package/docs/en/migration_from_react-i18next_to_intlayer.md +1 -1
  94. package/docs/en/migration_from_vue-i18n_to_intlayer.md +1 -1
  95. package/docs/en/plugins/sync-json.md +56 -2
  96. package/docs/en/releases/v8.md +187 -1
  97. package/docs/en/releases/v9.md +220 -0
  98. package/docs/en-GB/cli/doc-review.md +110 -4
  99. package/docs/en-GB/cli/index.md +1 -1
  100. package/docs/en-GB/cli/scan.md +1 -1
  101. package/docs/en-GB/configuration.md +35 -2
  102. package/docs/en-GB/dictionary/condition.md +364 -1
  103. package/docs/en-GB/dictionary/enumeration.md +577 -5
  104. package/docs/en-GB/dictionary/file.md +317 -1
  105. package/docs/en-GB/dictionary/gender.md +375 -2
  106. package/docs/en-GB/dictionary/nesting.md +368 -71
  107. package/docs/en-GB/dictionary/plurial.md +347 -7
  108. package/docs/en-GB/dictionary/translation.md +320 -32
  109. package/docs/en-GB/dynamic_dictionaries/collections.md +1 -1
  110. package/docs/en-GB/dynamic_dictionaries/dynamic_content.md +1 -1
  111. package/docs/en-GB/dynamic_dictionaries/index.md +1 -1
  112. package/docs/en-GB/dynamic_dictionaries/variants.md +1 -1
  113. package/docs/en-GB/plugins/sync-json.md +245 -13
  114. package/docs/en-GB/releases/v8.md +1 -1
  115. package/docs/en-GB/releases/v9.md +220 -0
  116. package/docs/es/cli/doc-review.md +110 -4
  117. package/docs/es/cli/index.md +1 -1
  118. package/docs/es/cli/scan.md +1 -1
  119. package/docs/es/configuration.md +36 -3
  120. package/docs/es/dictionary/condition.md +167 -5
  121. package/docs/es/dictionary/enumeration.md +537 -12
  122. package/docs/es/dictionary/file.md +151 -1
  123. package/docs/es/dictionary/gender.md +168 -7
  124. package/docs/es/dictionary/nesting.md +173 -65
  125. package/docs/es/dictionary/plurial.md +347 -7
  126. package/docs/es/dictionary/translation.md +156 -2
  127. package/docs/es/dynamic_dictionaries/collections.md +1 -1
  128. package/docs/es/dynamic_dictionaries/dynamic_content.md +1 -1
  129. package/docs/es/dynamic_dictionaries/index.md +1 -1
  130. package/docs/es/dynamic_dictionaries/variants.md +1 -1
  131. package/docs/es/migration_from_i18next_to_intlayer.md +1 -1
  132. package/docs/es/migration_from_next-i18next_to_intlayer.md +1 -1
  133. package/docs/es/migration_from_next-intl_to_intlayer.md +1 -1
  134. package/docs/es/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
  135. package/docs/es/migration_from_react-i18next_to_intlayer.md +1 -1
  136. package/docs/es/migration_from_vue-i18n_to_intlayer.md +1 -1
  137. package/docs/es/plugins/sync-json.md +222 -49
  138. package/docs/es/releases/v8.md +187 -1
  139. package/docs/es/releases/v9.md +228 -0
  140. package/docs/fr/cli/doc-review.md +110 -4
  141. package/docs/fr/cli/index.md +1 -1
  142. package/docs/fr/cli/scan.md +1 -1
  143. package/docs/fr/configuration.md +49 -16
  144. package/docs/fr/dictionary/condition.md +369 -6
  145. package/docs/fr/dictionary/enumeration.md +540 -6
  146. package/docs/fr/dictionary/file.md +151 -1
  147. package/docs/fr/dictionary/gender.md +168 -7
  148. package/docs/fr/dictionary/nesting.md +357 -86
  149. package/docs/fr/dictionary/plurial.md +174 -5
  150. package/docs/fr/dictionary/translation.md +156 -2
  151. package/docs/fr/dynamic_dictionaries/collections.md +1 -1
  152. package/docs/fr/dynamic_dictionaries/dynamic_content.md +1 -1
  153. package/docs/fr/dynamic_dictionaries/index.md +1 -1
  154. package/docs/fr/dynamic_dictionaries/variants.md +1 -1
  155. package/docs/fr/migration_from_i18next_to_intlayer.md +1 -1
  156. package/docs/fr/migration_from_next-i18next_to_intlayer.md +1 -1
  157. package/docs/fr/migration_from_next-intl_to_intlayer.md +1 -1
  158. package/docs/fr/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
  159. package/docs/fr/migration_from_react-i18next_to_intlayer.md +1 -1
  160. package/docs/fr/migration_from_vue-i18n_to_intlayer.md +1 -1
  161. package/docs/fr/plugins/sync-json.md +244 -12
  162. package/docs/fr/releases/v8.md +187 -1
  163. package/docs/fr/releases/v9.md +220 -0
  164. package/docs/hi/cli/doc-review.md +110 -4
  165. package/docs/hi/cli/index.md +1 -1
  166. package/docs/hi/cli/scan.md +1 -1
  167. package/docs/hi/configuration.md +49 -16
  168. package/docs/hi/dictionary/condition.md +167 -5
  169. package/docs/hi/dictionary/enumeration.md +540 -6
  170. package/docs/hi/dictionary/file.md +151 -1
  171. package/docs/hi/dictionary/gender.md +168 -7
  172. package/docs/hi/dictionary/nesting.md +173 -65
  173. package/docs/hi/dictionary/plurial.md +174 -5
  174. package/docs/hi/dictionary/translation.md +155 -5
  175. package/docs/hi/dynamic_dictionaries/collections.md +1 -1
  176. package/docs/hi/dynamic_dictionaries/dynamic_content.md +1 -1
  177. package/docs/hi/dynamic_dictionaries/index.md +1 -1
  178. package/docs/hi/dynamic_dictionaries/variants.md +1 -1
  179. package/docs/hi/plugins/sync-json.md +221 -48
  180. package/docs/hi/releases/v8.md +188 -2
  181. package/docs/hi/releases/v9.md +232 -0
  182. package/docs/id/cli/doc-review.md +110 -4
  183. package/docs/id/cli/index.md +1 -1
  184. package/docs/id/cli/scan.md +1 -1
  185. package/docs/id/configuration.md +35 -2
  186. package/docs/id/dictionary/condition.md +167 -5
  187. package/docs/id/dictionary/enumeration.md +540 -6
  188. package/docs/id/dictionary/file.md +318 -2
  189. package/docs/id/dictionary/gender.md +381 -8
  190. package/docs/id/dictionary/nesting.md +357 -86
  191. package/docs/id/dictionary/plurial.md +174 -5
  192. package/docs/id/dictionary/translation.md +156 -2
  193. package/docs/id/dynamic_dictionaries/collections.md +1 -1
  194. package/docs/id/dynamic_dictionaries/dynamic_content.md +1 -1
  195. package/docs/id/dynamic_dictionaries/index.md +1 -1
  196. package/docs/id/dynamic_dictionaries/variants.md +1 -1
  197. package/docs/id/plugins/sync-json.md +222 -49
  198. package/docs/id/releases/v8.md +191 -2
  199. package/docs/id/releases/v9.md +232 -0
  200. package/docs/it/cli/doc-review.md +110 -4
  201. package/docs/it/cli/index.md +1 -1
  202. package/docs/it/cli/scan.md +1 -1
  203. package/docs/it/configuration.md +49 -16
  204. package/docs/it/dictionary/condition.md +167 -5
  205. package/docs/it/dictionary/enumeration.md +540 -6
  206. package/docs/it/dictionary/file.md +318 -2
  207. package/docs/it/dictionary/gender.md +168 -7
  208. package/docs/it/dictionary/nesting.md +173 -65
  209. package/docs/it/dictionary/plurial.md +347 -7
  210. package/docs/it/dictionary/translation.md +156 -2
  211. package/docs/it/dynamic_dictionaries/collections.md +1 -1
  212. package/docs/it/dynamic_dictionaries/dynamic_content.md +1 -1
  213. package/docs/it/dynamic_dictionaries/index.md +1 -1
  214. package/docs/it/dynamic_dictionaries/variants.md +1 -1
  215. package/docs/it/intlayer_with_vite+react.md +0 -48
  216. package/docs/it/migration_from_i18next_to_intlayer.md +1 -1
  217. package/docs/it/migration_from_next-i18next_to_intlayer.md +1 -1
  218. package/docs/it/migration_from_next-intl_to_intlayer.md +1 -1
  219. package/docs/it/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
  220. package/docs/it/migration_from_react-i18next_to_intlayer.md +1 -1
  221. package/docs/it/migration_from_vue-i18n_to_intlayer.md +1 -1
  222. package/docs/it/plugins/sync-json.md +224 -51
  223. package/docs/it/releases/v8.md +200 -2
  224. package/docs/it/releases/v9.md +232 -0
  225. package/docs/ja/cli/doc-review.md +110 -4
  226. package/docs/ja/cli/index.md +1 -1
  227. package/docs/ja/cli/scan.md +1 -1
  228. package/docs/ja/configuration.md +50 -17
  229. package/docs/ja/dictionary/condition.md +167 -5
  230. package/docs/ja/dictionary/enumeration.md +540 -6
  231. package/docs/ja/dictionary/file.md +151 -1
  232. package/docs/ja/dictionary/gender.md +168 -7
  233. package/docs/ja/dictionary/nesting.md +173 -65
  234. package/docs/ja/dictionary/plurial.md +174 -5
  235. package/docs/ja/dictionary/translation.md +169 -8
  236. package/docs/ja/dynamic_dictionaries/collections.md +1 -1
  237. package/docs/ja/dynamic_dictionaries/dynamic_content.md +1 -1
  238. package/docs/ja/dynamic_dictionaries/index.md +1 -1
  239. package/docs/ja/dynamic_dictionaries/variants.md +1 -1
  240. package/docs/ja/intlayer_with_vite+react.md +290 -0
  241. package/docs/ja/migration_from_i18next_to_intlayer.md +1 -1
  242. package/docs/ja/migration_from_next-i18next_to_intlayer.md +1 -1
  243. package/docs/ja/migration_from_next-intl_to_intlayer.md +1 -1
  244. package/docs/ja/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
  245. package/docs/ja/migration_from_react-i18next_to_intlayer.md +1 -1
  246. package/docs/ja/migration_from_vue-i18n_to_intlayer.md +1 -1
  247. package/docs/ja/plugins/sync-json.md +222 -49
  248. package/docs/ja/releases/v8.md +193 -4
  249. package/docs/ja/releases/v9.md +232 -0
  250. package/docs/ko/cli/doc-review.md +110 -4
  251. package/docs/ko/cli/index.md +1 -1
  252. package/docs/ko/cli/scan.md +1 -1
  253. package/docs/ko/configuration.md +49 -16
  254. package/docs/ko/dictionary/condition.md +167 -5
  255. package/docs/ko/dictionary/enumeration.md +540 -6
  256. package/docs/ko/dictionary/file.md +151 -1
  257. package/docs/ko/dictionary/gender.md +168 -7
  258. package/docs/ko/dictionary/nesting.md +173 -65
  259. package/docs/ko/dictionary/plurial.md +174 -5
  260. package/docs/ko/dictionary/translation.md +169 -8
  261. package/docs/ko/dynamic_dictionaries/collections.md +1 -1
  262. package/docs/ko/dynamic_dictionaries/dynamic_content.md +1 -1
  263. package/docs/ko/dynamic_dictionaries/index.md +1 -1
  264. package/docs/ko/dynamic_dictionaries/variants.md +1 -1
  265. package/docs/ko/intlayer_with_vite+react.md +48 -490
  266. package/docs/ko/migration_from_i18next_to_intlayer.md +1 -1
  267. package/docs/ko/migration_from_next-i18next_to_intlayer.md +1 -1
  268. package/docs/ko/migration_from_next-intl_to_intlayer.md +1 -1
  269. package/docs/ko/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
  270. package/docs/ko/migration_from_react-i18next_to_intlayer.md +1 -1
  271. package/docs/ko/migration_from_vue-i18n_to_intlayer.md +1 -1
  272. package/docs/ko/plugins/sync-json.md +223 -50
  273. package/docs/ko/releases/v8.md +192 -1
  274. package/docs/ko/releases/v9.md +232 -0
  275. package/docs/nl/cli/index.md +1 -1
  276. package/docs/nl/cli/scan.md +1 -1
  277. package/docs/nl/configuration.md +36 -3
  278. package/docs/pl/cli/doc-review.md +110 -4
  279. package/docs/pl/cli/index.md +1 -1
  280. package/docs/pl/cli/scan.md +1 -1
  281. package/docs/pl/configuration.md +35 -2
  282. package/docs/pl/dictionary/condition.md +167 -5
  283. package/docs/pl/dictionary/enumeration.md +540 -6
  284. package/docs/pl/dictionary/file.md +318 -2
  285. package/docs/pl/dictionary/gender.md +168 -7
  286. package/docs/pl/dictionary/nesting.md +173 -65
  287. package/docs/pl/dictionary/plurial.md +174 -5
  288. package/docs/pl/dictionary/translation.md +156 -2
  289. package/docs/pl/dynamic_dictionaries/collections.md +1 -1
  290. package/docs/pl/dynamic_dictionaries/dynamic_content.md +1 -1
  291. package/docs/pl/dynamic_dictionaries/index.md +1 -1
  292. package/docs/pl/dynamic_dictionaries/variants.md +1 -1
  293. package/docs/pl/plugins/sync-json.md +246 -14
  294. package/docs/pl/releases/v8.md +188 -2
  295. package/docs/pl/releases/v9.md +232 -0
  296. package/docs/pt/cli/doc-review.md +110 -4
  297. package/docs/pt/cli/index.md +1 -1
  298. package/docs/pt/cli/scan.md +1 -1
  299. package/docs/pt/configuration.md +49 -16
  300. package/docs/pt/dictionary/condition.md +167 -5
  301. package/docs/pt/dictionary/enumeration.md +540 -6
  302. package/docs/pt/dictionary/file.md +151 -1
  303. package/docs/pt/dictionary/gender.md +168 -7
  304. package/docs/pt/dictionary/nesting.md +173 -65
  305. package/docs/pt/dictionary/plurial.md +347 -7
  306. package/docs/pt/dictionary/translation.md +156 -2
  307. package/docs/pt/dynamic_dictionaries/collections.md +1 -1
  308. package/docs/pt/dynamic_dictionaries/dynamic_content.md +1 -1
  309. package/docs/pt/dynamic_dictionaries/index.md +1 -1
  310. package/docs/pt/dynamic_dictionaries/variants.md +1 -1
  311. package/docs/pt/migration_from_i18next_to_intlayer.md +1 -1
  312. package/docs/pt/migration_from_next-i18next_to_intlayer.md +1 -1
  313. package/docs/pt/migration_from_next-intl_to_intlayer.md +1 -1
  314. package/docs/pt/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
  315. package/docs/pt/migration_from_react-i18next_to_intlayer.md +1 -1
  316. package/docs/pt/migration_from_vue-i18n_to_intlayer.md +1 -1
  317. package/docs/pt/plugins/sync-json.md +222 -49
  318. package/docs/pt/releases/v8.md +187 -1
  319. package/docs/pt/releases/v9.md +232 -0
  320. package/docs/ru/cli/doc-review.md +110 -4
  321. package/docs/ru/cli/index.md +1 -1
  322. package/docs/ru/cli/scan.md +1 -1
  323. package/docs/ru/configuration.md +35 -2
  324. package/docs/ru/dictionary/condition.md +366 -39
  325. package/docs/ru/dictionary/enumeration.md +777 -7
  326. package/docs/ru/dictionary/file.md +318 -2
  327. package/docs/ru/dictionary/gender.md +168 -7
  328. package/docs/ru/dictionary/nesting.md +368 -71
  329. package/docs/ru/dictionary/plurial.md +347 -7
  330. package/docs/ru/dictionary/translation.md +321 -33
  331. package/docs/ru/dynamic_dictionaries/collections.md +1 -1
  332. package/docs/ru/dynamic_dictionaries/dynamic_content.md +1 -1
  333. package/docs/ru/dynamic_dictionaries/index.md +1 -1
  334. package/docs/ru/dynamic_dictionaries/variants.md +1 -1
  335. package/docs/ru/intlayer_with_vite+react.md +48 -47
  336. package/docs/ru/migration_from_i18next_to_intlayer.md +1 -1
  337. package/docs/ru/migration_from_next-i18next_to_intlayer.md +1 -1
  338. package/docs/ru/migration_from_next-intl_to_intlayer.md +1 -1
  339. package/docs/ru/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
  340. package/docs/ru/migration_from_react-i18next_to_intlayer.md +1 -1
  341. package/docs/ru/migration_from_vue-i18n_to_intlayer.md +1 -1
  342. package/docs/ru/plugins/sync-json.md +269 -95
  343. package/docs/ru/releases/v8.md +194 -2
  344. package/docs/ru/releases/v9.md +232 -0
  345. package/docs/tr/cli/doc-review.md +110 -4
  346. package/docs/tr/cli/index.md +1 -1
  347. package/docs/tr/cli/scan.md +1 -1
  348. package/docs/tr/configuration.md +35 -2
  349. package/docs/tr/dictionary/condition.md +167 -5
  350. package/docs/tr/dictionary/enumeration.md +540 -6
  351. package/docs/tr/dictionary/file.md +151 -1
  352. package/docs/tr/dictionary/gender.md +168 -7
  353. package/docs/tr/dictionary/nesting.md +173 -65
  354. package/docs/tr/dictionary/plurial.md +174 -5
  355. package/docs/tr/dictionary/translation.md +156 -2
  356. package/docs/tr/dynamic_dictionaries/collections.md +1 -1
  357. package/docs/tr/dynamic_dictionaries/dynamic_content.md +1 -1
  358. package/docs/tr/dynamic_dictionaries/index.md +1 -1
  359. package/docs/tr/dynamic_dictionaries/variants.md +1 -1
  360. package/docs/tr/migration_from_i18next_to_intlayer.md +1 -1
  361. package/docs/tr/migration_from_next-i18next_to_intlayer.md +1 -1
  362. package/docs/tr/migration_from_next-intl_to_intlayer.md +1 -1
  363. package/docs/tr/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
  364. package/docs/tr/migration_from_react-i18next_to_intlayer.md +1 -1
  365. package/docs/tr/migration_from_vue-i18n_to_intlayer.md +1 -1
  366. package/docs/tr/plugins/sync-json.md +222 -50
  367. package/docs/tr/releases/v8.md +187 -1
  368. package/docs/tr/releases/v9.md +232 -0
  369. package/docs/uk/cli/doc-review.md +110 -4
  370. package/docs/uk/cli/index.md +1 -1
  371. package/docs/uk/cli/scan.md +1 -1
  372. package/docs/uk/configuration.md +35 -2
  373. package/docs/uk/dictionary/condition.md +167 -5
  374. package/docs/uk/dictionary/enumeration.md +540 -6
  375. package/docs/uk/dictionary/file.md +318 -2
  376. package/docs/uk/dictionary/gender.md +381 -8
  377. package/docs/uk/dictionary/nesting.md +173 -65
  378. package/docs/uk/dictionary/plurial.md +174 -5
  379. package/docs/uk/dictionary/translation.md +156 -2
  380. package/docs/uk/dynamic_dictionaries/collections.md +1 -1
  381. package/docs/uk/dynamic_dictionaries/dynamic_content.md +1 -1
  382. package/docs/uk/dynamic_dictionaries/index.md +1 -1
  383. package/docs/uk/dynamic_dictionaries/variants.md +1 -1
  384. package/docs/uk/plugins/sync-json.md +56 -2
  385. package/docs/uk/releases/v8.md +191 -3
  386. package/docs/uk/releases/v9.md +232 -0
  387. package/docs/ur/cli/index.md +1 -1
  388. package/docs/ur/cli/scan.md +1 -1
  389. package/docs/ur/configuration.md +36 -3
  390. package/docs/vi/cli/doc-review.md +110 -4
  391. package/docs/vi/cli/index.md +1 -1
  392. package/docs/vi/cli/scan.md +1 -1
  393. package/docs/vi/configuration.md +50 -17
  394. package/docs/vi/dictionary/condition.md +167 -5
  395. package/docs/vi/dictionary/enumeration.md +591 -14
  396. package/docs/vi/dictionary/file.md +318 -2
  397. package/docs/vi/dictionary/gender.md +168 -7
  398. package/docs/vi/dictionary/nesting.md +357 -86
  399. package/docs/vi/dictionary/plurial.md +174 -5
  400. package/docs/vi/dictionary/translation.md +156 -2
  401. package/docs/vi/dynamic_dictionaries/collections.md +1 -1
  402. package/docs/vi/dynamic_dictionaries/dynamic_content.md +1 -1
  403. package/docs/vi/dynamic_dictionaries/index.md +1 -1
  404. package/docs/vi/dynamic_dictionaries/variants.md +1 -1
  405. package/docs/vi/plugins/sync-json.md +230 -57
  406. package/docs/vi/releases/v8.md +190 -1
  407. package/docs/vi/releases/v9.md +232 -0
  408. package/docs/zh/cli/doc-review.md +110 -4
  409. package/docs/zh/cli/index.md +1 -1
  410. package/docs/zh/cli/scan.md +1 -1
  411. package/docs/zh/configuration.md +49 -16
  412. package/docs/zh/dictionary/condition.md +167 -5
  413. package/docs/zh/dictionary/enumeration.md +540 -6
  414. package/docs/zh/dictionary/file.md +151 -1
  415. package/docs/zh/dictionary/gender.md +168 -7
  416. package/docs/zh/dictionary/nesting.md +173 -65
  417. package/docs/zh/dictionary/plurial.md +174 -5
  418. package/docs/zh/dictionary/translation.md +169 -8
  419. package/docs/zh/dynamic_dictionaries/collections.md +1 -1
  420. package/docs/zh/dynamic_dictionaries/dynamic_content.md +1 -1
  421. package/docs/zh/dynamic_dictionaries/index.md +1 -1
  422. package/docs/zh/dynamic_dictionaries/variants.md +1 -1
  423. package/docs/zh/intlayer_with_vite+react.md +48 -288
  424. package/docs/zh/plugins/sync-json.md +223 -50
  425. package/docs/zh/releases/v8.md +1 -1
  426. package/docs/zh/releases/v9.md +220 -0
  427. package/package.json +7 -7
  428. package/src/generated/docs.entry.ts +320 -0
  429. package/dist/esm/_virtual/_rolldown/runtime.mjs +0 -8
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-03-13
3
- updatedAt: 2025-12-13
3
+ updatedAt: 2026-06-21
4
4
  title: Плагін Sync JSON
5
5
  description: Синхронізуйте словники Intlayer із зовнішніми i18n JSON-файлами (i18next, next-intl, react-intl, vue-i18n та ін.). Залишайте ваш існуючий i18n-стек і використовуйте Intlayer для керування, перекладу та тестування повідомлень.
6
6
  keywords:
@@ -24,6 +24,9 @@ slugs:
24
24
  - sync-json
25
25
  youtubeVideo: https://www.youtube.com/watch?v=MpGMxniDHNg
26
26
  history:
27
+ - version: 9.0.0
28
+ date: 2026-06-21
29
+ changes: "Додано опцію splitKeys (один словник на ключ простору імен верхнього рівня) для макетів next-intl / react-intl з одним файлом"
27
30
  - version: 7.5.0
28
31
  date: 2025-12-13
29
32
  changes: "Додано підтримку форматів ICU та i18next"
@@ -182,6 +185,7 @@ syncJSON({
182
185
  location?: string, // необов'язковий ярлик, за замовчуванням: "plugin"
183
186
  priority?: number, // необов'язковий пріоритет для вирішення конфліктів, за замовчуванням: 0
184
187
  format?: 'intlayer' | 'icu' | 'i18next', // необов'язковий форматтер, використовується для сумісності з intlayer runtime
188
+ splitKeys?: boolean, // необов'язково, розділяє один файл на один словник для кожного ключа простору імен верхнього рівня (автоматично визначається)
185
189
  });
186
190
  ```
187
191
 
@@ -205,6 +209,38 @@ syncJSON({
205
209
  }),
206
210
  ```
207
211
 
212
+ #### `splitKeys` (boolean)
213
+
214
+ Контролює, чи повинен один JSON-файл, **ключі першого рівня якого є просторами імен**, стати одним словником на ключ верхнього рівня, замість одного словника, що містить весь файл.
215
+
216
+ Це відповідає моделі просторів імен таких бібліотек, як `next-intl` та `react-intl`, де один файл `messages/{locale}.json` групує кілька просторів імен за ключами першого рівня, кожен з яких адресується незалежно (наприклад, `useTranslations('Hero')` розв'язується до словника `Hero`).
217
+
218
+ - `undefined` (за замовчуванням): **автоматично визначається** — файл розділяється, коли шаблон `source` не має сегмента `{key}` (один файл містить кожен простір імен), і залишається як єдиний словник в іншому випадку (один файл на ключ).
219
+ - `true`: завжди розділяти кожен ключ верхнього рівня на окремий словник.
220
+ - `false`: ніколи не розділяти; весь файл стає єдиним словником.
221
+
222
+ Дано один файл `messages/{locale}.json`:
223
+
224
+ ```json fileName="messages/en.json"
225
+ {
226
+ "Hero": { "title": "Full-stack developer" },
227
+ "Nav": { "work": "Work", "about": "About" },
228
+ "About": { "lead": "I build apps end to end." }
229
+ }
230
+ ```
231
+
232
+ ```ts fileName="intlayer.config.ts"
233
+ syncJSON({
234
+ format: "icu",
235
+ source: ({ locale }) => `./messages/${locale}.json`,
236
+ // splitKeys: true, // мається на увазі, оскільки шаблон не має сегмента `{key}`
237
+ }),
238
+ ```
239
+
240
+ Це створює три словники — `Hero`, `Nav` та `About` — тому `useTranslations('Hero')` (next-intl) розв'язується коректно. При зворотному записі всі простори імен знову збираються в той самий файл для кожної локалі.
241
+
242
+ > Коли ви зберігаєте явний сегмент `{key}` у вашому `source` (наприклад, `./locales/${locale}/${key}.json`), кожен файл вже є одним простором імен, тому розділення за замовчуванням вимкнено.
243
+
208
244
  ### Кілька джерел JSON та пріоритет
209
245
 
210
246
  Ви можете додавати кілька плагінів `syncJSON` для синхронізації різних джерел JSON. Це корисно, коли у вашому проєкті використовується декілька i18n бібліотек або різні структури JSON.
@@ -337,6 +373,9 @@ loadJSON({
337
373
 
338
374
  // Необов'язковий форматувач для JSON-вмісту
339
375
  format?: 'intlayer' | 'icu' | 'i18next', // за замовчуванням: 'intlayer'
376
+
377
+ // Розділяє один файл на один словник для кожного ключа верхнього рівня (автоматично визначається)
378
+ splitKeys?: boolean,
340
379
  });
341
380
  ```
342
381
 
@@ -358,10 +397,25 @@ loadJSON({
358
397
  }),
359
398
  ```
360
399
 
400
+ #### `splitKeys` (boolean)
401
+
402
+ Така ж поведінка, як і в [`syncJSON`](#splitkeys-boolean): коли один JSON-файл групує кілька просторів імен за ключами першого рівня, кожен ключ верхнього рівня стає окремим словником.
403
+
404
+ - `undefined` (за замовчуванням): **автоматично визначається** — розділяється, коли шаблон `source` не має сегмента `{key}`, інакше — єдиний словник.
405
+ - `true` / `false`: примусово ввімкнути або вимкнути розділення.
406
+
407
+ ```ts
408
+ loadJSON({
409
+ source: ({ locale }) => `./messages/${locale}.json`,
410
+ format: "icu",
411
+ // splitKeys auto-enabled: `Hero`, `Nav`, `About`, … each become a dictionary
412
+ }),
413
+ ```
414
+
361
415
  ### Поведінка та конвенції
362
416
 
363
417
  - Якщо ваша маска `source` містить плейсхолдер локалі, імпортуються лише файли для обраної `locale`.
364
- - Якщо в масці немає сегмента `{key}`, ключ словника, "index".
418
+ - Якщо в масці немає сегмента `{key}`, кожен ключ верхнього рівня файлу за замовчуванням стає окремим словником (див. [`splitKeys`](#splitkeys-boolean)). Встановіть `splitKeys: false`, щоб замість цього завантажити весь файл як єдиний словник `index`.
365
419
  - Ключі виводяться зі шляхів файлів шляхом підстановки плейсхолдера `{key}` у вашому source builder.
366
420
  - Плагін використовує лише виявлені файли і не створює відсутні локалі чи ключі.
367
421
  - Шлях `fill` виводиться з вашого `source` і використовується для оновлення відсутніх значень через CLI, якщо ви погодитесь.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-09-22
3
- updatedAt: 2026-01-26
3
+ updatedAt: 2026-06-14
4
4
  title: "Новий Intlayer v8 - Що нового?"
5
5
  description: "Дізнайтеся, що нового в Intlayer v8. Значні покращення досвіду розробника, валідації контенту та управління словниками."
6
6
  keywords:
@@ -199,7 +199,7 @@ Intlayer v8 вносить значні покращення в обробку
199
199
 
200
200
  **3. Використання утиліти:**
201
201
 
202
- ```tsx
202
+ ```typescript
203
203
  import { renderMarkdown } from "solid-intlayer/markdown";
204
204
 
205
205
  return <div>{renderMarkdown("# Мій заголовок")}</div>;
@@ -409,6 +409,16 @@ Intlayer v8 вносить значні покращення в обробку
409
409
 
410
410
  ---
411
411
 
412
+ ## Файли контенту YAML та Markdown (v8.10.0)
413
+
414
+ Тепер ви можете оголошувати контент безпосередньо за допомогою розширень файлів `.content.md` та `.content.yaml`. Це ідеально підходить для лонгрідів, блогів, документації та політик конфіденційності.
415
+
416
+ Ці файли повністю доступні для редагування у Visual Editor, забезпечуючи спрощений робочий процес для нетехнічних членів команди.
417
+
418
+ Для отримання додаткової інформації див. [Документацію про файли контенту YAML](https://intlayer.org/doc/concept/content#yaml-content-file) та [Документацію про файли контенту Markdown](https://intlayer.org/doc/concept/content/markdown).
419
+
420
+ ---
421
+
412
422
  ## Користувацькі переписування URL
413
423
 
414
424
  Intlayer v8 додає підтримку **користувацьких переписувань URL**, що дозволяє визначати локалізовані шляхи, які відрізняються від стандартної структури `/locale/path`. Це потужна можливість для покращення локального SEO та забезпечення більш природного досвіду користувача для тих, хто не говорить англійською.
@@ -753,6 +763,60 @@ export default {
753
763
  </Tab>
754
764
  </Tabs>
755
765
 
766
+ ---
767
+
768
+ ## Правила множини Unicode CLDR (v8.8.0)
769
+
770
+ Було впроваджено новий хелпер вузла `plural` на основі правил множини, визначених проектом Unicode CLDR, що покращує підтримку складних мов.
771
+
772
+ ```typescript fileName="src/openings.content.ts"
773
+ import { plural, t, type Dictionary } from "intlayer";
774
+
775
+ const openingsContent = {
776
+ key: "total_openings",
777
+ content: {
778
+ totalOpenings: t({
779
+ en: plural({
780
+ one: "{{count}} opening",
781
+ other: "{{count}} openings",
782
+ }),
783
+ fr: plural({
784
+ one: "{{count}} offre",
785
+ other: "{{count}} offres",
786
+ }),
787
+ }),
788
+ },
789
+ } satisfies Dictionary;
790
+
791
+ export default openingsContent;
792
+ ```
793
+
794
+ Після цього ви можете динамічно передавати кількість у компонент вашого фреймворку:
795
+
796
+ ```tsx
797
+ import type { FC } from "react";
798
+ import { useIntlayer } from "react-intlayer";
799
+
800
+ const OpeningsComponent: FC<{ count: number }> = ({ count }) => {
801
+ const { totalOpenings } = useIntlayer("total_openings");
802
+
803
+ return (
804
+ <div>
805
+ {/* Англійською: */}
806
+ {/* count=0 → "0 openings" (other) */}
807
+ {/* count=1 → "1 opening" (one) */}
808
+ {/* count=2 → "2 openings" (other) */}
809
+ {/* count=21 → "21 openings" (other) */}
810
+ <p>{totalOpenings(count)}</p>
811
+ </div>
812
+ );
813
+ };
814
+ ```
815
+
816
+ Для отримання додаткової інформації див. [Документацію про плюралізацію](https://intlayer.org/doc/concept/content/plural).
817
+
818
+ ---
819
+
756
820
  ## Валідація схем контенту
757
821
 
758
822
  Intlayer v8 впроваджує валідацію схем для словників. Тепер ви можете визначати повторно використовувані схеми валідації у вашій конфігурації за допомогою Zod і застосовувати їх до ваших файлів контенту. Це гарантує, що ваш контент завжди відповідає очікуваній структурі, виявляючи помилки під час збірки.
@@ -797,6 +861,34 @@ export default aboutPageMetaContent;
797
861
 
798
862
  ---
799
863
 
864
+ ## TypeScript: Примітивні аксесори IntlayerNode
865
+
866
+ Тип `IntlayerNode` було оновлено, щоб дозволити виклик примітивних методів JavaScript безпосередньо на вузлах контенту. Це дає змогу взаємодіяти з вашим локалізованим контентом так, ніби це стандартний примітив рядка, числа, булевого значення або масиву.
867
+
868
+ Підтримується в React, Preact, Solid, Svelte, Vue та Angular.
869
+
870
+ ### Приклад з рядком (String)
871
+
872
+ ```typescript
873
+ content.placeholder; // Повертає IntlayerNode<string>
874
+ content.placeholder.value; // Повертає string
875
+ content.placeholder.toString(); // Повертає string
876
+ content.placeholder.toLowerCase(); // Повертає string
877
+ String(content.placeholder); // Повертає string
878
+ content.placeholder.toUpperCase(); // Повертає рядок у верхньому регістрі
879
+ content.placeholder.replace("a", "b"); // Повертає змінений рядок
880
+ ```
881
+
882
+ ### Приклад з масивом (Array)
883
+
884
+ ```typescript
885
+ content.myArrayOfString // Повертає IntlayerNode<Array<string>>
886
+ content.myArrayOfString.find(...) // Повертає елемент
887
+ content.myArrayOfString.join(', ') // Повертає об'єднаний рядок
888
+ ```
889
+
890
+ ---
891
+
800
892
  ### Покращене автоматичне виявлення контенту
801
893
 
802
894
  У v8 Intlayer інтелектуально виявляє синтаксис Markdown, HTML-теги та вставки змінних у рядках контенту. Це означає, що ви часто можете опустити допоміжні функції, такі як `md()`, `html()` або `insert()`.
@@ -1002,9 +1094,20 @@ export default {
1002
1094
 
1003
1095
  ---
1004
1096
 
1097
+ ## Інструменти: C++ Watcher та LSP на базі OXC (v8.12.0)
1098
+
1099
+ Intlayer v8.12.0 приносить значні покращення у досвід розробника:
1100
+
1101
+ - **Parcel Watcher**: Спостерігач за контентом (content watcher) було мігровано з `chokidar` на `@parcel/watcher`, що використовує нативне спостереження за файлами на C++ для забезпечення швидших оновлень та значно меншого споживання пам'яті.
1102
+ - **Новий Language Server Protocol (LSP)**: Тепер доступний абсолютно новий LSP. Створений на основі парсингу OXC, він допомагає вашій IDE та AI-агентам безперешкодно пов'язувати виклики `useIntlayer('my-key')` з відповідними файлами `.content` і навпаки.
1103
+
1104
+ Для отримання додаткової інформації див. [Документацію LSP](https://intlayer.org/doc/lsp).
1105
+
1106
+ ---
1107
+
1005
1108
  ## Оптимізації компілятора
1006
1109
 
1007
- Intlayer v8 включає новий шар кешування для компілятора Markdown та HTML. Це гарантує, що ідентичні рядки контенту з однаковою конфігурацією парсяться лише один раз, що значно зменшує витрати під час повторних відтворень або при використанні одного й того ж контенту в декількох місцях.
1110
+ Intlayer v8 включає новий шар кешування для компілятора Markdown та HTML. Це гарантує, що ідентичні рядки контенту з однаковою конфігурацією парсяться лише один раз, що значно зменшує витрати під час повторних відтворень або при використанні одного й того же контенту в декількох місцях.
1008
1111
 
1009
1112
  <Tabs group='bundler'>
1010
1113
  <Tab label="Next.js" value="nextjs">
@@ -1057,6 +1160,48 @@ Intlayer v8 включає новий шар кешування для комп
1057
1160
 
1058
1161
  ---
1059
1162
 
1163
+ ## Експериментальні оптимізації збірки: Minify & Purge (v8.7.0)
1164
+
1165
+ Intlayer v8.7.0 представляє нові експериментальні функції збірки у вашому `intlayer.config.ts`, розроблені для оптимізації вашого production-бандлу:
1166
+
1167
+ - **Мініфікація словників (Dictionary Minification)**: Мініфікує файли словників для зменшення їхнього розміру.
1168
+ - **Очищення невикористовуваних ключів (Unused Key Purging)**: Сканує та видаляє невикористовувані ключі перекладу зі словників, перейменовуючи активні ключі на короткі символи (наприклад, `"products" -> "a"`, `"pricing" -> "b"`). Це зменшує розмір бандлу до 5%.
1169
+ - **Вимкнення перевірок TypeScript**: Прискорює збірку шляхом вимкнення типізації TypeScript під час кроку компіляції.
1170
+
1171
+ ```typescript fileName="intlayer.config.ts"
1172
+ import { Locales, type IntlayerConfig } from "intlayer";
1173
+
1174
+ const config: IntlayerConfig = {
1175
+ internationalization: {
1176
+ locales: [Locales.ENGLISH, Locales.FRENCH],
1177
+ defaultLocale: Locales.ENGLISH,
1178
+ },
1179
+ dictionary: {
1180
+ importMode: "dynamic",
1181
+ },
1182
+ build: {
1183
+ /**
1184
+ * Мініфікувати словники для зменшення розміру бандлу.
1185
+ */
1186
+ minify: true,
1187
+
1188
+ /**
1189
+ * Очистити невикористовувані ключі у словниках
1190
+ */
1191
+ purge: true,
1192
+
1193
+ /**
1194
+ * Вказує, чи повинна збірка перевіряти типи TypeScript
1195
+ */
1196
+ checkTypes: false,
1197
+ },
1198
+ };
1199
+
1200
+ export default config;
1201
+ ```
1202
+
1203
+ ---
1204
+
1060
1205
  ## Гнучкість: Уніфікований режим імпорту
1061
1206
 
1062
1207
  Властивість булевого типу `live` була застаріла на користь більш всеосяжної властивості `importMode`. Це дозволяє явно визначати, як словники мають завантажуватися: статично, динамічно або через live-синхронізацію.
@@ -1204,6 +1349,49 @@ export default {
1204
1349
 
1205
1350
  ---
1206
1351
 
1352
+ ## Підтримка Angular: Vite Bundler (v8.11.0)
1353
+
1354
+ Для користувачів Angular Intlayer тепер нативно підтримує бандлер Vite через новий кастомний плагін esbuild, що прискорює час розробки та збірки.
1355
+
1356
+ Детальніше про конфігурацію див. у [Документації середовища Angular](https://intlayer.org/doc/environment/angular).
1357
+
1358
+ ---
1359
+
1360
+ ## Генерація карти сайту (Sitemap) (v8.6.0)
1361
+
1362
+ Intlayer тепер автоматично генерує карти сайтів (sitemaps) на основі ваших локалей та режиму маршрутизації. Це особливо корисно для SEO-оптимізації в архітектурах роутерів, таких як TanStack Router:
1363
+
1364
+ ```typescript fileName="src/routes/sitemap.xml.ts"
1365
+ import { createFileRoute } from "@tanstack/react-router";
1366
+ import { generateSitemap } from "intlayer";
1367
+
1368
+ const SITE_URL = (
1369
+ import.meta.env.VITE_SITE_URL ?? "http://localhost:3000"
1370
+ ).replace(/\/$/, "");
1371
+
1372
+ export const Route = createFileRoute("/sitemap.xml")({
1373
+ server: {
1374
+ handlers: {
1375
+ GET: async () => {
1376
+ const sitemap = generateSitemap(
1377
+ [
1378
+ { path: "/", changefreq: "daily", priority: 1.0 },
1379
+ { path: "/about", changefreq: "monthly", priority: 0.8 },
1380
+ ],
1381
+ { siteUrl: SITE_URL }
1382
+ );
1383
+
1384
+ return new Response(sitemap, {
1385
+ headers: { "Content-Type": "application/xml" },
1386
+ });
1387
+ },
1388
+ },
1389
+ },
1390
+ });
1391
+ ```
1392
+
1393
+ ---
1394
+
1207
1395
  ## Примітки до міграції з v7
1208
1396
 
1209
1397
  ### Зміни в конфігурації
@@ -0,0 +1,232 @@
1
+ ---
2
+ createdAt: 2026-06-14
3
+ updatedAt: 2026-06-14
4
+ title: Новий Intlayer v9 - Що нового?
5
+ description: Дізнайтеся, що нового в Intlayer v9. Представляємо сумісні пакети швидкої заміни (drop-in) для популярних бібліотек i18n та підтримку Collections, Variants та Dynamic Records.
6
+ keywords:
7
+ - Intlayer
8
+ - Сумісність
9
+ - Міграція
10
+ - Колекції
11
+ - Варіанти
12
+ - Динамічні записи
13
+ - i18next
14
+ - next-intl
15
+ - vue-i18n
16
+ slugs:
17
+ - doc
18
+ - releases
19
+ - v9
20
+ author: aymericzip
21
+ ---
22
+
23
+ # Новий Intlayer v9 - Що нового?
24
+
25
+ Ласкаво просимо до Intlayer v9! Цей мажорний реліз є величезною віхою у спрощенні шляху міграції на Intlayer завдяки **Compat Adapter Packages** (пакетам адаптерів сумісності) для основних бібліотек i18n (`react-i18next`, `next-intl`, `vue-i18n` тощо) та додає підтримку складних структур контенту: **Collections** (Колекцій), **Variants** (Варіантів) та **Dynamic Records** (Динамічних записів).
26
+
27
+ ## Зміст
28
+
29
+ <TOC levels={[2]} maxDepth={1} />
30
+
31
+ ---
32
+
33
+ ## Пакети адаптерів сумісності (Compat Adapter Packages)
34
+
35
+ Мігрувати на Intlayer з популярних бібліотек i18n тепер простіше, ніж будь-коли. Ми створили п'ять пакетів сумісності, які надають **точно такий самий публічний API**, як і стандартні бібліотеки i18n, але делегують усю роботу з перекладу Intlayer під час виконання (runtime).
36
+
37
+ ### Той самий публічний API зі строгою типізацією
38
+
39
+ Замінивши імпорти, ви отримуєте всі переваги Intlayer (включаючи типізацію на етапі компіляції відповідно до ваших реальних словників) з мінімальними змінами в коді:
40
+
41
+ - `@intlayer/i18next`
42
+ - `@intlayer/react-i18next`
43
+ - `@intlayer/next-intl`
44
+ - `@intlayer/next-i18next`
45
+ - `@intlayer/vue-i18n`
46
+
47
+ Наприклад, просто змініть:
48
+
49
+ ```ts
50
+ import { useTranslation } from "react-i18next";
51
+ ```
52
+
53
+ на:
54
+
55
+ ```ts
56
+ import { useTranslation } from "@intlayer/react-i18next";
57
+ ```
58
+
59
+ Тепер ваші ключі будуть **строго типізовані** відповідно до ваших словників Intlayer, забезпечуючи повне автодоповнення шляхів через крапку (dot-path) у вашій IDE!
60
+
61
+ ### Плагіни аліасів для бандлерів (Vite, Next.js, Turbopack)
62
+
63
+ Щоб дозволити міграцію без ручного переписування всіх інструкцій імпорту, кожен пакет адаптера сумісності містить **кастомний плагін для бандлера** (Vite або Next.js) у підшляху `/plugin`.
64
+
65
+ Ці плагіни автоматично перезаписують існуючі імпорти (наприклад, `react-i18next` або `next-intl`) на їхні еквіваленти `@intlayer/*` під час збірки.
66
+
67
+ #### Приклад для Next.js (Webpack / Turbopack)
68
+
69
+ Замість `withIntlayer` оберніть вашу конфігурацію Next.js плагіном сумісності:
70
+
71
+ ```ts fileName="next.config.ts"
72
+ import { createNextI18nPlugin } from "@intlayer/next-i18next/plugin";
73
+ import type { NextConfig } from "next";
74
+
75
+ const withIntlayer = createNextI18nPlugin();
76
+ const nextConfig: NextConfig = {};
77
+
78
+ export default withIntlayer(nextConfig);
79
+ ```
80
+
81
+ #### Приклад для Vite (React, Vue, Solid, Svelte)
82
+
83
+ ```ts fileName="vite.config.ts"
84
+ import vueI18nVitePlugin from "@intlayer/vue-i18n/plugin";
85
+
86
+ export default defineConfig({
87
+ plugins: [vueI18nVitePlugin()],
88
+ });
89
+ ```
90
+
91
+ ---
92
+
93
+ ## Спільний резолвер часу виконання (Mutualized Runtime Resolver)
94
+
95
+ Усі адаптери сумісності тепер направляють резолв перекладів через єдиний, високооптимізований парсер часу виконання: `@intlayer/core/messageFormat`.
96
+
97
+ - **Interpolate Message**: Резолвить стандартні `{{var}}` (пробіли та dot-paths), аргументи у форматі ICU (`{v, number, percent}` тощо) та прості шаблони `{var}`.
98
+ - **Message Node Resolver**: Резолвить вкладені вузли: `insert()`, `plural()` (правила множини CLDR), `enu()` (перелічення), `gender()`, HTML-теги, масиви та вузли функцій зворотного виклику (callable function nodes).
99
+ - **Tokenized Tag Parser**: Підтримує інлайнові XML/HTML-теги та нумеровані теги (наприклад, `<1>children</1>`) для забезпечення рендерингу форматованого тексту (rich-text) "з коробки".
100
+
101
+ ---
102
+
103
+ ## Специфікація функцій: Collections, Variants та Dynamic Records
104
+
105
+ Intlayer v9 виходить за рамки статичних об'єктів типу ключ-значення, дозволяючи словникам оголошувати динамічні структури макетів, які повністю типізовані від початку до кінця (end-to-end).
106
+
107
+ ### 1. Колекції (Collections)
108
+
109
+ Визначайте керований CMS список упорядкованих елементів (наприклад, FAQ, товари або списки блогів):
110
+
111
+ ```ts fileName="faq.content.ts"
112
+ import { t, type Dictionary } from "intlayer";
113
+
114
+ export default {
115
+ key: "faq",
116
+ content: [
117
+ {
118
+ question: t({
119
+ uk: "Що таке Intlayer?",
120
+ en: "What is Intlayer?",
121
+ fr: "Qu'est-ce qu'Intlayer ?",
122
+ }),
123
+ answer: t({
124
+ uk: "Інструментарій i18n.",
125
+ en: "An i18n toolkit.",
126
+ fr: "Une boîte à outils i18n.",
127
+ }),
128
+ },
129
+ ],
130
+ } satisfies Dictionary;
131
+ ```
132
+
133
+ #### Використання:
134
+
135
+ ```ts
136
+ // Отримати всі елементи
137
+ const allFaqs = useIntlayer("faq"); // -> { question: string, answer: string }[]
138
+
139
+ // Отримати один елемент за індексом
140
+ const faq = useIntlayer("faq", { item: 1 }); // -> { question: string, answer: string }
141
+ ```
142
+
143
+ ### 2. Варіанти (Variants)
144
+
145
+ Надавайте A/B тести, сезонні заголовки, feature flags або кастомні цільові сторінки (landing pages):
146
+
147
+ ```ts fileName="hero.content.ts"
148
+ import { t, type Dictionary } from "intlayer";
149
+
150
+ export default {
151
+ key: "hero-banner",
152
+ variant: "default",
153
+ content: {
154
+ control: t({ uk: "Ласкаво просимо", en: "Welcome", fr: "Bienvenue" }),
155
+ black_friday: t({
156
+ uk: "Купити зараз",
157
+ en: "Shop now",
158
+ fr: "Acheter maintenant",
159
+ }),
160
+ },
161
+ } satisfies Dictionary;
162
+ ```
163
+
164
+ #### Використання:
165
+
166
+ ```ts
167
+ const banner = useIntlayer("hero-banner", { variant: "black_friday" });
168
+ ```
169
+
170
+ ### 3. Динамічні записи (Dynamic Records)
171
+
172
+ Визначайте словники, записи яких завантажуються динамічно під час виконання за допомогою ідентифікаторів запитів (query IDs):
173
+
174
+ ```ts fileName="product.content.ts"
175
+ import { t, type Dictionary } from "intlayer";
176
+
177
+ export default {
178
+ key: "product-copy",
179
+ meta: {
180
+ id: "prod_123",
181
+ category: "books",
182
+ },
183
+ content: {
184
+ title: t({ uk: "Чистий код", en: "Clean Code", fr: "Code Propre" }),
185
+ },
186
+ } satisfies Dictionary;
187
+ ```
188
+
189
+ #### Використання:
190
+
191
+ ```ts
192
+ // Динамічно завантажує лише запитуваний елемент (потребує Suspense)
193
+ const product = useIntlayer("product-copy", {
194
+ id: "prod_123",
195
+ category: "books",
196
+ });
197
+ ```
198
+
199
+ ---
200
+
201
+ ## Динамічне завантаження та оптимізація розміру бандла
202
+
203
+ Щоб зберегти розмір бандлів надзвичайно малим, Intlayer v9 підтримує динамічне ліниве завантаження (lazy loading).
204
+
205
+ У вашій конфігурації встановіть `importMode` у `'dynamic'` або `'fetch'`:
206
+
207
+ ```ts fileName="intlayer.config.ts"
208
+ export default {
209
+ dictionary: {
210
+ importMode: "dynamic", // "static" | "dynamic" | "fetch"
211
+ },
212
+ };
213
+ ```
214
+
215
+ Під час збірки `@intlayer/swc` та `@intlayer/babel` сканують ваші файли та замінюють виклики `useIntlayer` / `getIntlayer` на tree-shakeable обгортки (`useDictionary` / `useDictionaryDynamic`). Завантажується лише контент, необхідний для вибраного елемента колекції, варіанта або локалі, що запобігає потраплянню невикористовуваних перекладів у ваш продакшн-бандл.
216
+
217
+ ---
218
+
219
+ ## Примітки щодо міграції з v8
220
+
221
+ Якщо ви оновлюєтеся з v8, зверніть увагу, що v9 не містить критичних змін (breaking changes). Проте ось ключові зміни:
222
+
223
+ - **Locales & Dialects**: Якщо ви використовуєте зовнішні залежності i18n, додайте відповідні плагіни адаптерів сумісності у вашу конфігурацію або налаштування бандлера для автоматичного перезапису імпортів.
224
+ - **Custom Selectors**: При виклику `useIntlayer` другий параметр тепер зарезервований для об'єкта опцій, що містить `{ locale, item, variant, id }`. Якщо раніше ви передавали рядок локалі безпосередньо, ви все ще можете це робити, але для розширеного вибору рекомендується використовувати об'єкт опцій.
225
+
226
+ ---
227
+
228
+ ## Корисні посилання
229
+
230
+ - [Посібник з пакетів адаптерів сумісності (Compat Adapter Packages)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/compat/index.md)
231
+ - [Динамічні словники - Collections, Variants та Dynamic Records](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dynamic_dictionaries/index.md)
232
+ - [Довідник з конфігурації](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/configuration.md)
@@ -17,7 +17,7 @@ slugs:
17
17
  - concept
18
18
  - cli
19
19
  history:
20
- - version: 8.13.0
20
+ - version: 9.0.0
21
21
  date: 2026-06-11
22
22
  changes: "اسکین (scan) کمانڈ شامل کی گئی"
23
23
  - version: 8.6.4
@@ -18,7 +18,7 @@ slugs:
18
18
  - cli
19
19
  - scan
20
20
  history:
21
- - version: 8.13.0
21
+ - version: 9.0.0
22
22
  date: 2026-06-11
23
23
  changes: "اسکین (scan) کمانڈ شامل کی گئی"
24
24
  author: aymericzip