@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-10-05
3
+ updatedAt: 2026-06-21
4
4
  title: Sync JSON plugin
5
5
  description: Synchronise Intlayer dictionaries with third‑party i18n JSON files (i18next, next-intl, react-intl, vue-i18n, and more). Keep your existing i18n while using Intlayer to manage, translate, and test your messages.
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: "Add splitKeys option (one dictionary per top-level namespace key) for next-intl / react-intl single-file layouts"
27
30
  - version: 7.5.0
28
31
  date: 2025-12-13
29
32
  changes: "Add ICU and i18next format support"
@@ -41,7 +44,7 @@ Use Intlayer as an add‑on to your existing i18n stack. This plugin keeps your
41
44
 
42
45
  - Keep i18next, next‑intl, react‑intl, vue‑i18n, next‑translate, nuxt‑i18n, Solid‑i18next, svelte‑i18n, etc.
43
46
  - Manage and translate your messages with Intlayer (CLI, CI, providers, CMS), without refactoring your app.
44
- - Deliver tutorials and SEO content targeting each ecosystem, while recommending Intlayer as the JSON management layer.
47
+ - Deliver tutorials and SEO content targeting each ecosystem, whilst recommending Intlayer as the JSON management layer.
45
48
 
46
49
  Notes and current scope:
47
50
 
@@ -62,7 +65,63 @@ pnpm add -D @intlayer/sync-json-plugin
62
65
  npm i -D @intlayer/sync-json-plugin
63
66
  ```
64
67
 
65
- ## Quick start
68
+ ## Plugins
69
+
70
+ This package provides two plugins:
71
+
72
+ - `loadJSON`: Load JSON files into Intlayer dictionaries.
73
+ - This plugin is used to load JSON files from a source and will be loaded into Intlayer dictionaries. It can scan all the codebase and search for specific JSON files.
74
+ This plugin can be used
75
+ - if you use an i18n library that imposes a specific location for your JSON to be loaded (ex: `next-intl`, `i18next`, `react-intl`, `vue-i18n`, etc.), but you want to place your content declaration where you want in your code base.
76
+ - It can also be used if you want to fetch your messages from a remote source (ex: a CMS, an API, etc.) and store your messages in JSON files.
77
+
78
+ > Under the hood, this plugin will scan all the codebase and search for specific JSON files and load them into Intlayer dictionaries.
79
+ > Note that this plugin will not write the output and translations back to the JSON files.
80
+
81
+ - `syncJSON`: Synchronise JSON files with Intlayer dictionaries.
82
+ - This plugin is used to synchronise JSON files with Intlayer dictionaries. It can scan the given location and load the JSON that match the pattern for specific JSON files. This plugin is useful if you want to get the benefits of Intlayer whilst using another i18n library.
83
+
84
+ ## Using both plugins
85
+
86
+ ```ts fileName="intlayer.config.ts"
87
+ import { Locales, type IntlayerConfig } from "intlayer";
88
+ import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
89
+
90
+ const config: IntlayerConfig = {
91
+ internationalization: {
92
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
93
+ defaultLocale: Locales.ENGLISH,
94
+ },
95
+
96
+ // Keep your current JSON files in sync with Intlayer dictionaries
97
+ plugins: [
98
+ /**
99
+ * Will load all the JSON files in the src that match the pattern {key}.i18n json
100
+ */
101
+ loadJSON({
102
+ source: ({ key }) => `./src/**/${key}.i18n.json`,
103
+ locale: Locales.ENGLISH,
104
+ priority: 1, // Ensures these JSON files take precedence over files at `./locales/en/${key}.json`
105
+ format: "intlayer", // Format of the JSON content
106
+ }),
107
+ /**
108
+ * Will load, and write the output and translations back to the JSON files in the locales directory
109
+ */
110
+ syncJSON({
111
+ format: "i18next",
112
+ source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
113
+ priority: 0,
114
+ format: "i18next",
115
+ }),
116
+ ],
117
+ };
118
+
119
+ export default config;
120
+ ```
121
+
122
+ ## `syncJSON` plugin
123
+
124
+ ### Quick start
66
125
 
67
126
  Add the plugin to your `intlayer.config.ts` and point it at your existing JSON structure.
68
127
 
@@ -81,6 +140,7 @@ const config: IntlayerConfig = {
81
140
  syncJSON({
82
141
  // Per-locale, per-namespace layout (e.g., next-intl, i18next with namespaces)
83
142
  source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
143
+ format: "icu",
84
144
  }),
85
145
  ],
86
146
  };
@@ -91,14 +151,27 @@ export default config;
91
151
  Alternative: single file per locale (common with i18next/react-intl setups):
92
152
 
93
153
  ```ts fileName="intlayer.config.ts"
