@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
@@ -85,7 +85,10 @@ export default config;
85
85
 
86
86
  ## Sử dụng Dịch thuật trong Các Thành phần React
87
87
 
88
- Với `react-intlayer`, bạn có thể sử dụng các bản dịch trong các thành phần React. Dưới đây là một ví dụ:
88
+ <Tabs group="framework">
89
+ <Tab label="React" value="react">
90
+
91
+ With `react-intlayer`, you can use translations in React components. Here's an example:
89
92
 
90
93
  ```jsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
91
94
  import type { FC } from "react";
@@ -104,7 +107,158 @@ const MyComponent: FC = () => {
104
107
  export default MyComponent;
105
108
  ```
106
109
 
107
- Thành phần này lấy bản dịch tương ứng dựa trên locale hiện tại được thiết lập trong ứng dụng của bạn.
110
+ This component fetches the corresponding translation based on the current locale set in your application.
111
+
112
+ </Tab>
113
+ <Tab label="Next.js" value="nextjs">
114
+
115
+ With `next-intlayer`, you can use translations in React Server Components or Client Components. Here's an example in a Client Component:
116
+
117
+ ```tsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
118
+ "use client";
119
+
120
+ import type { FC } from "react";
121
+ import { useIntlayer } from "next-intlayer";
122
+
123
+ const MyComponent: FC = () => {
124
+ const content = useIntlayer("multi_lang");
125
+
126
+ return (
127
+ <div>
128
+ <p>{content.welcomeMessage}</p>
129
+ </div>
130
+ );
131
+ };
132
+
133
+ export default MyComponent;
134
+ ```
135
+
136
+ </Tab>
137
+ <Tab label="Vue" value="vue">
138
+
139
+ With `vue-intlayer`, you can use translations in Vue components. Here's an example:
140
+
141
+ ```vue fileName="**/*.vue"
142
+ <script setup lang="ts">
143
+ import { useIntlayer } from "vue-intlayer";
144
+
145
+ const content = useIntlayer("multi_lang");
146
+ </script>
147
+
148
+ <template>
149
+ <div>
150
+ <p>{{ content.welcomeMessage }}</p>
151
+ </div>
152
+ </template>
153
+ ```
154
+
155
+ </Tab>
156
+ <Tab label="Svelte" value="svelte">
157
+
158
+ With `svelte-intlayer`, you can use translations in Svelte components. The hook returns a Svelte store. Here's an example:
159
+
160
+ ```svelte fileName="**/*.svelte"
161
+ <script lang="ts">
162
+ import { useIntlayer } from "svelte-intlayer";
163
+
164
+ const content = useIntlayer("multi_lang");
165
+ </script>
166
+
167
+ <div>
168
+ <p>{$content.welcomeMessage}</p>
169
+ </div>
170
+ ```
171
+
172
+ </Tab>
173
+ <Tab label="Preact" value="preact">
174
+
175
+ With `preact-intlayer`, you can use translations in Preact components. Here's an example:
176
+
177
+ ```tsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
178
+ import type { FC } from "preact";
179
+ import { useIntlayer } from "preact-intlayer";
180
+
181
+ const MyComponent: FC = () => {
182
+ const content = useIntlayer("multi_lang");
183
+
184
+ return (
185
+ <div>
186
+ <p>{content.welcomeMessage}</p>
187
+ </div>
188
+ );
189
+ };
190
+
191
+ export default MyComponent;
192
+ ```
193
+
194
+ </Tab>
195
+ <Tab label="Solid" value="solid">
196
+
197
+ With `solid-intlayer`, you can use translations in SolidJS components. Here's an example:
198
+
199
+ ```tsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
200
+ import type { Component } from "solid-js";
201
+ import { useIntlayer } from "solid-intlayer";
202
+
203
+ const MyComponent: Component = () => {
204
+ const content = useIntlayer("multi_lang");
205
+
206
+ return (
207
+ <div>
208
+ <p>{content.welcomeMessage}</p>
209
+ </div>
210
+ );
211
+ };
212
+
213
+ export default MyComponent;
214
+ ```
215
+
216
+ </Tab>
217
+ <Tab label="Angular" value="angular">
218
+
219
+ With `angular-intlayer`, you can use translations in Angular components. Here's an example:
220
+
221
+ ```typescript fileName="app.component.ts" codeFormat="typescript"
222
+ import { Component } from "@angular/core";
223
+ import { useIntlayer } from "angular-intlayer";
224
+
225
+ @Component({
226
+ selector: "app-my-component",
227
+ template: `
228
+ <div>
229
+ <p>{{ content().welcomeMessage }}</p>
230
+ </div>
231
+ `,
232
+ })
233
+ export class MyComponent {
234
+ content = useIntlayer("multi_lang");
235
+ }
236
+ ```
237
+
238
+ </Tab>
239
+ <Tab label="Vanilla JS" value="vanilla">
240
+
241
+ With `vanilla-intlayer`, you can use translations by subscribing to content changes. Here's an example:
242
+
243
+ ```typescript fileName="**/*.ts" codeFormat={["typescript", "esm"]}
244
+ import { installIntlayer, useIntlayer } from "vanilla-intlayer";
245
+
246
+ installIntlayer();
247
+
248
+ const content = useIntlayer("multi_lang").onChange((newContent) => {
249
+ document.getElementById("welcome-message")!.textContent = String(
250
+ newContent.welcomeMessage
251
+ );
252
+ });
253
+
254
+ // Initial render
255
+ document.getElementById("welcome-message")!.textContent = String(
256
+ content.welcomeMessage
257
+ );
258
+ ```
259
+
260
+ </Tab>
261
+ </Tabs>
108
262
 
