@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,11 +1,11 @@
1
1
  ---
2
2
  createdAt: 2025-03-13
3
- updatedAt: 2025-12-13
4
- title: Плагин синхронизации JSON
5
- description: Синхронизируйте словари Intlayer с JSON-файлами сторонних i18n (i18next, next-intl, react-intl, vue-i18n и другими). Сохраняйте существующую i18n, используя Intlayer для управления, перевода и тестирования ваших сообщений.
3
+ updatedAt: 2026-06-21
4
+ title: Плагин Sync JSON
5
+ description: Синхронизируйте словари Intlayer со сторонними i18n JSON-файлами (i18next, next-intl, react-intl, vue-i18n и другими). Сохраняйте существующую i18n структуру, используя Intlayer для управления, перевода и тестирования ваших сообщений.
6
6
  keywords:
7
7
  - Intlayer
8
- - Синхронизация JSON
8
+ - Sync JSON
9
9
  - i18next
10
10
  - next-intl
11
11
  - react-intl
@@ -17,6 +17,7 @@ keywords:
17
17
  - Solid-i18next
18
18
  - svelte-i18n
19
19
  - i18n
20
+ - translations
20
21
  - переводы
21
22
  slugs:
22
23
  - doc
@@ -24,35 +25,38 @@ slugs:
24
25
  - sync-json
25
26
  youtubeVideo: https://www.youtube.com/watch?v=MpGMxniDHNg
26
27
  history:
28
+ - version: 9.0.0
29
+ date: 2026-06-21
30
+ changes: "Добавлена опция splitKeys (один словарь на каждый ключ пространства имен верхнего уровня) для однофайловых структур next-intl / react-intl"
27
31
  - version: 7.5.0
28
32
  date: 2025-12-13
29
33
  changes: "Добавлена поддержка форматов ICU и i18next"
30
34
  - version: 6.1.6
31
35
  date: 2025-10-05
32
- changes: "Начальная документация плагина синхронизации JSON"
36
+ changes: "Начальная документация плагина Sync JSON"
33
37
  author: aymericzip
34
38
  ---
35
39
 
36
- # Синхронизация JSON (мосты i18n) - Синхронизация JSON с поддержкой ICU / i18next
40
+ # Sync JSON (i18n bridges) Синхронизация JSON с поддержкой ICU / i18next
37
41
 
38
- <iframe title="Как поддерживать синхронизацию ваших JSON-переводов с Intlayer" class="m-auto aspect-16/9 w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/MpGMxniDHNg?autoplay=0&amp;origin=https://intlayer.org&amp;controls=0&amp;rel=1"/>
42
+ <iframe title="Как синхронизировать ваши JSON-переводы с помощью Intlayer" class="m-auto aspect-16/9 w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/MpGMxniDHNg?autoplay=0&amp;origin=https://intlayer.org&amp;controls=0&amp;rel=1"/>
39
43
 
40
- Используйте Intlayer в качестве дополнения к вашему существующему стеку i18n. Этот плагин поддерживает синхронизацию ваших JSON-сообщений со словарями Intlayer, чтобы вы могли:
44
+ Используйте Intlayer как дополнение к вашему существующему стеку i18n. Этот плагин синхронизирует ваши сообщения JSON со словарями Intlayer, чтобы вы могли:
41
45
 
42
- - Сохранять использование i18next, next-intl, react-intl, vue-i18n, next-translate, nuxt-i18n, Solid-i18next, svelte-i18n и других.
43
- - Управлять и переводить ваши сообщения с помощью Intlayer (CLI, CI, провайдеры, CMS), без необходимости рефакторинга вашего приложения.
44
- - Публиковать обучающие материалы и SEO-контент, ориентированный на каждую экосистему, предлагая Intlayer в качестве слоя управления JSON.
46
+ - Сохраняйте поддержку i18next, nextintl, reactintl, vuei18n, nexttranslate, nuxti18n, Solidi18next, sveltei18n и других.
47
+ - Управляйте и переводите свои сообщения с помощью Intlayer (CLI, CI, провайдеры, CMS) без рефакторинга вашего приложения.
48
+ - Создавайте руководства и SEO-контент для каждой экосистемы, предлагая Intlayer в качестве слоя управления JSON.
45
49
 