94
- plugins: [
95
- syncJSON({
96
- source: ({ locale }) => `./locales/${locale}.json`,
97
- }),
98
- ];
154
+ import { Locales, type IntlayerConfig } from "intlayer";
155
+ import { syncJSON } from "@intlayer/sync-json-plugin";
156
+
157
+ const config: IntlayerConfig = {
158
+ internationalization: {
159
+ locales: [Locales.ENGLISH, Locales.FRENCH],
160
+ defaultLocale: Locales.ENGLISH,
161
+ },
162
+ plugins: [
163
+ syncJSON({
164
+ format: "i18next",
165
+ source: ({ locale }) => `./locales/${locale}.json`,
166
+ format: "i18next",
167
+ }),
168
+ ],
169
+ };
170
+
171
+ export default config;
99
172
  ```
100
173
 
101
- ### How it works
174
+ #### How it works
102
175
 
103
176
  - Read: the plugin discovers JSON files from your `source` builder and loads them as Intlayer dictionaries.
104
177
  - Write: after builds and fills, it writes localised JSON back to the same paths (with a final newline to avoid formatting issues).
@@ -112,6 +185,7 @@ syncJSON({
112
185
  location?: string, // optional label, default: "plugin"
113
186
  priority?: number, // optional priority for conflict resolution, default: 0
114
187
  format?: 'intlayer' | 'icu' | 'i18next', // optional formatter, used for intlayer runtime compatibility
188
+ splitKeys?: boolean, // optional, split a single file into one dictionary per top-level key (auto-detected)
115
189
  });
116
190
  ```
117
191
 
@@ -136,17 +210,49 @@ syncJSON({
136
210
  }),
137
211
  ```
138
212
 
139
- ## Multiple JSON sources and priority
213
+ #### `splitKeys` (boolean)
214
+
215
+ Controls whether a single JSON file whose **first-level keys are namespaces** should become one dictionary per top-level key, instead of a single dictionary holding the whole file.
216
+
217
+ This matches the namespace model of libraries like `next-intl` and `react-intl`, where one `messages/{locale}.json` file groups several namespaces by its first-level keys, each addressed independently (e.g. `useTranslations('Hero')` resolves to the `Hero` dictionary).
218
+
219
+ - `undefined` (default): **auto-detected** — the file is split when the `source` pattern has no `{key}` segment (one file holds every namespace), and kept as a single dictionary otherwise (one file per key).
220
+ - `true`: always split each top-level key into its own dictionary.
221
+ - `false`: never split; the whole file becomes a single dictionary.
222
+
223
+ Given a single `messages/{locale}.json` file:
224
+
225
+ ```json fileName="messages/en.json"
226
+ {
227
+ "Hero": { "title": "Full-stack developer" },
228
+ "Nav": { "work": "Work", "about": "About" },
229
+ "About": { "lead": "I build apps end to end." }
230
+ }
231
+ ```
232
+
233
+ ```ts fileName="intlayer.config.ts"
234
+ syncJSON({
235
+ format: "icu",
236
+ source: ({ locale }) => `./messages/${locale}.json`,
237
+ // splitKeys: true, // implied because the pattern has no `{key}` segment
238
+ }),
239
+ ```
240
+
241
+ This produces three dictionaries — `Hero`, `Nav`, and `About` — so `useTranslations('Hero')` (next-intl) resolves correctly. On write-back, all namespaces are re-assembled into the same per-locale file.
242
+
243
+ > When you keep the explicit `{key}` segment in your `source` (e.g. `./locales/${locale}/${key}.json`), each file is already one namespace, so splitting is disabled by default.
244
+
245
+ ### Multiple JSON sources and priority
140
246
 
141
247
  You can add multiple `syncJSON` plugins to synchronise different JSON sources. This is useful when you have multiple i18n libraries or different JSON structures in your project.
142
248
 
143
- ### Priority system
249
+ #### Priority system
144
250
 
145
251
  When multiple plugins target the same dictionary key, the `priority` parameter determines which plugin takes precedence:
146
252
 
147
253
  - Higher priority numbers win over lower ones
148
254
  - Default priority of `.content` files is `0`
149
- - Default priority of plugins content files is `-1`
255
+ - Default priority of plugins is `0`
150
256
  - Plugins with the same priority are processed in the order they appear in the configuration
151
257
 
152
258
  ```ts fileName="intlayer.config.ts"