109
263
  ## Đối tượng Nội dung Tùy chỉnh
110
264
 
@@ -14,7 +14,7 @@ slugs:
14
14
  - concept
15
15
  - collections
16
16
  history:
17
- - version: 8.13.0
17
+ - version: 9.0.0
18
18
  date: 2026-06-12
19
19
  changes: "Phát hành tính năng từ điển bộ sưu tập"
20
20
  author: aymericzip
@@ -15,7 +15,7 @@ slugs:
15
15
  - concept
16
16
  - dynamic-records
17
17
  history:
18
- - version: 8.13.0
18
+ - version: 9.0.0
19
19
  date: 2026-06-12
20
20
  changes: "Phát hành tính năng nội dung động"
21
21
  author: aymericzip
@@ -15,7 +15,7 @@ slugs:
15
15
  - concept
16
16
  - dynamic-dictionaries
17
17
  history:
18
- - version: 8.13.0
18
+ - version: 9.0.0
19
19
  date: 2026-06-12
20
20
  changes: "Phát hành tính năng từ điển động"
21
21
  author: aymericzip
@@ -15,7 +15,7 @@ slugs:
15
15
  - concept
16
16
  - variants
17
17
  history:
18
- - version: 8.13.0
18
+ - version: 9.0.0
19
19
  date: 2026-06-12
20
20
  changes: "Phát hành tính năng từ điển biến thể"
21
21
  author: aymericzip
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-03-13
3
- updatedAt: 2025-12-13
3
+ updatedAt: 2026-06-21
4
4
  title: Plugin Đồng bộ JSON
5
5
  description: Đồng bộ từ điển Intlayer với các tệp JSON i18n của bên thứ ba (i18next, next-intl, react-intl, vue-i18n và nhiều hơn nữa). Giữ nguyên i18n hiện có của bạn trong khi sử dụng Intlayer để quản lý, dịch và kiểm tra các thông điệp của bạn.
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: "Thêm tùy chọn splitKeys (một từ điển cho mỗi khóa namespace cấp cao nhất) cho bố cục tệp đơn của next-intl / react-intl"
27
30
  - version: 7.5.0
28
31
  date: 2025-12-13
29
32
  changes: "Thêm hỗ trợ định dạng ICU và i18next"
@@ -62,9 +65,65 @@ pnpm add -D @intlayer/sync-json-plugin
62
65
  npm i -D @intlayer/sync-json-plugin
63
66
  ```
64
67
 
65
- ## Bắt đầu nhanh
68
+ ## Plugins
66
69
 
67
- Thêm plugin vào `intlayer.config.ts` của bạn và trỏ nó đến cấu trúc JSON hiện có của bạn.
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 impose 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, a 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`: Synchronize JSON files with Intlayer dictionaries.
82
+ - This plugin is used to synchronize 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 while 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
125
+
126
+ Add the plugin to your `intlayer.config.ts` and point it at your existing JSON structure.
68
127
 