46
- Примечания и текущий охват:
50
+ Заметки и текущая область применения:
47
51
 
48
- - Внешняя интеграция с CMS работает для переводов и классического текста.
49
- - Пока нет поддержки вставок, множественного числа/ICU или продвинутых функций времени выполнения других библиотек.
50
- - Визуальный редактор пока не поддерживается для вывода сторонних i18n.
52
+ - Экспорт в CMS работает для переводов и обычного текста.
53
+ - Пока нет поддержки вставок, множественного числа/ICU или продвинутых функций рантайма других библиотек.
54
+ - Визуальный редактор пока не поддерживает вывод i18n сторонних библиотек.
51
55
 
52
56
  ### Когда использовать этот плагин
53
57
 
54
58
  - Вы уже используете библиотеку i18n и храните сообщения в JSON-файлах.
55
- - Вы хотите использовать заполнение с помощью ИИ, тестирование в CI и управление контентом без изменения вашего runtime для рендеринга.
59
+ - Вы хотите использовать автозаполнение с помощью ИИ, тесты в CI и content ops без изменения вашего рантайма рендеринга.
56
60
 
57
61
  ## Установка
58
62
 
@@ -62,9 +66,65 @@ pnpm add -D @intlayer/sync-json-plugin
62
66
  npm i -D @intlayer/sync-json-plugin
63
67
  ```
64
68
 
65
- ## Быстрый старт
69
+ ## Плагины
66
70
 
67
- Добавьте плагин в ваш `intlayer.config.ts` и укажите путь к вашей существующей структуре JSON.
71
+ Этот пакет предоставляет два плагина:
72
+
73
+ - `loadJSON`: Загрузка JSON-файлов в словари Intlayer.
74
+ - Этот плагин используется для загрузки JSON-файлов из источника и их загрузки в словари Intlayer. Он может сканировать всю codebase и искать определенные JSON-файлы.
75
+ Этот плагин можно использовать
76
+ - если вы используете библиотеку i18n, которая требует определенного расположения для загрузки ваших JSON (например, `next-intl`, `i18next`, `react-intl`, `vue-i18n` и т. д.), но вы хотите размещать объявления контента там, где вам удобно в вашей codebase.
77
+ - Его также можно использовать, если вы хотите получать сообщения из удаленного источника (например, CMS, API и т. д.) и сохранять их в JSON-файлах.
78
+
79
+ > Внутри этот плагин будет сканировать всю кодовую базу (codebase), искать определенные JSON-файлы и загружать их в словари Intlayer.
80
+ > Обратите внимание, что этот плагин не будет записывать результат и переводы обратно в JSON-файлы.
81
+
82
+ - `syncJSON`: Синхронизация JSON-файлов со словарями Intlayer.
83
+ - Этот плагин используется для синхронизации JSON-файлов со словарями Intlayer. Он может сканировать указанное местоположение и загружать JSON, соответствующие шаблону для определенных JSON-файлов. Этот плагин полезен, если вы хотите получить преимущества Intlayer, используя при этом другую библиотеку i18n.
84
+
85
+ ## Использование обоих плагинов
86
+
87
+ ```ts fileName="intlayer.config.ts"
88
+ import { Locales, type IntlayerConfig } from "intlayer";
89
+ import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
90
+
91
+ const config: IntlayerConfig = {
92
+ internationalization: {
93
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
94
+ defaultLocale: Locales.ENGLISH,
95
+ },
96
+
97
+ // Поддерживайте ваши текущие JSON-файлы в синхронизации со словарями Intlayer
98
+ plugins: [
99
+ /**
100
+ * Загрузит все JSON-файлы в src, которые соответствуют шаблону {key}.i18n json
101
+ */
102
+ loadJSON({
103
+ source: ({ key }) => `./src/**/${key}.i18n.json`,
104
+ locale: Locales.ENGLISH,
105
+ priority: 1, // Гарантирует, что эти JSON-файлы имеют приоритет над файлами в `./locales/en/${key}.json`
106
+ format: "intlayer", // Формат содержимого JSON
107
+ }),
108
+ /**
109
+ * Загрузит, а также запишет результат и переводы обратно в JSON-файлы в директории locales
110
+ */
111
+ syncJSON({
112
+ format: "i18next",
113
+ source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
114
+ priority: 0,
115
+ format: "i18next",
116
+ }),
117
+ ],
118
+ };
119
+
120
+ export default config;
121
+ ```
122
+
123
+ ## `syncJSON` plugin
124
+
125
+ ### Быстрый старт
126
+
127
+ Добавьте плагин в ваш `intlayer.config.ts` и укажите ему на вашу существующую структуру JSON.
68
128
 
69
129
  ```ts fileName="intlayer.config.ts"