@@ -189,7 +295,133 @@ const config: IntlayerConfig = {
189
295
  export default config;
190
296
  ```
191
297
 
192
- ### Conflict resolution
298
+ ## Load JSON plugin
299
+
300
+ ### Quick start
301
+
302
+ Add the plugin to your `intlayer.config.ts` to ingest existing JSON files as Intlayer dictionaries. This plugin is read‑only (no writes to disk):
303
+
304
+ ```ts fileName="intlayer.config.ts"
305
+ import { Locales, type IntlayerConfig } from "intlayer";
306
+ import { loadJSON } from "@intlayer/sync-json-plugin";
307
+
308
+ const config: IntlayerConfig = {
309
+ internationalization: {
310
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
311
+ defaultLocale: Locales.ENGLISH,
312
+ },
313
+
314
+ plugins: [
315
+ // Ingest JSON messages located anywhere in your source tree
316
+ loadJSON({
317
+ source: ({ key }) => `./src/**/${key}.i18n.json`,
318
+ // Load a single locale per plugin instance (defaults to the config defaultLocale)
319
+ locale: Locales.ENGLISH,
320
+ priority: 0,
321
+ }),
322
+ ],
323
+ };
324
+
325
+ export default config;
326
+ ```
327
+
328
+ Alternative: per‑locale layout, still read‑only (only the selected locale is loaded):
329
+
330
+ ```ts fileName="intlayer.config.ts"
331
+ import { Locales, type IntlayerConfig } from "intlayer";
332
+ import { loadJSON } from "@intlayer/sync-json-plugin";
333
+
334
+ const config: IntlayerConfig = {
335
+ internationalization: {
336
+ locales: [Locales.ENGLISH, Locales.FRENCH],
337
+ defaultLocale: Locales.ENGLISH,
338
+ },
339
+ plugins: [
340
+ loadJSON({
341
+ // Only files for Locales.FRENCH will be loaded from this pattern
342
+ source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
343
+ locale: Locales.FRENCH,
344
+ }),
345
+ ],
346
+ };
347
+
348
+ export default config;
349
+ ```
350
+
351
+ ### How it works
352
+
353
+ - Discover: builds a glob from your `source` builder and collects matching JSON files.
354
+ - Ingest: loads each JSON file as an Intlayer dictionary with the provided `locale`.
355
+ - Read‑only: does not write or format output files; use `syncJSON` if you need round‑trip sync.
356
+ - Auto‑fill ready: defines a `fill` pattern so `intlayer content fill` can populate missing keys.
357
+
358
+ ### API
359
+
360
+ ```ts
361
+ loadJSON({
362
+ // Build paths to your JSON. `locale` is optional if your structure has no locale segment
363
+ source: ({ key, locale }) => string,
364
+
365
+ // Target locale for the dictionaries loaded by this plugin instance
366
+ // Defaults to configuration.internationalization.defaultLocale
367
+ locale?: Locale,
368
+
369
+ // Optional label to identify the source
370
+ location?: string, // default: "plugin"
371
+
372
+ // Priority used for conflict resolution against other sources
373
+ priority?: number, // default: 0
374
+
375
+ // Optional formatter for the JSON content
376
+ format?: 'intlayer' | 'icu' | 'i18next', // default: 'intlayer'
377
+
378
+ // Split a single file into one dictionary per top-level key (auto-detected)
379
+ splitKeys?: boolean,
380
+ });
381
+ ```
382
+
383
+ #### `format` ('intlayer' | 'icu' | 'i18next')
384
+
385
+ Specifies the formatter to use for the dictionary content when loading JSON files. This allows using different message formatting syntaxes compatible with various i18n libraries.
386
+
387
+ - `'intlayer'`: The default Intlayer formatter (default).
388
+ - `'icu'`: Uses ICU message formatting (compatible with libraries like react-intl, vue-i18n).
389
+ - `'i18next'`: Uses i18next message formatting (compatible with i18next, next-i18next, Solid-i18next).
390
+
391
+ **Example:**
392
+
393
+ ```ts
394
+ loadJSON({
395
+ source: ({ key }) => `./src/**/${key}.i18n.json`,
396
+ locale: Locales.ENGLISH,
397
+ format: "icu", // Use ICU formatting for compatibility
398
+ }),
399
+ ```
400
+
401
+ #### `splitKeys` (boolean)
402
+
403
+ Same behaviour as in [`syncJSON`](#splitkeys-boolean): when a single JSON file groups several namespaces by its first-level keys, each top-level key becomes its own dictionary.
404
+
405
+ - `undefined` (default): **auto-detected** — split when the `source` pattern has no `{key}` segment, single dictionary otherwise.
406
+ - `true` / `false`: force or disable splitting.
407
+
408
+ ```ts
409
+ loadJSON({
410
+ source: ({ locale }) => `./messages/${locale}.json`,
411
+ format: "icu",
412
+ // splitKeys auto-enabled: `Hero`, `Nav`, `About`, … each become a dictionary
413
+ }),
414
+ ```
415
+
416
+ ### Behavior and conventions
417
+
418
+ - If your `source` mask includes a locale placeholder, only files for the selected `locale` are ingested.
419
+ - If there is no `{key}` segment in your mask, each top-level key of the file becomes its own dictionary by default (see [`splitKeys`](#splitkeys-boolean)). Set `splitKeys: false` to instead load the whole file as a single `index` dictionary.
420
+ - Keys are derived from file paths by substituting the `{key}` placeholder in your `source` builder.
421
+ - The plugin only uses discovered files and does not fabricate missing locales or keys.
422
+ - The `fill` path is inferred from your `source` and used to update missing values via CLI when you opt‑in.
423
+
424
+ ## Conflict resolution
193
425
 
194
426
  When the same translation key exists in multiple JSON sources:
195
427
 
@@ -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: New Intlayer v8 - What's new?
5
5
  description: Discover what's new in Intlayer v8. Major improvements in developer experience, content validation, and dictionary management.
6
6
  keywords:
@@ -0,0 +1,220 @@
1
+ ---
2
+ createdAt: 2026-06-14
3
+ updatedAt: 2026-06-14
4
+ title: New Intlayer v9 - What's new?
5
+ description: Discover what's new in Intlayer v9. Introducing drop-in compatibility packages for popular i18n libraries and support for Collections, Variants, and Dynamic Records.
6
+ keywords:
7
+ - Intlayer
8
+ - Compatibility
9
+ - Migration
10
+ - Collections
11
+ - Variants
12
+ - Dynamic Records
13
+ - i18next
14
+ - next-intl
15
+ - vue-i18n
16
+ slugs:
17
+ - doc
18
+ - releases
19
+ - v9
20
+ author: aymericzip
21
+ ---
22
+
23
+ # New Intlayer v9 - What's new?
24
+
25
+ Welcome to Intlayer v9! This major release marks a huge milestone in simplifying the migration path to Intlayer with **Compat Adapter Packages** for major i18n libraries (`react-i18next`, `next-intl`, `vue-i18n`, etc.) and adds support for rich content structures: **Collections**, **Variants**, and **Dynamic Records**.
26
+
27
+ ## Table of contents
28
+
29
+ <TOC levels={[2]} maxDepth={1} />
30
+
31
+ ---
32
+
33
+ ## Compat Adapter Packages
34
+
35
+ Migrating to Intlayer from popular i18n libraries is now easier than ever. We have created five compat packages that expose the **exact same public APIs** as standard i18n libraries but delegate all translation work to Intlayer at runtime.
36
+
37
+ ### Expose Same Public API with Strict Typing
38
+
39
+ By replacing imports, you get all the benefits of Intlayer (including compile-time type safety against your actual dictionaries) with minimal code changes:
40
+
41
+ - `@intlayer/i18next`
42
+ - `@intlayer/react-i18next`
43
+ - `@intlayer/next-intl`
44
+ - `@intlayer/next-i18next`
45
+ - `@intlayer/vue-i18n`
46
+
47
+ For example, simply change:
48
+
49
+ ```ts
50
+ import { useTranslation } from "react-i18next";
51
+ ```
52
+
53
+ to:
54
+
55
+ ```ts
56
+ import { useTranslation } from "@intlayer/react-i18next";
57
+ ```
58
+
59
+ Your keys will now be **strictly typed** against your Intlayer dictionaries, offering full dot-path auto-completion in your IDE!
60
+
61
+ ### Bundler Alias Plugins (Vite, Next.js, Turbopack)
62
+
63
+ To allow migrating without rewriting all your import statements manually, each compat adapter package includes a **custom bundler plugin** (Vite or Next.js) under the `/plugin` subpath.
64
+
65
+ These plugins automatically rewrite existing imports (e.g. `react-i18next` or `next-intl`) to their `@intlayer/*` equivalents at build time.
66
+
67
+ #### Next.js (Webpack / Turbopack) Example
68
+
69
+ Instead of `withIntlayer`, wrap your Next.js configuration with the compat plugin:
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) Example
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
+ All compat adapters now route translation resolution through a single, highly optimised runtime parser: `@intlayer/core/messageFormat`.
96
+
97
+ - **Interpolate Message**: Resolves standard `{{var}}` (whitespace & dot-paths), ICU formatted args (`{v, number, percent}` etc.), and bare `{var}` templates.
98
+ - **Message Node Resolver**: Resolves nested nodes: `insert()`, `plural()` (CLDR plural rules), `enu()` (enumeration), `gender()`, HTML tags, arrays, and callable function nodes.
99
+ - **Tokenised Tag Parser**: Supports inline XML/HTML tags and numbered tags (e.g., `<1>children</1>`) to power rich-text rendering out of the box.
100
+
101
+ ---
102
+
103
+ ## Feature Spec: Collections, Variants & Dynamic Records
104
+
105
+ Intlayer v9 expands beyond static key-value objects, allowing dictionaries to declare dynamic layout structures that are fully typed end-to-end.
106
+
107
+ ### 1. Collections
108
+
109
+ Define a CMS-managed list of ordered items (e.g. FAQs, products, or blog lists):
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({ en: "What is Intlayer?", fr: "Qu'est-ce qu'Intlayer ?" }),
119
+ answer: t({ en: "An i18n toolkit.", fr: "Une boîte à outils i18n." }),
120
+ },
121
+ ],
122
+ } satisfies Dictionary;
123
+ ```
124
+
125
+ #### Usage:
126
+
127
+ ```ts
128
+ // Fetch all items
129
+ const allFaqs = useIntlayer("faq"); // -> { question: string, answer: string }[]
130
+
131
+ // Fetch single item by index
132
+ const faq = useIntlayer("faq", { item: 1 }); // -> { question: string, answer: string }
133
+ ```
134
+
135
+ ### 2. Variants
136
+
137
+ Deliver A/B tests, seasonal headers, feature flags, or custom landing pages:
138
+
139
+ ```ts fileName="hero.content.ts"
140
+ import { t, type Dictionary } from "intlayer";
141
+
142
+ export default {
143
+ key: "hero-banner",
144
+ variant: "default",
145
+ content: {
146
+ control: t({ en: "Welcome", fr: "Bienvenue" }),
147
+ black_friday: t({ en: "Shop now", fr: "Acheter maintenant" }),
148
+ },
149
+ } satisfies Dictionary;
150
+ ```
151
+
152
+ #### Usage:
153
+
154
+ ```ts
155
+ const banner = useIntlayer("hero-banner", { variant: "black_friday" });
156
+ ```
157
+
158
+ ### 3. Dynamic Records
159
+
160
+ Define dictionaries whose entries are loaded dynamically at runtime via query IDs:
161
+
162
+ ```ts fileName="product.content.ts"
163
+ import { t, type Dictionary } from "intlayer";
164
+
165
+ export default {
166
+ key: "product-copy",
167
+ meta: {
168
+ id: "prod_123",
169
+ category: "books",
170
+ },
171
+ content: {
172
+ title: t({ en: "Clean Code", fr: "Code Propre" }),
173
+ },
174
+ } satisfies Dictionary;
175
+ ```
176
+
177
+ #### Usage:
178
+
179
+ ```ts
180
+ // Fetches only the requested item dynamically (requires Suspense)
181
+ const product = useIntlayer("product-copy", {
182
+ id: "prod_123",
183
+ category: "books",
184
+ });
185
+ ```
186
+
187
+ ---
188
+
189
+ ## Dynamic Loading & Bundle Size Optimisations
190
+
191
+ To keep bundles extremely small, Intlayer v9 supports dynamic lazy loading.
192
+
193
+ In your configuration, set `importMode` to `'dynamic'` or `'fetch'`:
194
+
195
+ ```ts fileName="intlayer.config.ts"
196
+ export default {
197
+ dictionary: {
198
+ importMode: "dynamic", // "static" | "dynamic" | "fetch"
199
+ },
200
+ };
201
+ ```
202
+
203
+ At build time, `@intlayer/swc` and `@intlayer/babel` scan your files and replace `useIntlayer` / `getIntlayer` calls with tree-shakeable wrappers (`useDictionary` / `useDictionaryDynamic`). Only the content required for the selected collection item, variant, or locale is loaded, preventing your production bundle from containing unused translations.
204
+
205
+ ---
206
+
207
+ ## Migration notes from v8
208
+
209
+ If you are upgrading from v8, note that the v9 does not include breaking changes. But here are the key changes:
210
+
211
+ - **Locales & Dialects**: If using external i18n dependencies, add their respective compat adapter plugins in your configuration or bundler setup to automatically rewrite imports.
212
+ - **Custom Selectors**: When calling `useIntlayer`, the second parameter is now reserved for an option object containing `{ locale, item, variant, id }`. If you previously passed a locale string directly, you can still do so, but using the options object is recommended for advanced selections.
213
+
214
+ ---
215
+
216
+ ## Useful links
217
+
218
+ - [Compat Adapter Packages Guide](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/compat/index.md)
219
+ - [Dynamic Dictionaries - Collections, Variants & Dynamic Records](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dynamic_dictionaries/index.md)
220
+ - [Configuration Reference](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/configuration.md)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2024-08-11
3
- updatedAt: 2025-11-22
3
+ updatedAt: 2026-06-17
4
4
  title: Revisar Documento
5
5
  description: Aprende cómo revisar archivos de documentación para calidad, consistencia y completitud en diferentes locales.
6
6
  keywords:
@@ -15,6 +15,10 @@ slugs:
15
15
  - concept
16
16
  - cli
17
17
  - doc-review
18
+ history:
19
+ - version: 9.0.0
20
+ date: 2026-06-17
21
+ changes: "Añadir opción --log"
18
22
  author: aymericzip
19
23
  ---
20
24
 
@@ -55,8 +59,110 @@ Para la mayoría de los casos de uso,
55
59
 
56
60
  ## Argumentos:
57
61
 
58
- El comando `doc review` acepta los mismos argumentos que `doc translate`, permitiéndote revisar archivos de documentación específicos y aplicar controles de calidad.
62
+ **Opciones de lista de archivos:**
59
63
 
60
- Si activaste una de las opciones de git, el comando solo revisará la parte de los archivos que están siendo modificados. El script procesará el archivo dividiéndolo en fragmentos y revisará cada fragmento. Si no hay cambios en el fragmento, el script lo omitirá para acelerar el proceso de revisión y limitar el costo de la API del proveedor de IA.
64
+ - **`--doc-pattern [docPattern...]`**: Patrones glob para coincidir con archivos de documentación a revisar.
61
65
 
62
- Para una lista completa de argumentos, consulta la documentación del comando [Translate Document](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/cli/doc-translate.md).
66
+ > Ejemplo: `npx intlayer doc review --doc-pattern "docs/**/*.md" "src/**/*.mdx"`
67
+
68
+ - **`--excluded-glob-pattern [excludedGlobPattern...]`**: Patrones glob para excluir archivos de la revisión.
69
+
70
+ > Ejemplo: `npx intlayer doc review --excluded-glob-pattern "docs/internal/**"`
71
+
72
+ - **`--skip-if-modified-before [skipIfModifiedBefore]`**: Omitir el archivo si ha sido modificado antes del tiempo dado.
73
+ - Puede ser un tiempo absoluto como "2025-12-05" (string o Date)
74
+ - Puede ser un tiempo relativo en ms `1 * 60 * 60 * 1000` (1 hora)
75
+ - Esta opción verifica la hora de actualización del archivo usando el método `fs.stat`. Por lo tanto, podría verse afectada por Git u otras herramientas que modifiquen el archivo.
76
+
77
+ > Ejemplo: `npx intlayer doc review --skip-if-modified-before "2025-12-05"`
78
+
79
+ - **`--skip-if-modified-after [skipIfModifiedAfter]`**: Omitir el archivo si ha sido modificado dentro del tiempo dado.
80
+ - Puede ser un tiempo absoluto como "2025-12-05" (string o Date)
81
+ - Puede ser un tiempo relativo en ms `1 * 60 * 60 * 1000` (1 hora)
82
+ - Esta opción verifica la hora de actualización del archivo usando el método `fs.stat`. Por lo tanto, podría verse afectada por Git u otras herramientas que modifiquen el archivo.
83
+
84
+ > Ejemplo: `npx intlayer doc review --skip-if-modified-after "2025-12-05"`
85
+
86
+ - **`--skip-if-exists`**: Omitir el archivo si ya existe.
87
+
88
+ > Ejemplo: `npx intlayer doc review --skip-if-exists`
89
+
90
+ **Opciones de modo de revisión:**
91
+
92
+ - **`--log`**: Modo de solo registro. No traduce con IA; en su lugar, registra los bloques que necesitan atención (con números de línea y contenido) para los locales base y destino, para ayudar a otro agente a generar las traducciones.
93
+
94
+ > Ejemplo: `npx intlayer doc review --log`
95
+
96
+ **Opciones de salida de entrada:**
97
+
98
+ - **`--locales [locales...]`**: Locales de destino para revisar la documentación.
99
+
100
+ > Ejemplo: `npx intlayer doc review --locales fr es de`
101
+
102
+ - **`--base-locale [baseLocale]`**: Locale de origen (documento base) contra el cual comparar.
103
+
104
+ > Ejemplo: `npx intlayer doc review --base-locale en`
105
+
106
+ **Opciones de procesamiento de archivos:**
107
+
108
+ - **`--nb-simultaneous-file-processed [nbSimultaneousFileProcessed]`**: Número de archivos a procesar simultáneamente para la revisión.
109
+
110
+ > Ejemplo: `npx intlayer doc review --nb-simultaneous-file-processed 5`
111
+
112
+ **Opciones de IA:**
113
+
114
+ - **`--model [model]`**: El modelo de IA a usar para la revisión (por ejemplo, `gpt-3.5-turbo`).
115
+ - **`--provider [provider]`**: El proveedor de IA a usar para la revisión.
116
+ - **`--temperature [temperature]`**: Configuración de temperatura para el modelo de IA.
117
+ - **`--api-key [apiKey]`**: Proporciona tu propia clave API para el servicio de IA.
118
+ - **`--application-context [applicationContext]`**: Proporciona contexto adicional para la revisión de IA.
119
+ - **`--data-serialization [dataSerialization]`**: El formato de serialización de datos a utilizar para las funciones de IA de Intlayer. Opciones: `json` (estándar, confiable), `toon` (menos tokens, menos consistente).
120
+ - **`--custom-prompt [prompt]`**: Personaliza el prompt base utilizado para la revisión. (Nota: Para la mayoría de los casos, se recomienda usar la opción `--custom-instructions` en su lugar, ya que proporciona un mejor control.)
121
+
122
+ > Ejemplo: `npx intlayer doc review --model deepseek-chat --provider deepseek --temperature 0.5 --api-key sk-1234567890 --application-context "Mi aplicación es una tienda de gatos"`
123
+
124
+ **Opciones de variables de entorno:**
125
+
126
+ - **`--env`**: Especifica el entorno (por ejemplo, `development`, `production`).
127
+ - **`--env-file [envFile]`**: Proporciona un archivo de entorno personalizado para cargar variables.
128
+ - **`--base-dir`**: Especifica el directorio base para el proyecto.
129
+ - **`--no-cache`**: Desactiva la caché.
130
+
131
+ > Ejemplo: `npx intlayer doc review --base-dir ./docs --env-file .env.production.local`
132
+
133
+ **Opciones de registro:**
134
+
135
+ - **`--verbose`**: Habilita el registro detallado para depuración. (por defecto es true usando CLI)
136
+
137
+ > Ejemplo: `npx intlayer doc review --verbose`
138
+
139
+ **Opciones de instrucciones personalizadas:**
140
+
141
+ - **`--custom-instructions [customInstructions]`**: Instrucciones personalizadas añadidas al prompt. Útil para aplicar reglas específicas respecto al formato, traducción de URLs, etc.
142
+
143
+ > Ejemplo: `npx intlayer doc review --custom-instructions "Evitar traducir URLs y mantener el formato markdown"`
144
+
145
+ > Ejemplo: `npx intlayer doc review --custom-instructions "$(cat ./instructions.md)"`
146
+
147
+ **Opciones de Git:**
148
+
149
+ - **`--git-diff`**: Ejecutar solo en archivos que incluyan cambios desde la base (por defecto `origin/main`) hasta la rama actual (por defecto: `HEAD`).
150
+ - **`--git-diff-base`**: Especificar la referencia base para git diff (por defecto `origin/main`).
151
+ - **`--git-diff-current`**: Especificar la referencia actual para git diff (por defecto: `HEAD`).
152
+ - **`--uncommitted`**: Incluir cambios no confirmados.
153
+ - **`--unpushed`**: Incluir cambios no enviados.
154
+ - **`--untracked`**: Incluir archivos no rastreados.
155
+
156
+ > Ejemplo: `npx intlayer doc review --git-diff --git-diff-base origin/main --git-diff-current HEAD`
157
+
158
+ > Ejemplo: `npx intlayer doc review --uncommitted --unpushed --untracked`
159
+
160
+ > Tenga en cuenta que la ruta del archivo de salida se determinará reemplazando los siguientes patrones:
161
+ >
162
+ > - `/{{baseLocale}}/` por `/{{locale}}/` (Unix)
163
+ > - `\{{baseLocale}}\` por `\{{locale}}\` (Windows)
164
+ > - `_{{baseLocale}}.` por `_{{locale}}.`
165
+ > - `{{baseLocale}}_` por `{{locale}}_`
166
+ > - `.{{baseLocaleName}}.` por `.{{localeName}}.`
167
+ >
168
+ > Si no se encuentra el patrón, el archivo de salida añadirá `.{{locale}}` a la extensión del archivo. `./my/file.md` se revisará y actualizará a `./my/file.fr.md` para el locale francés.