69
128
  ```ts fileName="intlayer.config.ts"
70
129
  import { Locales, type IntlayerConfig } from "intlayer";
@@ -81,6 +140,7 @@ const config: IntlayerConfig = {
81
140
  syncJSON({
82
141
  // Bố cục theo từng locale, từng namespace (ví dụ: next-intl, i18next với namespaces)
83
142
  source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
143
+ format: "icu",
84
144
  }),
85
145
  ],
86
146
  };
@@ -91,11 +151,24 @@ export default config;
91
151
  Phương án thay thế: một tệp duy nhất cho mỗi locale (thường dùng với i18next/react-intl):
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
174
  ### Cách hoạt động
@@ -112,6 +185,7 @@ syncJSON({
112
185
  location?: string, // nhãn tùy chọn, mặc định: "plugin"
113
186
  priority?: number, // ưu tiên tùy chọn để giải quyết xung đột, mặc định: 0
114
187
  format?: 'intlayer' | 'icu' | 'i18next', // bộ định dạng tùy chọn, được sử dụng cho tương thích runtime Intlayer
188
+ splitKeys?: boolean, // tùy chọn, chia một tệp thành một từ điển cho mỗi khóa cấp cao nhất (tự động phát hiện)
115
189
  });
116
190
  ```
117
191
 
@@ -136,18 +210,50 @@ syncJSON({
136
210
  }),
137
211
  ```
138
212
 
139
- ## Nhiều nguồn JSON và ưu tiên
213
+ #### `splitKeys` (boolean)
140
214
 
141
- Bạn thể thêm nhiều plugin `syncJSON` để đồng bộ các nguồn JSON khác nhau. Điều này hữu ích khi bạn nhiều thư viện i18n hoặc các cấu trúc JSON khác nhau trong dự án của mình.
215
+ Kiểm soát liệu một tệp JSON duy nhất **các khóa cấp đầu tiên các namespace** nên trở thành một từ điển cho mỗi khóa cấp cao nhất, thay một từ điển duy nhất chứa toàn bộ tệp.
142
216
 
143
- ### Hệ thống ưu tiên
217
+ Điều này phù hợp với mô hình namespace của các thư viện như `next-intl` và `react-intl`, nơi một tệp `messages/{locale}.json` nhóm nhiều namespace theo các khóa cấp đầu tiên của nó, mỗi khóa được xử lý độc lập (ví dụ: `useTranslations('Hero')` phân giải thành từ điển `Hero`).
144
218
 
145
- Khi nhiều plugin cùng nhắm tới cùng một khóa từ điển, tham số `priority` sẽ quyết định plugin nào được ưu tiên:
219
+ - `undefined` (mặc định): **tự động phát hiện** tệp được chia khi mẫu `source` không phân đoạn `{key}` (một tệp chứa mọi namespace), và được giữ dưới dạng một từ điển duy nhất nếu không (một tệp cho mỗi khóa).
220
+ - `true`: luôn chia mỗi khóa cấp cao nhất thành từ điển riêng của nó.
221
+ - `false`: không bao giờ chia; toàn bộ tệp trở thành một từ điển duy nhất.
146
222
 
147
- - Số ưu tiên cao hơn thắng số ưu tiên thấp hơn
148
- - Ưu tiên mặc định của các tệp `.content` là `0`
149
- - Ưu tiên mặc định của các tệp nội dung plugin là `-1`
150
- - Các plugin có cùng mức ưu tiên sẽ được xử lý theo thứ tự xuất hiện trong cấu hình
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
+ Điều này tạo ra ba từ điển — `Hero`, `Nav`, và `About` — do đó `useTranslations('Hero')` (next-intl) phân giải chính xác. Khi ghi lại, tất cả các namespace được tập hợp lại vào cùng một tệp theo từng locale.
242
+
243
+ > Khi bạn giữ phân đoạn `{key}` rõ ràng trong `source` của mình (ví dụ: `./locales/${locale}/${key}.json`), mỗi tệp đã là một namespace, vì vậy việc chia tách bị tắt theo mặc định.
244
+
245
+ ### Multiple JSON sources and priority
246
+
247
+ You can add multiple `syncJSON` plugins to synchronize different JSON sources. This is useful when you have multiple i18n libraries or different JSON structures in your project.
248
+
249
+ #### Priority system
250
+
251
+ When multiple plugins target the same dictionary key, the `priority` parameter determines which plugin takes precedence:
252
+
253
+ - Higher priority numbers win over lower ones
254
+ - Default priority of `.content` files is `0`
255
+ - Default priority of plugins is `0`
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"
153
259
  import { Locales, type IntlayerConfig } from "intlayer";
@@ -189,73 +295,140 @@ const config: IntlayerConfig = {
189
295
  export default config;
190
296
  ```