70
130
  import { Locales, type IntlayerConfig } from "intlayer";
@@ -76,11 +136,12 @@ const config: IntlayerConfig = {
76
136
  defaultLocale: Locales.ENGLISH,
77
137
  },
78
138
 
79
- // Синхронизируйте ваши текущие JSON-файлы со словарями Intlayer
139
+ // Поддерживайте ваши текущие JSON-файлы в синхронизации со словарями Intlayer
80
140
  plugins: [
81
141
  syncJSON({
82
- // Макет по локалям и пространствам имён (например, next-intl, i18next с пространствами имён)
142
+ // Макет для каждой локали, для каждого пространства имен (например, next-intl, i18next с пространствами имен)
83
143
  source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
144
+ format: "icu",
84
145
  }),
85
146
  ],
86
147
  };
@@ -88,65 +149,111 @@ const config: IntlayerConfig = {
88
149
  export default config;
89
150
  ```
90
151
 
91
- Альтернатива: один файл на локаль (распространено в настройках i18next/react-intl):
152
+ Альтернатива: один файл на локаль (часто используется в настройках i18next/react-intl):
92
153
 
93
154
  ```ts fileName="intlayer.config.ts"
94
- plugins: [
95
- syncJSON({
96
- source: ({ locale }) => `./locales/${locale}.json`,
97
- }),
98
- ];
155
+ import { Locales, type IntlayerConfig } from "intlayer";
156
+ import { syncJSON } from "@intlayer/sync-json-plugin";
157
+
158
+ const config: IntlayerConfig = {
159
+ internationalization: {
160
+ locales: [Locales.ENGLISH, Locales.FRENCH],
161
+ defaultLocale: Locales.ENGLISH,
162
+ },
163
+ plugins: [
164
+ syncJSON({
165
+ format: "i18next",
166
+ source: ({ locale }) => `./locales/${locale}.json`,
167
+ format: "i18next",
168
+ }),
169
+ ],
170
+ };
171
+
172
+ export default config;
99
173
  ```
100
174
 
101
- ### Как это работает
175
+ #### Как это работает
102
176
 
103
- - Чтение: плагин обнаруживает JSON-файлы с помощью вашего билдера `source` и загружает их как словари Intlayer.
104
- - Запись: после сборок и заполнения он записывает локализованные JSON обратно по тем же путям (с завершающим переводом строки, чтобы избежать проблем с форматированием).
177
+ - Чтение: плагин обнаруживает JSON-файлы из вашего `source` билдера и загружает их как словари Intlayer.
178
+ - Запись: после сборки и заполнения он записывает локализованный JSON обратно по тем же путям (с конечной новой строкой, чтобы избежать проблем с форматированием).
105
179
  - Автозаполнение: плагин объявляет путь `autoFill` для каждого словаря. Запуск `intlayer fill` по умолчанию обновляет только отсутствующие переводы в ваших JSON-файлах.
106
180
 
107
181
  API:
108
182
 
109
183
  ```ts
110
184
  syncJSON({
111
- source: ({ key, locale }) => string, // обязательно
112
- location?: string, // необязательная метка, по умолчанию: "plugin"
113
- priority?: number, // необязательный приоритет для разрешения конфликтов, по умолчанию: 0
114
- format?: 'intlayer' | 'icu' | 'i18next', // необязательный форматтер, используется для совместимости с runtime Intlayer
185
+ source: ({ key, locale }) => string, // required
186
+ location?: string, // optional label, default: "plugin"
187
+ priority?: number, // optional priority for conflict resolution, default: 0
188
+ format?: 'intlayer' | 'icu' | 'i18next', // optional formatter, used for intlayer runtime compatibility
189
+ splitKeys?: boolean, // необязательно, разделяет один файл на один словарь для каждого ключа верхнего уровня (автоматическое определение)
115
190
  });
116
191
  ```
117
192
 
118
193
  #### `format` ('intlayer' | 'icu' | 'i18next')
119
194
 
120
- Указывает форматтер, который будет использоваться для содержимого словаря при синхронизации JSON-файлов. Это позволяет использовать различные синтаксисы форматирования сообщений, совместимые с runtime Intlayer.
195
+ Указывает форматтер, который будет использоваться для содержимого словаря при синхронизации JSON-файлов. Это позволяет использовать различные синтаксисы форматирования сообщений, совместимые с рантаймом intlayer.
121
196
 
122
197
  - `undefined`: Форматтер не будет использоваться, содержимое JSON будет использоваться как есть.
123
- - `'intlayer'`: Форматтер Intlayer по умолчанию (по умолчанию).
124
- - `'icu'`: Использует форматирование сообщений ICU (совместимо с библиотеками, такими как react-intl, vue-i18n).
198
+ - `'intlayer'`: Форматтер Intlayer по умолчанию (default).
199
+ - `'icu'`: Использует форматирование сообщений ICU (совместимо с такими библиотеками, как react-intl, vue-i18n).
125
200
  - `'i18next'`: Использует форматирование сообщений i18next (совместимо с i18next, next-i18next, Solid-i18next).
126
201
 
127
- > Обратите внимание, что использование форматтера преобразует ваше содержимое JSON на входе и выходе. Для сложных правил JSON, таких как множественные числа ICU, парсинг может не гарантировать соответствие 1 к 1 между входом и выходом.
128
- > Если вы не используете runtime Intlayer, возможно, лучше не устанавливать форматтер.
202
+ > Обратите внимание, что использование форматтера преобразует содержимое вашего JSON на входе и выходе. Для сложных правил JSON, таких как множественное число ICU, парсинг может не гарантировать отображение один к одному между входом и выходом.
203
+ > Если вы не используете рантайм Intlayer, вы можете предпочесть не устанавливать форматтер.
129
204
 
130
205
  **Пример:**
131
206
 
132
207
  ```ts
133
208
  syncJSON({
134
209
  source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
135
- format: "i18next", // Использовать форматирование i18next для совместимости
210
+ format: "i18next", // Use i18next formatting for compatibility
211
+ }),
212
+ ```
213
+
214
+ #### `splitKeys` (boolean)
215
+
216
+ Определяет, должен ли один JSON-файл, **ключи первого уровня которого являются пространствами имен**, становиться одним словарем на каждый ключ верхнего уровня, вместо одного словаря, содержащего весь файл.
217
+
218
+ Это соответствует модели пространств имен таких библиотек, как `next-intl` и `react-intl`, где один файл `messages/{locale}.json` группирует несколько пространств имен по своим ключам первого уровня, каждое из которых адресуется независимо (например, `useTranslations('Hero')` разрешается в словарь `Hero`).
219
+
220
+ - `undefined` (по умолчанию): **автоматическое определение** — файл разделяется, когда шаблон `source` не содержит сегмента `{key}` (один файл содержит все пространства имен), и сохраняется как один словарь в противном случае (один файл на ключ).
221
+ - `true`: всегда разделять каждый ключ верхнего уровня на свой собственный словарь.
222
+ - `false`: никогда не разделять; весь файл становится одним словарем.
223
+
224
+ Пример одного файла `messages/{locale}.json`:
225
+
226
+ ```json fileName="messages/en.json"
227
+ {
228
+ "Hero": { "title": "Full-stack developer" },
229
+ "Nav": { "work": "Work", "about": "About" },
230
+ "About": { "lead": "I build apps end to end." }
231
+ }
232
+ ```
233
+
234
+ ```ts fileName="intlayer.config.ts"
235
+ syncJSON({
236
+ format: "icu",
237
+ source: ({ locale }) => `./messages/${locale}.json`,
238
+ // splitKeys: true, // подразумевается, потому что шаблон не содержит сегмента `{key}`
136
239
  }),
137
240
  ```
138
241
 
139
- ## Несколько источников JSON и приоритет
242
+ Это создает три словаря — `Hero`, `Nav` и `About` — так что `useTranslations('Hero')` (next-intl) разрешается правильно. При обратной записи все пространства имен снова собираются в тот же файл для каждой локали.
243
+
244
+ > Когда вы сохраняете явный сегмент `{key}` в вашем `source` (например, `./locales/${locale}/${key}.json`), каждый файл уже является одним пространством имен, поэтому разделение по умолчанию отключено.
140
245
 
141
- Вы можете добавить несколько плагинов `syncJSON` для синхронизации разных источников JSON. Это полезно, если в вашем проекте используются несколько библиотек i18n или разные структуры JSON.
246
+ ### Несколько источников JSON и приоритет
142
247
 
143
- ### Система приоритетов
248
+ Вы можете добавить несколько плагинов `syncJSON` для синхронизации различных источников JSON. Это полезно, когда у вас есть несколько библиотек i18n или различные структуры JSON в вашем проекте.
144
249
 
145
- Когда несколько плагинов нацелены на один и тот же ключ словаря, параметр `priority` определяет, какой плагин имеет преимущество:
250
+ #### Система приоритетов
146
251
 
147
- - Побеждает плагин с более высоким числом приоритета
252
+ Когда несколько плагинов нацелены на один и тот же ключ словаря, параметр `priority` определяет, какой плагин имеет приоритет:
253
+
254
+ - Более высокие номера приоритета преобладают над более низкими
148
255
  - Приоритет по умолчанию для файлов `.content` равен `0`
149
- - Приоритет по умолчанию для файлов плагинов равен `-1`
256
+ - Приоритет по умолчанию для плагинов равен `0`
150
257
  - Плагины с одинаковым приоритетом обрабатываются в порядке их появления в конфигурации
151
258
 
152
259
  ```ts fileName="intlayer.config.ts"
@@ -160,7 +267,7 @@ const config: IntlayerConfig = {
160
267
  },
161
268
 
162
269
  plugins: [
163
- // Основной источник JSON (наивысший приоритет)
270
+ // Primary JSON source (highest priority)
164
271
  syncJSON({
165
272
  format: "i18next",
166
273
  source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
@@ -168,7 +275,7 @@ const config: IntlayerConfig = {
168
275
  priority: 10,
169
276
  }),
170
277
 
171
- // Резервный источник JSON (низший приоритет)
278
+ // Fallback JSON source (lower priority)
172
279
  syncJSON({
173
280
  format: "i18next",
174
281
  source: ({ locale }) => `./fallback-locales/${locale}.json`,
@@ -176,7 +283,7 @@ const config: IntlayerConfig = {
176
283
  priority: 5,
177
284
  }),
178
285
 
179
- // Источник устаревших JSON (самый низкий приоритет)
286
+ // Legacy JSON source (lowest priority)
180
287
  syncJSON({
181
288
  format: "i18next",
182
289
  source: ({ locale }) => `/my/other/app/legacy/${locale}/messages.json`,
@@ -189,93 +296,160 @@ const config: IntlayerConfig = {
189
296
  export default config;
190
297
  ```
191
298
 
192
- ### Разрешение конфликтов
299
+ ## Load JSON plugin
300
+
301
+ ### Быстрый старт
193
302
 
194
- Когда один и тот же ключ перевода присутствует в нескольких JSON-источниках:
303
+ Добавьте плагин в ваш `intlayer.config.ts`, чтобы импортировать существующие JSON-файлы как словари Intlayer. Этот плагин предназначен только для чтения (без записи на диск):
195
304
 
196
- 1. Плагин с наивысшим приоритетом определяет итоговое значение
197
- 2. Источники с более низким приоритетом используются как резервные для отсутствующих ключей
198
- 3. Это позволяет поддерживать устаревшие переводы, постепенно переходя на новые структуры
305
+ ```ts fileName="intlayer.config.ts"
306
+ import { Locales, type IntlayerConfig } from "intlayer";
307
+ import { loadJSON } from "@intlayer/sync-json-plugin";
199
308
 
200
- ## Интеграции
309
+ const config: IntlayerConfig = {
310
+ internationalization: {
311
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
312
+ defaultLocale: Locales.ENGLISH,
313
+ },
201
314
 
202
- Ниже приведены распространённые сопоставления. Не изменяйте ваше окружение выполнения; просто добавьте плагин.
315
+ plugins: [
316
+ // Импорт JSON-сообщений, расположенных в любом месте вашего исходного дерева
317
+ loadJSON({
318
+ source: ({ key }) => `./src/**/${key}.i18n.json`,
319
+ // Загрузка одной локали для каждого экземпляра плагина (по умолчанию используется defaultLocale из конфигурации)
320
+ locale: Locales.ENGLISH,
321
+ priority: 0,
322
+ }),
323
+ ],
324
+ };
203
325
 
204
- ### i18next
326
+ export default config;
327
+ ```
205
328
 
206
- Типичная структура файлов: `./public/locales/{locale}/{namespace}.json` или `./locales/{locale}/{namespace}.json`.
329
+ Альтернатива: макет для каждой локали, только для чтения (загружается только выбранная локаль):
207
330
 
208
331
  ```ts fileName="intlayer.config.ts"
209
- import { syncJSON } from "@intlayer/sync-json-plugin";
332
+ import { Locales, type IntlayerConfig } from "intlayer";
333
+ import { loadJSON } from "@intlayer/sync-json-plugin";
210
334
 
211
- export default {
335
+ const config: IntlayerConfig = {
336
+ internationalization: {
337
+ locales: [Locales.ENGLISH, Locales.FRENCH],
338
+ defaultLocale: Locales.ENGLISH,
339
+ },
212
340
  plugins: [
213
- syncJSON({
214
- format: "i18next",
341
+ loadJSON({
342
+ // Только файлы для Locales.FRENCH будут загружены по этому шаблону
215
343
  source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
344
+ locale: Locales.FRENCH,
216
345
  }),
217
346
  ],
218
347
  };
348
+
349
+ export default config;
219
350
  ```
220
351
 
221
- ### next-intl
352
+ ### Как это работает
222
353
 
223
- JSON-сообщения для каждого локаля (часто `./messages/{locale}.json`) или по namespace.
354
+ - Обнаружение: создает glob из вашего `source` билдера и собирает соответствующие JSON-файлы.
355
+ - Импорт: загружает каждый JSON-файл как словарь Intlayer с предоставленной `locale`.
356
+ - Только для чтения: не записывает и не форматирует выходные файлы; используйте `syncJSON`, если вам нужна двусторонняя синхронизация.
357
+ - Готовность к автозаполнению: определяет шаблон `fill`, чтобы `intlayer content fill` мог заполнять отсутствующие ключи.
224
358
 
225
- ```ts fileName="intlayer.config.ts"
226
- plugins: [
227
- syncJSON({
228
- source: ({ locale, key }) => `./messages/${locale}/${key}.json`,
229
- }),
230
- ];
359
+ ### API
360
+
361
+ ```ts
362
+ loadJSON({
363
+ // Build paths to your JSON. `locale` is optional if your structure has no locale segment
364
+ source: ({ key, locale }) => string,
365
+
366
+ // Target locale for the dictionaries loaded by this plugin instance
367
+ // Defaults to configuration.internationalization.defaultLocale
368
+ locale?: Locale,
369
+
370
+ // Optional label to identify the source
371
+ location?: string, // default: "plugin"
372
+
373
+ // Priority used for conflict resolution against other sources
374
+ priority?: number, // default: 0
375
+
376
+ // Optional formatter for the JSON content
377
+ format?: 'intlayer' | 'icu' | 'i18next', // default: 'intlayer'
378
+
379
+ // Разделяет один файл на один словарь для каждого ключа верхнего уровня (автоматическое определение)
380
+ splitKeys?: boolean,
381
+ });
231
382
  ```
232
383
 
233
- См. также: `docs/ru/intlayer_with_next-intl.md`.
384
+ #### `format` ('intlayer' | 'icu' | 'i18next')
385
+
386
+ Указывает форматтер, который будет использоваться для содержимого словаря при загрузке JSON-файлов. Это позволяет использовать различные синтаксисы форматирования сообщений, совместимые с различными библиотеками i18n.
234
387
 
235
- ### react-intl
388
+ - `'intlayer'`: Форматтер Intlayer по умолчанию (default).
389
+ - `'icu'`: Использует форматирование сообщений ICU (совместимо с такими библиотеками, как react-intl, vue-i18n).
390
+ - `'i18next'`: Использует форматирование сообщений i18next (совместимо с i18next, next-i18next, Solid-i18next).
236
391
 
237
- Обычно используется один JSON на локаль:
392
+ **Пример:**
238
393
 
239
- ```ts fileName="intlayer.config.ts"
240
- plugins: [
241
- syncJSON({
242
- source: ({ locale }) => `./locales/${locale}.json`,
243
- }),
244
- ];
394
+ ```ts
395
+ loadJSON({
396
+ source: ({ key }) => `./src/**/${key}.i18n.json`,
397
+ locale: Locales.ENGLISH,
398
+ format: "icu", // Use ICU formatting for compatibility
399
+ }),
245
400
  ```
246
401
 
247
- ### vue-i18n
402
+ #### `splitKeys` (boolean)
248
403
 
249
- Либо один файл на локаль, либо по пространствам имён:
404
+ Поведение такое же, как в [`syncJSON`](#splitkeys-boolean): когда один JSON-файл группирует несколько пространств имен по своим ключам первого уровня, каждый ключ верхнего уровня становится своим собственным словарем.
250
405
 
251
- ```ts fileName="intlayer.config.ts"
252
- plugins: [
253
- syncJSON({
254
- source: ({ key, locale }) => `./src/locales/${locale}/${key}.json`, // источник файлов локализации
255
- }),
256
- ];
406
+ - `undefined` (по умолчанию): **автоматическое определение** — разделение происходит, когда шаблон `source` не содержит сегмента `{key}`, в противном случае — один словарь.
407
+ - `true` / `false`: принудительное включение или отключение разделения.
408
+
409
+ ```ts
410
+ loadJSON({
411
+ source: ({ locale }) => `./messages/${locale}.json`,
412
+ format: "icu",
413
+ // splitKeys auto-enabled: `Hero`, `Nav`, `About`, … each become a dictionary
414
+ }),
257
415
  ```
258
416
 
417
+ ### Поведение и соглашения
418
+
419
+ - Если ваша маска `source` включает плейсхолдер локали, будут импортированы только файлы для выбранной `locale`.
420
+ - Если в вашей маске нет сегмента `{key}`, каждый ключ верхнего уровня файла становится отдельным словарем по умолчанию (см. [splitKeys](#splitkeys-boolean)). Установите `splitKeys: false`, чтобы вместо этого загрузить весь файл как единый словарь `index`.
421
+ - Ключи выводятся из путей к файлам путем подстановки плейсхолдера `{key}` в вашем `source` билдере.
422
+ - Плагин использует только обнаруженные файлы и не создает отсутствующие локали или ключи.
423
+ - Путь `fill` выводится из вашего `source` и используется для обновления отсутствующих значений через CLI, когда вы соглашаетесь.
424
+
425
+ ## Разрешение конфликтов
426
+
427
+ Когда один и тот же ключ перевода существует в нескольких источниках JSON:
428
+
429
+ 1. Плагин с наивысшим приоритетом определяет окончательное значение
430
+ 2. Источники с более низким приоритетом используются в качестве запасных для отсутствующих ключей
431
+ 3. Это позволяет вам поддерживать устаревшие переводы, постепенно переходя к новым структурам
432
+
259
433
  ## CLI
260
434
 
261
- Синхронизированные JSON-файлы будут рассматриваться как другие файлы с расширением `.content`. Это означает, что все команды intlayer будут доступны для синхронизированных JSON-файлов, включая:
435
+ Синхронизированные JSON-файлы будут рассматриваться как другие файлы `.content`. Это означает, что все команды intlayer будут доступны для синхронизированных JSON-файлов. Включая:
262
436
 
263
- - `intlayer content test` для проверки отсутствующих переводов
437
+ - `intlayer content test` для проверки наличия отсутствующих переводов
264
438
  - `intlayer content list` для вывода списка синхронизированных JSON-файлов
265
439
  - `intlayer content fill` для заполнения отсутствующих переводов
266
440
  - `intlayer content push` для отправки синхронизированных JSON-файлов
267
- - `intlayer content pull` для загрузки синхронизированных JSON-файлов
441
+ - `intlayer content pull` для получения синхронизированных JSON-файлов
268
442
 
269
- См. [Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/index.md) для получения дополнительной информации.
443
+ Подробнее см. в [Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/index.md).
270
444
 
271
445
  ## Ограничения (текущие)
272
446
 
273
- - Нет поддержки вставок или множественного числа/ICU при работе с библиотеками третьих сторон.
274
- - Визуальный редактор пока недоступен для сред выполнения, не являющихся Intlayer.
275
- - Синхронизация только JSON; форматы каталогов, не являющиеся JSON, не поддерживаются.
447
+ - Нет поддержки вставок или множественного числа/ICU при работе со сторонними библиотеками.
448
+ - Визуальный редактор пока недоступен для рантаймов, отличных от Intlayer.
449
+ - Только синхронизация JSON; форматы каталогов, отличные от JSON, не поддерживаются.
276
450
 
277
451
  ## Почему это важно
278
452
 
279
453
  - Мы можем рекомендовать проверенные решения i18n и позиционировать Intlayer как дополнение.
280
- - Мы используем их SEO/ключевые слова с помощью руководств, которые заканчиваются предложением использовать Intlayer для управления JSON.
281
- - Расширяет целевую аудиторию с «новых проектов» до «любых команд, уже использующих i18n».
454
+ - Мы используем их SEO/ключевые слова с руководствами, которые заканчиваются предложением Intlayer для управления JSON.
455
+ - Расширяет целевую аудиторию от «новых проектов» до «любой команды, уже использующей i18n».