191
297
 
192
- ### Giải quyết xung đột
298
+ ## Load JSON plugin
193
299
 
194
- Khi cùng một khóa dịch tồn tại trong nhiều nguồn JSON:
300
+ ### Quick start
195
301
 
196
- 1. Plugin mức ưu tiên cao nhất sẽ quyết định giá trị cuối cùng
197
- 2. Các nguồn có mức ưu tiên thấp hơn được sử dụng làm phương án dự phòng cho các khóa bị thiếu
198
- 3. Điều này cho phép bạn duy trì các bản dịch kế thừa trong khi dần dần chuyển sang các cấu trúc mới
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):
199
303
 
200
- ## Tích hợp
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
+ },
201
313
 
202
- Dưới đây là các ánh xạ phổ biến. Giữ nguyên runtime của bạn; chỉ cần thêm plugin.
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
+ };
203
324
 
204
- ### i18next
325
+ export default config;
326
+ ```
205
327
 
206
- Bố cục tệp điển hình: `./public/locales/{locale}/{namespace}.json` hoặc `./locales/{locale}/{namespace}.json`.
328
+ Alternative: per‑locale layout, still read‑only (only the selected locale is loaded):
207
329
 
208
330
  ```ts fileName="intlayer.config.ts"
209
- import { syncJSON } from "@intlayer/sync-json-plugin";
331
+ import { Locales, type IntlayerConfig } from "intlayer";
332
+ import { loadJSON } from "@intlayer/sync-json-plugin";
210
333
 
211
- export default {
334
+ const config: IntlayerConfig = {
335
+ internationalization: {
336
+ locales: [Locales.ENGLISH, Locales.FRENCH],
337
+ defaultLocale: Locales.ENGLISH,
338
+ },
212
339
  plugins: [
213
- syncJSON({
214
- format: "i18next",
215
- source: ({ key, locale }) => `./locales/${locale}/${key}.json`, // nguồn tệp JSON đồng bộ theo khóa và ngôn ngữ
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,
216
344
  }),
217
345
  ],
218
346
  };
347
+
348
+ export default config;
219
349
  ```
220
350
 
221
- ### next-intl
351
+ ### How it works
222
352
 
223
- Các thông điệp JSON theo từng ngôn ngữ (thường `./messages/{locale}.json`) hoặc theo từng namespace.
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.
224
357
 
225
- ```ts fileName="intlayer.config.ts"
226
- plugins: [
227
- syncJSON({
228
- source: ({ locale, key }) => `./messages/${locale}/${key}.json`, // nguồn tệp JSON đồng bộ theo ngôn ngữ và khóa
229
- }),
230
- ];
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
+ });
231
381
  ```
232
382
 
233
- Xem thêm: `docs/vi/intlayer_with_next-intl.md`.
383
+ #### `format` ('intlayer' | 'icu' | 'i18next')
234
384
 
235
- ### react-intl
385
+ Chỉ định bộ định dạng sẽ được sử dụng cho nội dung từ điển khi tải các tệp JSON. Điều này cho phép sử dụng các cú pháp định dạng thông báo khác nhau tương thích với các thư viện i18n khác nhau.
386
+
387
+ - `'intlayer'`: Bộ định dạng Intlayer mặc định (mặc định).
388
+ - `'icu'`: Sử dụng định dạng thông báo ICU (tương thích với các thư viện như react-intl, vue-i18n).
389
+ - `'i18next'`: Sử dụng định dạng thông báo i18next (tương thích với i18next, next-i18next, Solid-i18next).
236
390
 
237
- Thông thường có một tệp JSON duy nhất cho mỗi ngôn ngữ:
391
+ **Ví dụ:**
238
392
 
239
- ```ts fileName="intlayer.config.ts"
240
- plugins: [
241
- syncJSON({
242
- source: ({ locale }) => `./locales/${locale}.json`, // nguồn tệp JSON đồng bộ theo ngôn ngữ
243
- }),
244
- ];
393
+ ```ts
394
+ loadJSON({
395
+ source: ({ key }) => `./src/**/${key}.i18n.json`,
396
+ locale: Locales.ENGLISH,
397
+ format: "icu", // Sử dụng định dạng ICU để tương thích
398
+ }),
245
399
  ```
246
400
 
247
- ### vue-i18n
401
+ #### `splitKeys` (boolean)
248
402
 
249
- thể một tệp duy nhất cho mỗi ngôn ngữ hoặc theo từng namespace:
403
+ Hành vi tương tự như trong [`syncJSON`](#splitkeys-boolean): khi một tệp JSON duy nhất nhóm nhiều namespace theo các khóa cấp đầu tiên của nó, mỗi khóa cấp cao nhất sẽ trở thành từ điển riêng của nó.
250
404
 
251
- ```ts fileName="intlayer.config.ts"
252
- plugins: [
253
- syncJSON({
254
- source: ({ key, locale }) => `./src/locales/${locale}/${key}.json`, // nguồn tệp JSON đồng bộ theo khóa và ngôn ngữ
255
- }),
256
- ];
405
+ - `undefined` (mặc định): **tự động phát hiện** — chia khi mẫu `source` không có phân đoạn `{key}`, nếu không thì là một từ điển duy nhất.
406
+ - `true` / `false`: buộc hoặc tắt chia tách.
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
+ }),
257
414
  ```
258
415
 
416
+ ### Behavior and conventions
417
+
418
+ - If your `source` mask includes a locale placeholder, only files for the selected `locale` are ingested.
419
+ - Nếu không có phân đoạn `{key}` trong mặt nạ của bạn, mỗi khóa cấp cao nhất của tệp sẽ trở thành từ điển riêng của nó theo mặc định (xem [`splitKeys`](#splitkeys-boolean)). Đặt `splitKeys: false` để thay vào đó tải toàn bộ tệp dưới dạng một từ điển `index` duy nhất.
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
425
+
426
+ When the same translation key exists in multiple JSON sources:
427
+
428
+ 1. The plugin with the highest priority determines the final value
429
+ 2. Lower priority sources are used as fallbacks for missing keys
430
+ 3. This allows you to maintain legacy translations while gradually migrating to new structures
431
+
259
432
  ## CLI
260
433
 
261
434
  Các tệp JSON được đồng bộ sẽ được coi như các tệp `.content` khác. Điều đó có nghĩa là tất cả các lệnh intlayer sẽ có sẵn cho các tệp JSON được đồng bộ. Bao gồm:
@@ -268,13 +441,13 @@ Các tệp JSON được đồng bộ sẽ được coi như các tệp `.conten
268
441
 
269
442
  Xem [Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/cli/index.md) để biết thêm chi tiết.
270
443
 
271
- ## Hạn chế (hiện tại)
444
+ ## Limitations (current)
272
445
 
273
446
  - Không hỗ trợ chèn hoặc số nhiều/ICU khi nhắm mục tiêu các thư viện bên thứ ba.
274
447
  - Trình chỉnh sửa trực quan chưa có sẵn cho các runtime không phải Intlayer.
275
448
  - Chỉ đồng bộ JSON; không hỗ trợ các định dạng danh mục không phải JSON.
276
449
 
277
- ## Tại sao điều này quan trọng
450
+ ## Why this matters
278
451
 
279
452
  - Chúng ta có thể đề xuất các giải pháp i18n đã được thiết lập và định vị Intlayer như một tiện ích bổ sung.
280
453
  - Chúng ta tận dụng SEO/từ khóa của họ với các hướng dẫn kết thúc bằng việc gợi ý sử dụng Intlayer để quản lý JSON.