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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (429) hide show
  1. package/dist/cjs/generated/docs.entry.cjs +320 -0
  2. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  3. package/dist/esm/generated/docs.entry.mjs +320 -0
  4. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  5. package/dist/types/generated/docs.entry.d.ts +16 -0
  6. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  7. package/docs/ar/cli/doc-review.md +110 -4
  8. package/docs/ar/cli/index.md +1 -1
  9. package/docs/ar/cli/scan.md +1 -1
  10. package/docs/ar/configuration.md +36 -3
  11. package/docs/ar/dictionary/condition.md +167 -5
  12. package/docs/ar/dictionary/enumeration.md +540 -6
  13. package/docs/ar/dictionary/file.md +151 -1
  14. package/docs/ar/dictionary/gender.md +168 -7
  15. package/docs/ar/dictionary/nesting.md +173 -65
  16. package/docs/ar/dictionary/plurial.md +174 -5
  17. package/docs/ar/dictionary/translation.md +156 -2
  18. package/docs/ar/dynamic_dictionaries/collections.md +1 -1
  19. package/docs/ar/dynamic_dictionaries/dynamic_content.md +1 -1
  20. package/docs/ar/dynamic_dictionaries/index.md +1 -1
  21. package/docs/ar/dynamic_dictionaries/variants.md +1 -1
  22. package/docs/ar/intlayer_with_vite+react.md +31 -31
  23. package/docs/ar/plugins/sync-json.md +222 -49
  24. package/docs/ar/releases/v8.md +187 -1
  25. package/docs/ar/releases/v9.md +232 -0
  26. package/docs/bn/cli/index.md +1 -1
  27. package/docs/bn/cli/scan.md +1 -1
  28. package/docs/bn/configuration.md +36 -3
  29. package/docs/cs/cli/index.md +1 -1
  30. package/docs/cs/cli/scan.md +1 -1
  31. package/docs/cs/configuration.md +35 -2
  32. package/docs/de/cli/doc-review.md +110 -4
  33. package/docs/de/cli/index.md +1 -1
  34. package/docs/de/cli/scan.md +1 -1
  35. package/docs/de/configuration.md +35 -2
  36. package/docs/de/dictionary/condition.md +167 -5
  37. package/docs/de/dictionary/enumeration.md +777 -7
  38. package/docs/de/dictionary/file.md +151 -1
  39. package/docs/de/dictionary/gender.md +168 -7
  40. package/docs/de/dictionary/nesting.md +173 -65
  41. package/docs/de/dictionary/plurial.md +347 -7
  42. package/docs/de/dictionary/translation.md +156 -2
  43. package/docs/de/dynamic_dictionaries/collections.md +1 -1
  44. package/docs/de/dynamic_dictionaries/dynamic_content.md +1 -1
  45. package/docs/de/dynamic_dictionaries/index.md +1 -1
  46. package/docs/de/dynamic_dictionaries/variants.md +1 -1
  47. package/docs/de/intlayer_with_vite+react.md +48 -48
  48. package/docs/de/migration_from_i18next_to_intlayer.md +1 -1
  49. package/docs/de/migration_from_next-i18next_to_intlayer.md +1 -1
  50. package/docs/de/migration_from_next-intl_to_intlayer.md +1 -1
  51. package/docs/de/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
  52. package/docs/de/migration_from_react-i18next_to_intlayer.md +1 -1
  53. package/docs/de/migration_from_vue-i18n_to_intlayer.md +1 -1
  54. package/docs/de/plugins/sync-json.md +222 -49
  55. package/docs/de/releases/v8.md +197 -1
  56. package/docs/de/releases/v9.md +232 -0
  57. package/docs/en/CI_CD.md +7 -7
  58. package/docs/en/cli/ci.md +62 -8
  59. package/docs/en/cli/doc-review.md +110 -4
  60. package/docs/en/cli/index.md +1 -1
  61. package/docs/en/cli/scan.md +1 -1
  62. package/docs/en/compat/i18n-js.md +44 -0
  63. package/docs/en/compat/i18next.md +59 -0
  64. package/docs/en/compat/index.md +51 -0
  65. package/docs/en/compat/lingui.md +44 -0
  66. package/docs/en/compat/next-i18next.md +57 -0
  67. package/docs/en/compat/next-intl.md +59 -0
  68. package/docs/en/compat/next-translate.md +45 -0
  69. package/docs/en/compat/ngx-translate.md +45 -0
  70. package/docs/en/compat/nuxtjs-i18n.md +46 -0
  71. package/docs/en/compat/polyglot.md +45 -0
  72. package/docs/en/compat/react-i18next.md +58 -0
  73. package/docs/en/compat/react-intl.md +55 -0
  74. package/docs/en/compat/svelte-i18n.md +47 -0
  75. package/docs/en/compat/transloco.md +45 -0
  76. package/docs/en/compat/vue-i18n.md +58 -0
  77. package/docs/en/configuration.md +35 -2
  78. package/docs/en/dictionary/condition.md +163 -1
  79. package/docs/en/dictionary/enumeration.md +309 -7
  80. package/docs/en/dictionary/file.md +151 -1
  81. package/docs/en/dictionary/gender.md +162 -1
  82. package/docs/en/dictionary/nesting.md +173 -9
  83. package/docs/en/dictionary/plurial.md +155 -10
  84. package/docs/en/dictionary/translation.md +145 -52
  85. package/docs/en/dynamic_dictionaries/collections.md +1 -1
  86. package/docs/en/dynamic_dictionaries/dynamic_content.md +1 -1
  87. package/docs/en/dynamic_dictionaries/index.md +1 -1
  88. package/docs/en/dynamic_dictionaries/variants.md +1 -1
  89. package/docs/en/migration_from_i18next_to_intlayer.md +1 -1
  90. package/docs/en/migration_from_next-i18next_to_intlayer.md +1 -1
  91. package/docs/en/migration_from_next-intl_to_intlayer.md +1 -1
  92. package/docs/en/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
  93. package/docs/en/migration_from_react-i18next_to_intlayer.md +1 -1
  94. package/docs/en/migration_from_vue-i18n_to_intlayer.md +1 -1
  95. package/docs/en/plugins/sync-json.md +56 -2
  96. package/docs/en/releases/v8.md +187 -1
  97. package/docs/en/releases/v9.md +220 -0
  98. package/docs/en-GB/cli/doc-review.md +110 -4
  99. package/docs/en-GB/cli/index.md +1 -1
  100. package/docs/en-GB/cli/scan.md +1 -1
  101. package/docs/en-GB/configuration.md +35 -2
  102. package/docs/en-GB/dictionary/condition.md +364 -1
  103. package/docs/en-GB/dictionary/enumeration.md +577 -5
  104. package/docs/en-GB/dictionary/file.md +317 -1
  105. package/docs/en-GB/dictionary/gender.md +375 -2
  106. package/docs/en-GB/dictionary/nesting.md +368 -71
  107. package/docs/en-GB/dictionary/plurial.md +347 -7
  108. package/docs/en-GB/dictionary/translation.md +320 -32
  109. package/docs/en-GB/dynamic_dictionaries/collections.md +1 -1
  110. package/docs/en-GB/dynamic_dictionaries/dynamic_content.md +1 -1
  111. package/docs/en-GB/dynamic_dictionaries/index.md +1 -1
  112. package/docs/en-GB/dynamic_dictionaries/variants.md +1 -1
  113. package/docs/en-GB/plugins/sync-json.md +245 -13
  114. package/docs/en-GB/releases/v8.md +1 -1
  115. package/docs/en-GB/releases/v9.md +220 -0
  116. package/docs/es/cli/doc-review.md +110 -4
  117. package/docs/es/cli/index.md +1 -1
  118. package/docs/es/cli/scan.md +1 -1
  119. package/docs/es/configuration.md +36 -3
  120. package/docs/es/dictionary/condition.md +167 -5
  121. package/docs/es/dictionary/enumeration.md +537 -12
  122. package/docs/es/dictionary/file.md +151 -1
  123. package/docs/es/dictionary/gender.md +168 -7
  124. package/docs/es/dictionary/nesting.md +173 -65
  125. package/docs/es/dictionary/plurial.md +347 -7
  126. package/docs/es/dictionary/translation.md +156 -2
  127. package/docs/es/dynamic_dictionaries/collections.md +1 -1
  128. package/docs/es/dynamic_dictionaries/dynamic_content.md +1 -1
  129. package/docs/es/dynamic_dictionaries/index.md +1 -1
  130. package/docs/es/dynamic_dictionaries/variants.md +1 -1
  131. package/docs/es/migration_from_i18next_to_intlayer.md +1 -1
  132. package/docs/es/migration_from_next-i18next_to_intlayer.md +1 -1
  133. package/docs/es/migration_from_next-intl_to_intlayer.md +1 -1
  134. package/docs/es/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
  135. package/docs/es/migration_from_react-i18next_to_intlayer.md +1 -1
  136. package/docs/es/migration_from_vue-i18n_to_intlayer.md +1 -1
  137. package/docs/es/plugins/sync-json.md +222 -49
  138. package/docs/es/releases/v8.md +187 -1
  139. package/docs/es/releases/v9.md +228 -0
  140. package/docs/fr/cli/doc-review.md +110 -4
  141. package/docs/fr/cli/index.md +1 -1
  142. package/docs/fr/cli/scan.md +1 -1
  143. package/docs/fr/configuration.md +49 -16
  144. package/docs/fr/dictionary/condition.md +369 -6
  145. package/docs/fr/dictionary/enumeration.md +540 -6
  146. package/docs/fr/dictionary/file.md +151 -1
  147. package/docs/fr/dictionary/gender.md +168 -7
  148. package/docs/fr/dictionary/nesting.md +357 -86
  149. package/docs/fr/dictionary/plurial.md +174 -5
  150. package/docs/fr/dictionary/translation.md +156 -2
  151. package/docs/fr/dynamic_dictionaries/collections.md +1 -1
  152. package/docs/fr/dynamic_dictionaries/dynamic_content.md +1 -1
  153. package/docs/fr/dynamic_dictionaries/index.md +1 -1
  154. package/docs/fr/dynamic_dictionaries/variants.md +1 -1
  155. package/docs/fr/migration_from_i18next_to_intlayer.md +1 -1
  156. package/docs/fr/migration_from_next-i18next_to_intlayer.md +1 -1
  157. package/docs/fr/migration_from_next-intl_to_intlayer.md +1 -1
  158. package/docs/fr/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
  159. package/docs/fr/migration_from_react-i18next_to_intlayer.md +1 -1
  160. package/docs/fr/migration_from_vue-i18n_to_intlayer.md +1 -1
  161. package/docs/fr/plugins/sync-json.md +244 -12
  162. package/docs/fr/releases/v8.md +187 -1
  163. package/docs/fr/releases/v9.md +220 -0
  164. package/docs/hi/cli/doc-review.md +110 -4
  165. package/docs/hi/cli/index.md +1 -1
  166. package/docs/hi/cli/scan.md +1 -1
  167. package/docs/hi/configuration.md +49 -16
  168. package/docs/hi/dictionary/condition.md +167 -5
  169. package/docs/hi/dictionary/enumeration.md +540 -6
  170. package/docs/hi/dictionary/file.md +151 -1
  171. package/docs/hi/dictionary/gender.md +168 -7
  172. package/docs/hi/dictionary/nesting.md +173 -65
  173. package/docs/hi/dictionary/plurial.md +174 -5
  174. package/docs/hi/dictionary/translation.md +155 -5
  175. package/docs/hi/dynamic_dictionaries/collections.md +1 -1
  176. package/docs/hi/dynamic_dictionaries/dynamic_content.md +1 -1
  177. package/docs/hi/dynamic_dictionaries/index.md +1 -1
  178. package/docs/hi/dynamic_dictionaries/variants.md +1 -1
  179. package/docs/hi/plugins/sync-json.md +221 -48
  180. package/docs/hi/releases/v8.md +188 -2
  181. package/docs/hi/releases/v9.md +232 -0
  182. package/docs/id/cli/doc-review.md +110 -4
  183. package/docs/id/cli/index.md +1 -1
  184. package/docs/id/cli/scan.md +1 -1
  185. package/docs/id/configuration.md +35 -2
  186. package/docs/id/dictionary/condition.md +167 -5
  187. package/docs/id/dictionary/enumeration.md +540 -6
  188. package/docs/id/dictionary/file.md +318 -2
  189. package/docs/id/dictionary/gender.md +381 -8
  190. package/docs/id/dictionary/nesting.md +357 -86
  191. package/docs/id/dictionary/plurial.md +174 -5
  192. package/docs/id/dictionary/translation.md +156 -2
  193. package/docs/id/dynamic_dictionaries/collections.md +1 -1
  194. package/docs/id/dynamic_dictionaries/dynamic_content.md +1 -1
  195. package/docs/id/dynamic_dictionaries/index.md +1 -1
  196. package/docs/id/dynamic_dictionaries/variants.md +1 -1
  197. package/docs/id/plugins/sync-json.md +222 -49
  198. package/docs/id/releases/v8.md +191 -2
  199. package/docs/id/releases/v9.md +232 -0
  200. package/docs/it/cli/doc-review.md +110 -4
  201. package/docs/it/cli/index.md +1 -1
  202. package/docs/it/cli/scan.md +1 -1
  203. package/docs/it/configuration.md +49 -16
  204. package/docs/it/dictionary/condition.md +167 -5
  205. package/docs/it/dictionary/enumeration.md +540 -6
  206. package/docs/it/dictionary/file.md +318 -2
  207. package/docs/it/dictionary/gender.md +168 -7
  208. package/docs/it/dictionary/nesting.md +173 -65
  209. package/docs/it/dictionary/plurial.md +347 -7
  210. package/docs/it/dictionary/translation.md +156 -2
  211. package/docs/it/dynamic_dictionaries/collections.md +1 -1
  212. package/docs/it/dynamic_dictionaries/dynamic_content.md +1 -1
  213. package/docs/it/dynamic_dictionaries/index.md +1 -1
  214. package/docs/it/dynamic_dictionaries/variants.md +1 -1
  215. package/docs/it/intlayer_with_vite+react.md +0 -48
  216. package/docs/it/migration_from_i18next_to_intlayer.md +1 -1
  217. package/docs/it/migration_from_next-i18next_to_intlayer.md +1 -1
  218. package/docs/it/migration_from_next-intl_to_intlayer.md +1 -1
  219. package/docs/it/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
  220. package/docs/it/migration_from_react-i18next_to_intlayer.md +1 -1
  221. package/docs/it/migration_from_vue-i18n_to_intlayer.md +1 -1
  222. package/docs/it/plugins/sync-json.md +224 -51
  223. package/docs/it/releases/v8.md +200 -2
  224. package/docs/it/releases/v9.md +232 -0
  225. package/docs/ja/cli/doc-review.md +110 -4
  226. package/docs/ja/cli/index.md +1 -1
  227. package/docs/ja/cli/scan.md +1 -1
  228. package/docs/ja/configuration.md +50 -17
  229. package/docs/ja/dictionary/condition.md +167 -5
  230. package/docs/ja/dictionary/enumeration.md +540 -6
  231. package/docs/ja/dictionary/file.md +151 -1
  232. package/docs/ja/dictionary/gender.md +168 -7
  233. package/docs/ja/dictionary/nesting.md +173 -65
  234. package/docs/ja/dictionary/plurial.md +174 -5
  235. package/docs/ja/dictionary/translation.md +169 -8
  236. package/docs/ja/dynamic_dictionaries/collections.md +1 -1
  237. package/docs/ja/dynamic_dictionaries/dynamic_content.md +1 -1
  238. package/docs/ja/dynamic_dictionaries/index.md +1 -1
  239. package/docs/ja/dynamic_dictionaries/variants.md +1 -1
  240. package/docs/ja/intlayer_with_vite+react.md +290 -0
  241. package/docs/ja/migration_from_i18next_to_intlayer.md +1 -1
  242. package/docs/ja/migration_from_next-i18next_to_intlayer.md +1 -1
  243. package/docs/ja/migration_from_next-intl_to_intlayer.md +1 -1
  244. package/docs/ja/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
  245. package/docs/ja/migration_from_react-i18next_to_intlayer.md +1 -1
  246. package/docs/ja/migration_from_vue-i18n_to_intlayer.md +1 -1
  247. package/docs/ja/plugins/sync-json.md +222 -49
  248. package/docs/ja/releases/v8.md +193 -4
  249. package/docs/ja/releases/v9.md +232 -0
  250. package/docs/ko/cli/doc-review.md +110 -4
  251. package/docs/ko/cli/index.md +1 -1
  252. package/docs/ko/cli/scan.md +1 -1
  253. package/docs/ko/configuration.md +49 -16
  254. package/docs/ko/dictionary/condition.md +167 -5
  255. package/docs/ko/dictionary/enumeration.md +540 -6
  256. package/docs/ko/dictionary/file.md +151 -1
  257. package/docs/ko/dictionary/gender.md +168 -7
  258. package/docs/ko/dictionary/nesting.md +173 -65
  259. package/docs/ko/dictionary/plurial.md +174 -5
  260. package/docs/ko/dictionary/translation.md +169 -8
  261. package/docs/ko/dynamic_dictionaries/collections.md +1 -1
  262. package/docs/ko/dynamic_dictionaries/dynamic_content.md +1 -1
  263. package/docs/ko/dynamic_dictionaries/index.md +1 -1
  264. package/docs/ko/dynamic_dictionaries/variants.md +1 -1
  265. package/docs/ko/intlayer_with_vite+react.md +48 -490
  266. package/docs/ko/migration_from_i18next_to_intlayer.md +1 -1
  267. package/docs/ko/migration_from_next-i18next_to_intlayer.md +1 -1
  268. package/docs/ko/migration_from_next-intl_to_intlayer.md +1 -1
  269. package/docs/ko/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
  270. package/docs/ko/migration_from_react-i18next_to_intlayer.md +1 -1
  271. package/docs/ko/migration_from_vue-i18n_to_intlayer.md +1 -1
  272. package/docs/ko/plugins/sync-json.md +223 -50
  273. package/docs/ko/releases/v8.md +192 -1
  274. package/docs/ko/releases/v9.md +232 -0
  275. package/docs/nl/cli/index.md +1 -1
  276. package/docs/nl/cli/scan.md +1 -1
  277. package/docs/nl/configuration.md +36 -3
  278. package/docs/pl/cli/doc-review.md +110 -4
  279. package/docs/pl/cli/index.md +1 -1
  280. package/docs/pl/cli/scan.md +1 -1
  281. package/docs/pl/configuration.md +35 -2
  282. package/docs/pl/dictionary/condition.md +167 -5
  283. package/docs/pl/dictionary/enumeration.md +540 -6
  284. package/docs/pl/dictionary/file.md +318 -2
  285. package/docs/pl/dictionary/gender.md +168 -7
  286. package/docs/pl/dictionary/nesting.md +173 -65
  287. package/docs/pl/dictionary/plurial.md +174 -5
  288. package/docs/pl/dictionary/translation.md +156 -2
  289. package/docs/pl/dynamic_dictionaries/collections.md +1 -1
  290. package/docs/pl/dynamic_dictionaries/dynamic_content.md +1 -1
  291. package/docs/pl/dynamic_dictionaries/index.md +1 -1
  292. package/docs/pl/dynamic_dictionaries/variants.md +1 -1
  293. package/docs/pl/plugins/sync-json.md +246 -14
  294. package/docs/pl/releases/v8.md +188 -2
  295. package/docs/pl/releases/v9.md +232 -0
  296. package/docs/pt/cli/doc-review.md +110 -4
  297. package/docs/pt/cli/index.md +1 -1
  298. package/docs/pt/cli/scan.md +1 -1
  299. package/docs/pt/configuration.md +49 -16
  300. package/docs/pt/dictionary/condition.md +167 -5
  301. package/docs/pt/dictionary/enumeration.md +540 -6
  302. package/docs/pt/dictionary/file.md +151 -1
  303. package/docs/pt/dictionary/gender.md +168 -7
  304. package/docs/pt/dictionary/nesting.md +173 -65
  305. package/docs/pt/dictionary/plurial.md +347 -7
  306. package/docs/pt/dictionary/translation.md +156 -2
  307. package/docs/pt/dynamic_dictionaries/collections.md +1 -1
  308. package/docs/pt/dynamic_dictionaries/dynamic_content.md +1 -1
  309. package/docs/pt/dynamic_dictionaries/index.md +1 -1
  310. package/docs/pt/dynamic_dictionaries/variants.md +1 -1
  311. package/docs/pt/migration_from_i18next_to_intlayer.md +1 -1
  312. package/docs/pt/migration_from_next-i18next_to_intlayer.md +1 -1
  313. package/docs/pt/migration_from_next-intl_to_intlayer.md +1 -1
  314. package/docs/pt/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
  315. package/docs/pt/migration_from_react-i18next_to_intlayer.md +1 -1
  316. package/docs/pt/migration_from_vue-i18n_to_intlayer.md +1 -1
  317. package/docs/pt/plugins/sync-json.md +222 -49
  318. package/docs/pt/releases/v8.md +187 -1
  319. package/docs/pt/releases/v9.md +232 -0
  320. package/docs/ru/cli/doc-review.md +110 -4
  321. package/docs/ru/cli/index.md +1 -1
  322. package/docs/ru/cli/scan.md +1 -1
  323. package/docs/ru/configuration.md +35 -2
  324. package/docs/ru/dictionary/condition.md +366 -39
  325. package/docs/ru/dictionary/enumeration.md +777 -7
  326. package/docs/ru/dictionary/file.md +318 -2
  327. package/docs/ru/dictionary/gender.md +168 -7
  328. package/docs/ru/dictionary/nesting.md +368 -71
  329. package/docs/ru/dictionary/plurial.md +347 -7
  330. package/docs/ru/dictionary/translation.md +321 -33
  331. package/docs/ru/dynamic_dictionaries/collections.md +1 -1
  332. package/docs/ru/dynamic_dictionaries/dynamic_content.md +1 -1
  333. package/docs/ru/dynamic_dictionaries/index.md +1 -1
  334. package/docs/ru/dynamic_dictionaries/variants.md +1 -1
  335. package/docs/ru/intlayer_with_vite+react.md +48 -47
  336. package/docs/ru/migration_from_i18next_to_intlayer.md +1 -1
  337. package/docs/ru/migration_from_next-i18next_to_intlayer.md +1 -1
  338. package/docs/ru/migration_from_next-intl_to_intlayer.md +1 -1
  339. package/docs/ru/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
  340. package/docs/ru/migration_from_react-i18next_to_intlayer.md +1 -1
  341. package/docs/ru/migration_from_vue-i18n_to_intlayer.md +1 -1
  342. package/docs/ru/plugins/sync-json.md +269 -95
  343. package/docs/ru/releases/v8.md +194 -2
  344. package/docs/ru/releases/v9.md +232 -0
  345. package/docs/tr/cli/doc-review.md +110 -4
  346. package/docs/tr/cli/index.md +1 -1
  347. package/docs/tr/cli/scan.md +1 -1
  348. package/docs/tr/configuration.md +35 -2
  349. package/docs/tr/dictionary/condition.md +167 -5
  350. package/docs/tr/dictionary/enumeration.md +540 -6
  351. package/docs/tr/dictionary/file.md +151 -1
  352. package/docs/tr/dictionary/gender.md +168 -7
  353. package/docs/tr/dictionary/nesting.md +173 -65
  354. package/docs/tr/dictionary/plurial.md +174 -5
  355. package/docs/tr/dictionary/translation.md +156 -2
  356. package/docs/tr/dynamic_dictionaries/collections.md +1 -1
  357. package/docs/tr/dynamic_dictionaries/dynamic_content.md +1 -1
  358. package/docs/tr/dynamic_dictionaries/index.md +1 -1
  359. package/docs/tr/dynamic_dictionaries/variants.md +1 -1
  360. package/docs/tr/migration_from_i18next_to_intlayer.md +1 -1
  361. package/docs/tr/migration_from_next-i18next_to_intlayer.md +1 -1
  362. package/docs/tr/migration_from_next-intl_to_intlayer.md +1 -1
  363. package/docs/tr/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
  364. package/docs/tr/migration_from_react-i18next_to_intlayer.md +1 -1
  365. package/docs/tr/migration_from_vue-i18n_to_intlayer.md +1 -1
  366. package/docs/tr/plugins/sync-json.md +222 -50
  367. package/docs/tr/releases/v8.md +187 -1
  368. package/docs/tr/releases/v9.md +232 -0
  369. package/docs/uk/cli/doc-review.md +110 -4
  370. package/docs/uk/cli/index.md +1 -1
  371. package/docs/uk/cli/scan.md +1 -1
  372. package/docs/uk/configuration.md +35 -2
  373. package/docs/uk/dictionary/condition.md +167 -5
  374. package/docs/uk/dictionary/enumeration.md +540 -6
  375. package/docs/uk/dictionary/file.md +318 -2
  376. package/docs/uk/dictionary/gender.md +381 -8
  377. package/docs/uk/dictionary/nesting.md +173 -65
  378. package/docs/uk/dictionary/plurial.md +174 -5
  379. package/docs/uk/dictionary/translation.md +156 -2
  380. package/docs/uk/dynamic_dictionaries/collections.md +1 -1
  381. package/docs/uk/dynamic_dictionaries/dynamic_content.md +1 -1
  382. package/docs/uk/dynamic_dictionaries/index.md +1 -1
  383. package/docs/uk/dynamic_dictionaries/variants.md +1 -1
  384. package/docs/uk/plugins/sync-json.md +56 -2
  385. package/docs/uk/releases/v8.md +191 -3
  386. package/docs/uk/releases/v9.md +232 -0
  387. package/docs/ur/cli/index.md +1 -1
  388. package/docs/ur/cli/scan.md +1 -1
  389. package/docs/ur/configuration.md +36 -3
  390. package/docs/vi/cli/doc-review.md +110 -4
  391. package/docs/vi/cli/index.md +1 -1
  392. package/docs/vi/cli/scan.md +1 -1
  393. package/docs/vi/configuration.md +50 -17
  394. package/docs/vi/dictionary/condition.md +167 -5
  395. package/docs/vi/dictionary/enumeration.md +591 -14
  396. package/docs/vi/dictionary/file.md +318 -2
  397. package/docs/vi/dictionary/gender.md +168 -7
  398. package/docs/vi/dictionary/nesting.md +357 -86
  399. package/docs/vi/dictionary/plurial.md +174 -5
  400. package/docs/vi/dictionary/translation.md +156 -2
  401. package/docs/vi/dynamic_dictionaries/collections.md +1 -1
  402. package/docs/vi/dynamic_dictionaries/dynamic_content.md +1 -1
  403. package/docs/vi/dynamic_dictionaries/index.md +1 -1
  404. package/docs/vi/dynamic_dictionaries/variants.md +1 -1
  405. package/docs/vi/plugins/sync-json.md +230 -57
  406. package/docs/vi/releases/v8.md +190 -1
  407. package/docs/vi/releases/v9.md +232 -0
  408. package/docs/zh/cli/doc-review.md +110 -4
  409. package/docs/zh/cli/index.md +1 -1
  410. package/docs/zh/cli/scan.md +1 -1
  411. package/docs/zh/configuration.md +49 -16
  412. package/docs/zh/dictionary/condition.md +167 -5
  413. package/docs/zh/dictionary/enumeration.md +540 -6
  414. package/docs/zh/dictionary/file.md +151 -1
  415. package/docs/zh/dictionary/gender.md +168 -7
  416. package/docs/zh/dictionary/nesting.md +173 -65
  417. package/docs/zh/dictionary/plurial.md +174 -5
  418. package/docs/zh/dictionary/translation.md +169 -8
  419. package/docs/zh/dynamic_dictionaries/collections.md +1 -1
  420. package/docs/zh/dynamic_dictionaries/dynamic_content.md +1 -1
  421. package/docs/zh/dynamic_dictionaries/index.md +1 -1
  422. package/docs/zh/dynamic_dictionaries/variants.md +1 -1
  423. package/docs/zh/intlayer_with_vite+react.md +48 -288
  424. package/docs/zh/plugins/sync-json.md +223 -50
  425. package/docs/zh/releases/v8.md +1 -1
  426. package/docs/zh/releases/v9.md +220 -0
  427. package/package.json +7 -7
  428. package/src/generated/docs.entry.ts +320 -0
  429. package/dist/esm/_virtual/_rolldown/runtime.mjs +0 -8
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-03-13
3
- updatedAt: 2025-12-13
3
+ updatedAt: 2026-06-21
4
4
  title: Wtyczka Sync JSON
5
5
  description: Synchronizuj słowniki Intlayer z zewnętrznymi plikami JSON i18n (i18next, next-intl, react-intl, vue-i18n i inne). Zachowaj istniejące i18n, korzystając z Intlayer do zarządzania, tłumaczenia i testowania swoich komunikatów.
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: "Dodano opcję splitKeys (jeden słownik na klucz przestrzeni nazw najwyższego poziomu) dla układów jednoplikowych next-intl / react-intl"
27
30
  - version: 6.1.6
28
31
  date: 2025-10-05
29
32
  changes: "Pierwsza dokumentacja wtyczki Sync JSON"
@@ -59,9 +62,65 @@ pnpm add -D @intlayer/sync-json-plugin
59
62
  npm i -D @intlayer/sync-json-plugin
60
63
  ```
61
64
 
62
- ## Szybki start
65
+ ## Plugins
63
66
 
64
- Dodaj wtyczkę do swojego pliku `intlayer.config.ts` i wskaż ją na istniejącą strukturę JSON.
67
+ This package provides two plugins:
68
+
69
+ - `loadJSON`: Load JSON files into Intlayer dictionaries.
70
+ - 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.
71
+ This plugin can be used
72
+ - 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.
73
+ - 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.
74
+
75
+ > Under the hood, this plugin will scan all the codebase and search for specific JSON files and load them into Intlayer dictionaries.
76
+ > Note that this plugin will not write the output and translations back to the JSON files.
77
+
78
+ - `syncJSON`: Synchronize JSON files with Intlayer dictionaries.
79
+ - 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.
80
+
81
+ ## Using both plugins
82
+
83
+ ```ts fileName="intlayer.config.ts"
84
+ import { Locales, type IntlayerConfig } from "intlayer";
85
+ import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
86
+
87
+ const config: IntlayerConfig = {
88
+ internationalization: {
89
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
90
+ defaultLocale: Locales.ENGLISH,
91
+ },
92
+
93
+ // Keep your current JSON files in sync with Intlayer dictionaries
94
+ plugins: [
95
+ /**
96
+ * Will load all the JSON files in the src that match the pattern {key}.i18n json
97
+ */
98
+ loadJSON({
99
+ source: ({ key }) => `./src/**/${key}.i18n.json`,
100
+ locale: Locales.ENGLISH,
101
+ priority: 1, // Ensures these JSON files take precedence over files at `./locales/en/${key}.json`
102
+ format: "intlayer", // Format of the JSON content
103
+ }),
104
+ /**
105
+ * Will load, and write the output and translations back to the JSON files in the locales directory
106
+ */
107
+ syncJSON({
108
+ format: "i18next",
109
+ source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
110
+ priority: 0,
111
+ format: "i18next",
112
+ }),
113
+ ],
114
+ };
115
+
116
+ export default config;
117
+ ```
118
+
119
+ ## `syncJSON` plugin
120
+
121
+ ### Quick start
122
+
123
+ Add the plugin to your `intlayer.config.ts` and point it at your existing JSON structure.
65
124
 
66
125
  ```ts fileName="intlayer.config.ts"
67
126
  import { Locales, type IntlayerConfig } from "intlayer";
@@ -78,6 +137,7 @@ const config: IntlayerConfig = {
78
137
  syncJSON({
79
138
  // Układ per-locale, per-namespace (np. next-intl, i18next z przestrzeniami nazw)
80
139
  source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
140
+ format: "icu",
81
141
  }),
82
142
  ],
83
143
  };
@@ -88,14 +148,27 @@ export default config;
88
148
  Alternatywa: pojedynczy plik na locale (częste w konfiguracjach i18next/react-intl):
89
149
 
90
150
  ```ts fileName="intlayer.config.ts"
91
- plugins: [
92
- syncJSON({
93
- source: ({ locale }) => `./locales/${locale}.json`,
94
- }),
95
- ];
151
+ import { Locales, type IntlayerConfig } from "intlayer";
152
+ import { syncJSON } from "@intlayer/sync-json-plugin";
153
+
154
+ const config: IntlayerConfig = {
155
+ internationalization: {
156
+ locales: [Locales.ENGLISH, Locales.FRENCH],
157
+ defaultLocale: Locales.ENGLISH,
158
+ },
159
+ plugins: [
160
+ syncJSON({
161
+ format: "i18next",
162
+ source: ({ locale }) => `./locales/${locale}.json`,
163
+ format: "i18next",
164
+ }),
165
+ ],
166
+ };
167
+
168
+ export default config;
96
169
  ```
97
170
 
98
- ### Jak to działa
171
+ #### How it works
99
172
 
100
173
  - Odczyt: wtyczka wykrywa pliki JSON zdefiniowane przez twój builder `source` i ładuje je jako słowniki Intlayer.
101
174
  - Zapis: po budowaniu i wypełnianiu, zapisuje zlokalizowane pliki JSON z powrotem pod te same ścieżki (z końcowym znakiem nowej linii, aby uniknąć problemów z formatowaniem).
@@ -109,6 +182,7 @@ syncJSON({
109
182
  location?: string, // opcjonalna etykieta, domyślnie: "plugin"
110
183
  priority?: number, // opcjonalny priorytet do rozstrzygania konfliktów, domyślnie: 0
111
184
  format?: 'intlayer' | 'icu' | 'i18next', // opcjonalny formatator, używany dla kompatybilności z runtime Intlayer
185
+ splitKeys?: boolean, // opcjonalnie, dzieli pojedynczy plik na jeden słownik na klucz przestrzeni nazw najwyższego poziomu (automatycznie wykrywane)
112
186
  });
113
187
  ```
114
188
 
@@ -133,11 +207,43 @@ syncJSON({
133
207
  }),
134
208
  ```
135
209
 
136
- ## Wiele źródeł JSON i priorytet
210
+ #### `splitKeys` (boolean)
137
211
 
138
- Możesz dodać wiele wtyczek `syncJSON`, aby synchronizować różne źródła JSON. Jest to przydatne, gdy masz wiele bibliotek i18n lub różne struktury JSON w swoim projekcie.
212
+ Kontroluje, czy pojedynczy plik JSON, którego **klucze pierwszego poziomu przestrzeniami nazw**, powinien stać się jednym słownikiem na klucz najwyższego poziomu, zamiast pojedynczego słownika zawierającego cały plik.
139
213
 
140
- ### System priorytetów
214
+ Odpowiada to modelowi przestrzeni nazw bibliotek takich jak `next-intl` i `react-intl`, gdzie jeden plik `messages/{locale}.json` grupuje kilka przestrzeni nazw według kluczy pierwszego poziomu, z których każda jest adresowana niezależnie (np. `useTranslations('Hero')` rozwiązuje się do słownika `Hero`).
215
+
216
+ - `undefined` (domyślnie): **automatycznie wykrywane** — plik jest dzielony, gdy wzorzec `source` nie zawiera segmentu `{key}` (jeden plik zawiera każdą przestrzeń nazw), i zachowywany jako pojedynczy słownik w przeciwnym razie (jeden plik na klucz).
217
+ - `true`: zawsze dzieli każdy klucz najwyższego poziomu na własny słownik.
218
+ - `false`: nigdy nie dzieli; cały plik staje się pojedynczym słownikiem.
219
+
220
+ Biorąc pod uwagę pojedynczy plik `messages/{locale}.json`:
221
+
222
+ ```json fileName="messages/en.json"
223
+ {
224
+ "Hero": { "title": "Full-stack developer" },
225
+ "Nav": { "work": "Work", "about": "About" },
226
+ "About": { "lead": "I build apps end to end." }
227
+ }
228
+ ```
229
+
230
+ ```ts fileName="intlayer.config.ts"
231
+ syncJSON({
232
+ format: "icu",
233
+ source: ({ locale }) => `./messages/${locale}.json`,
234
+ // splitKeys: true, // domyślne, ponieważ wzorzec nie zawiera segmentu `{key}`
235
+ }),
236
+ ```
237
+
238
+ Tworzy to trzy słowniki — `Hero`, `Nav` i `About` — dzięki czemu `useTranslations('Hero')` (next-intl) rozwiązuje się poprawnie. Podczas zapisu zwrotnego wszystkie przestrzenie nazw są ponownie składane w ten sam plik dla danej lokalizacji.
239
+
240
+ > Kiedy zachowujesz jawny segment `{key}` w swoim `source` (np. `./locales/${locale}/${key}.json`), każdy plik jest już jedną przestrzenią nazw, więc dzielenie jest domyślnie wyłączone.
241
+
242
+ ### Multiple JSON sources and priority
243
+
244
+ 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.
245
+
246
+ #### System priorytetów
141
247
 
142
248
  Gdy wiele wtyczek celuje w ten sam klucz słownika, parametr `priority` decyduje, która wtyczka ma pierwszeństwo:
143
249
 
@@ -186,9 +292,135 @@ const config: IntlayerConfig = {
186
292
  export default config;
187
293
  ```
188
294
 
189
- ### Rozwiązywanie konfliktów
295
+ ## Load JSON plugin
296
+
297
+ ### Quick start
298
+
299
+ 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):
300
+
301
+ ```ts fileName="intlayer.config.ts"
302
+ import { Locales, type IntlayerConfig } from "intlayer";
303
+ import { loadJSON } from "@intlayer/sync-json-plugin";
304
+
305
+ const config: IntlayerConfig = {
306
+ internationalization: {
307
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
308
+ defaultLocale: Locales.ENGLISH,
309
+ },
310
+
311
+ plugins: [
312
+ // Ingest JSON messages located anywhere in your source tree
313
+ loadJSON({
314
+ source: ({ key }) => `./src/**/${key}.i18n.json`,
315
+ // Load a single locale per plugin instance (defaults to the config defaultLocale)
316
+ locale: Locales.ENGLISH,
317
+ priority: 0,
318
+ }),
319
+ ],
320
+ };
321
+
322
+ export default config;
323
+ ```
324
+
325
+ Alternative: per‑locale layout, still read‑only (only the selected locale is loaded):
326
+
327
+ ```ts fileName="intlayer.config.ts"
328
+ import { Locales, type IntlayerConfig } from "intlayer";
329
+ import { loadJSON } from "@intlayer/sync-json-plugin";
330
+
331
+ const config: IntlayerConfig = {
332
+ internationalization: {
333
+ locales: [Locales.ENGLISH, Locales.FRENCH],
334
+ defaultLocale: Locales.ENGLISH,
335
+ },
336
+ plugins: [
337
+ loadJSON({
338
+ // Only files for Locales.FRENCH will be loaded from this pattern
339
+ source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
340
+ locale: Locales.FRENCH,
341
+ }),
342
+ ],
343
+ };
344
+
345
+ export default config;
346
+ ```
347
+
348
+ ### How it works
349
+
350
+ - Discover: builds a glob from your `source` builder and collects matching JSON files.
351
+ - Ingest: loads each JSON file as an Intlayer dictionary with the provided `locale`.
352
+ - Read‑only: does not write or format output files; use `syncJSON` if you need round‑trip sync.
353
+ - Auto‑fill ready: defines a `fill` pattern so `intlayer content fill` can populate missing keys.
354
+
355
+ ### API
356
+
357
+ ```ts
358
+ loadJSON({
359
+ // Build paths to your JSON. `locale` is optional if your structure has no locale segment
360
+ source: ({ key, locale }) => string,
361
+
362
+ // Target locale for the dictionaries loaded by this plugin instance
363
+ // Defaults to configuration.internationalization.defaultLocale
364
+ locale?: Locale,
365
+
366
+ // Optional label to identify the source
367
+ location?: string, // default: "plugin"
368
+
369
+ // Priority used for conflict resolution against other sources
370
+ priority?: number, // default: 0
371
+
372
+ // Optional formatter for the JSON content
373
+ format?: 'intlayer' | 'icu' | 'i18next', // default: 'intlayer'
374
+
375
+ // Split a single file into one dictionary per top-level key (auto-detected)
376
+ splitKeys?: boolean,
377
+ });
378
+ ```
379
+
380
+ #### `format` ('intlayer' | 'icu' | 'i18next')
381
+
382
+ 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.
383
+
384
+ - `'intlayer'`: The default Intlayer formatter (default).
385
+ - `'icu'`: Uses ICU message formatting (compatible with libraries like react-intl, vue-i18n).
386
+ - `'i18next'`: Uses i18next message formatting (compatible with i18next, next-i18next, Solid-i18next).
387
+
388
+ **Example:**
389
+
390
+ ```ts
391
+ loadJSON({
392
+ source: ({ key }) => `./src/**/${key}.i18n.json`,
393
+ locale: Locales.ENGLISH,
394
+ format: "icu", // Use ICU formatting for compatibility
395
+ }),
396
+ ```
397
+
398
+ #### `splitKeys` (boolean)
399
+
400
+ Takie samo zachowanie jak w [`syncJSON`](#splitkeys-boolean): gdy pojedynczy plik JSON grupuje kilka przestrzeni nazw według kluczy pierwszego poziomu, każdy klucz najwyższego poziomu staje się własnym słownikiem.
401
+
402
+ - `undefined` (domyślnie): **automatycznie wykrywane** — dzieli, gdy wzorzec `source` nie zawiera segmentu `{key}`, w przeciwnym razie pojedynczy słownik.
403
+ - `true` / `false`: wymusza lub wyłącza dzielenie.
404
+
405
+ ```ts
406
+ loadJSON({
407
+ source: ({ locale }) => `./messages/${locale}.json`,
408
+ format: "icu",
409
+ // splitKeys auto-enabled: `Hero`, `Nav`, `About`, … each become a dictionary
410
+ }),
411
+ ```
412
+
413
+ ### Behavior and conventions
414
+
415
+ - If your `source` mask includes a locale placeholder, only files for the selected `locale` are ingested.
416
+ - Jeśli w masce nie ma segmentu `{key}`, każdy klucz najwyższego poziomu pliku staje się domyślnie własnym słownikiem (zobacz [`splitKeys`](#splitkeys-boolean)). Ustaw `splitKeys: false`, aby zamiast tego załadować cały plik jako pojedynczy słownik indeksowy.
417
+ - Keys are derived from file paths by substituting the `{key}` placeholder in your `source` builder.
418
+ - The plugin only uses discovered files and does not fabricate missing locales or keys.
419
+ - The `fill` path is inferred from your `source` and used to update missing values via CLI when you opt‑in.
420
+
421
+ ## Conflict resolution
190
422
 
191
- Gdy ten sam klucz tłumaczenia występuje w wielu źródłach JSON:
423
+ When the same translation key exists in multiple JSON sources:
192
424
 
193
425
  1. Wtyczka o najwyższym priorytecie decyduje o ostatecznej wartości
194
426
  2. Źródła o niższym priorytecie są używane jako zapasowe dla brakujących kluczy
@@ -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: Nowy Intlayer v8. Co nowego?
5
5
  description: Odkryj, co nowego w Intlayer v8. Znaczące ulepszenia w doświadczeniu deweloperskim, walidacji treści i zarządzaniu słownikami.
6
6
  keywords:
@@ -409,6 +409,16 @@ Więcej informacji znajdziesz w [Dokumentacji treści HTML](https://github.com/a
409
409
 
410
410
  ---
411
411
 
412
+ ## Pliki zawartości YAML i Markdown (v8.10.0)
413
+
414
+ Możesz teraz deklarować zawartość bezpośrednio przy użyciu rozszerzeń plików `.content.md` i `.content.yaml`. Jest to idealne rozwiązanie dla długich treści, blogów, dokumentacji i polityk prywatności.
415
+
416
+ Pliki te są w pełni edytowalne z poziomu Edytora Wizualnego (Visual Editor), co zapewnia usprawniony przepływ pracy dla nietechnicznych członków zespołu.
417
+
418
+ Więcej szczegółów znajdziesz w [Dokumentacji plików zawartości YAML](https://intlayer.org/doc/concept/content#yaml-content-file) oraz [Dokumentacji plików zawartości Markdown](https://intlayer.org/doc/concept/content/markdown).
419
+
420
+ ---
421
+
412
422
  ## Niestandardowe przepisywanie URL
413
423
 
414
424
  Intlayer v8 wprowadza obsługę **niestandardowego przepisywania URL**, co pozwala definiować ścieżki specyficzne dla lokalizacji, różne od standardowej struktury `/locale/path`. To potężna funkcja poprawiająca lokalne SEO i zapewniająca bardziej naturalne doświadczenie użytkownika dla osób nieposługujących się angielskim.
@@ -753,6 +763,58 @@ export default {
753
763
  </Tab>
754
764
  </Tabs>
755
765
 
766
+ ## Reguły liczby mnogiej Unicode CLDR (v8.8.0)
767
+
768
+ Wprowadzono nowy helper węzła `plural` oparty na regułach liczby mnogiej zdefiniowanych przez projekt Unicode CLDR, co poprawia obsługę złożonych języków.
769
+
770
+ ```typescript fileName="src/openings.content.ts"
771
+ import { plural, t, type Dictionary } from "intlayer";
772
+
773
+ const openingsContent = {
774
+ key: "total_openings",
775
+ content: {
776
+ totalOpenings: t({
777
+ en: plural({
778
+ one: "{{count}} opening",
779
+ other: "{{count}} openings",
780
+ }),
781
+ fr: plural({
782
+ one: "{{count}} offre",
783
+ other: "{{count}} offres",
784
+ }),
785
+ }),
786
+ },
787
+ } satisfies Dictionary;
788
+
789
+ export default openingsContent;
790
+ ```
791
+
792
+ Możesz następnie przekazać liczbę dynamicznie w komponencie swojego frameworka:
793
+
794
+ ```tsx
795
+ import type { FC } from "react";
796
+ import { useIntlayer } from "react-intlayer";
797
+
798
+ const OpeningsComponent: FC<{ count: number }> = ({ count }) => {
799
+ const { totalOpenings } = useIntlayer("total_openings");
800
+
801
+ return (
802
+ <div>
803
+ {/* Po angielsku: */}
804
+ {/* count=0 → "0 openings" (other) */}
805
+ {/* count=1 → "1 opening" (one) */}
806
+ {/* count=2 → "2 openings" (other) */}
807
+ {/* count=21 → "21 openings" (other) */}
808
+ <p>{totalOpenings(count)}</p>
809
+ </div>
810
+ );
811
+ };
812
+ ```
813
+
814
+ Więcej informacji znajdziesz w [Dokumentacji pluralizacji](https://intlayer.org/doc/concept/content/plural).
815
+
816
+ ---
817
+
756
818
  ## Walidacja schematów treści
757
819
 
758
820
  W Intlayer v8 wprowadzono walidację schematów dla słowników. Teraz możesz definiować wielokrotnego użytku schematy walidacji w konfiguracji przy użyciu Zod i stosować je w plikach z zawartością. Dzięki temu Twoja zawartość zawsze będzie zgodna z oczekiwaną strukturą, a błędy zostaną wykryte podczas budowania (build time).
@@ -797,6 +859,34 @@ Jeżeli zawartość nie spełnia schematu (np. tytuł jest zbyt krótki), proces
797
859
 
798
860
  ---
799
861
 
862
+ ## TypeScript: Akcesory prymitywów IntlayerNode
863
+
864
+ Typ `IntlayerNode` został zaktualizowany, aby umożliwić wywoływanie prymitywnych metod JavaScript bezpośrednio na węzłach zawartości. Umożliwia to interakcję ze zlokalizowaną zawartością bezpośrednio tak, jakby była standardowym typem prymitywnym string, number, boolean lub array.
865
+
866
+ Wspierane w React, Preact, Solid, Svelte, Vue i Angular.
867
+
868
+ ### Przykład dla String
869
+
870
+ ```typescript
871
+ content.placeholder; // Zwraca IntlayerNode<string>
872
+ content.placeholder.value; // Zwraca string
873
+ content.placeholder.toString(); // Zwraca string
874
+ content.placeholder.toLowerCase(); // Zwraca string
875
+ String(content.placeholder); // Zwraca string
876
+ content.placeholder.toUpperCase(); // Zwraca string z wielkimi literami
877
+ content.placeholder.replace("a", "b"); // Zwraca zmodyfikowany string
878
+ ```
879
+
880
+ ### Przykład dla Array
881
+
882
+ ```typescript
883
+ content.myArrayOfString // Zwraca IntlayerNode<Array<string>>
884
+ content.myArrayOfString.find(...) // Zwraca element
885
+ content.myArrayOfString.join(', ') // Zwraca połączony string
886
+ ```
887
+
888
+ ---
889
+
800
890
  ### Ulepszone automatyczne wykrywanie zawartości
801
891
 
802
892
  W wersji v8 Intlayer inteligentnie wykrywa składnię Markdown, tagi HTML oraz wstawienia zmiennych w ciągach treści. Oznacza to, że często możesz pominąć pomocnicze funkcje takie jak `md()`, `html()` czy `insert()`.
@@ -1002,6 +1092,17 @@ Rozszerzenie Intlayer dla VSCode otrzymuje znaczące aktualizacje w wersji v8, a
1002
1092
 
1003
1093
  ---
1004
1094
 
1095
+ ## Narzędzia: Watcher C++ i LSP oparty na OXC (v8.12.0)
1096
+
1097
+ Intlayer v8.12.0 przynosi znaczące ulepszenia w doświadczeniu deweloperskim:
1098
+
1099
+ - **Parcel Watcher**: Watcher zawartości został zmigrowany z `chokidar` do `@parcel/watcher`, wykorzystując natywne śledzenie plików w C++, aby zapewnić szybsze aktualizacje i znacznie niższe zużycie pamięci.
1100
+ - **Nowy Language Server Protocol (LSP)**: Dostępny jest teraz zupełnie nowy LSP. Zbudowany w oparciu o parsowanie OXC, pomaga Twojemu IDE i agentom AI bezproblemowo łączyć wywołania `useIntlayer('my-key')` z odpowiadającymi im plikami `.content` i odwrotnie.
1101
+
1102
+ Więcej szczegółów znajdziesz w [Dokumentacji LSP](https://intlayer.org/doc/lsp).
1103
+
1104
+ ---
1105
+
1005
1106
  ## Optymalizacje kompilatora
1006
1107
 
1007
1108
  Intlayer v8 zawiera nową warstwę cache'owania dla kompilatora Markdown i HTML. Zapewnia to, że identyczne ciągi treści z tą samą konfiguracją są parsowane tylko raz, co znacząco zmniejsza narzut podczas ponownych renderów lub przy użyciu tej samej treści w wielu miejscach.
@@ -1057,6 +1158,48 @@ Intlayer v8 zawiera nową warstwę cache'owania dla kompilatora Markdown i HTML.
1057
1158
 
1058
1159
  ---
1059
1160
 
1161
+ ## Eksperymentalne optymalizacje budowania: Minify i Purge (v8.7.0)
1162
+
1163
+ Intlayer v8.7.0 wprowadza nowe eksperymentalne funkcje budowania w Twoim `intlayer.config.ts`, zaprojektowane w celu optymalizacji produkcyjnego bundle'a:
1164
+
1165
+ - **Minifikacja słowników (Dictionary Minification)**: Minifikuje pliki słowników w celu zmniejszenia ich rozmiaru.
1166
+ - **Usuwanie nieużywanych kluczy (Unused Key Purging)**: Skanuje i usuwa nieużywane klucze tłumaczeń ze słowników, zmieniając nazwy aktywnych kluczy na krótkie znaki (np. `"products" -> "a"`, `"pricing" -> "b"`). Zmniejsza to rozmiar bundle'a nawet o 5%.
1167
+ - **Wyłączenie sprawdzania TypeScript**: Przyspiesza budowanie poprzez wyłączenie sprawdzania typów TypeScript podczas etapu kompilacji.
1168
+
1169
+ ```typescript fileName="intlayer.config.ts"
1170
+ import { Locales, type IntlayerConfig } from "intlayer";
1171
+
1172
+ const config: IntlayerConfig = {
1173
+ internationalization: {
1174
+ locales: [Locales.ENGLISH, Locales.FRENCH],
1175
+ defaultLocale: Locales.ENGLISH,
1176
+ },
1177
+ dictionary: {
1178
+ importMode: "dynamic",
1179
+ },
1180
+ build: {
1181
+ /**
1182
+ * Minifikuj słowniki, aby zmniejszyć rozmiar bundle'a.
1183
+ */
1184
+ minify: true,
1185
+
1186
+ /**
1187
+ * Usuń nieużywane klucze w słownikach
1188
+ */
1189
+ purge: true,
1190
+
1191
+ /**
1192
+ * Wskazuje, czy proces budowania powinien sprawdzać typy TypeScript
1193
+ */
1194
+ checkTypes: false,
1195
+ },
1196
+ };
1197
+
1198
+ export default config;
1199
+ ```
1200
+
1201
+ ---
1202
+
1060
1203
  ## Elastyczność: Ujednolicony tryb importu
1061
1204
 
1062
1205
  Właściwość boolean `live` została oznaczona jako przestarzała na rzecz bardziej wszechstronnej właściwości `importMode`. Pozwala to na jednoznaczne określenie, w jaki sposób słowniki powinny być ładowane: statycznie, dynamicznie lub poprzez synchronizację w czasie rzeczywistym.
@@ -1173,7 +1316,7 @@ Wcześniej `contentDir` było używane zarówno do obserwowania plików `.conten
1173
1316
 
1174
1317
  **Migracja:**
1175
1318
 
1176
- Jeśli wcześniej ustawiłeś `contentDir`, Intlayer v8 użyje go również jako domyślnego dla `codeDir`, ale zaloguje ostrzeżenie. Powinieneś jawnie zdefiniować `codeDir` w swojej konfiguracji.
1319
+ Jeśli wcześniej ustawiłeś `contentDir`, Intlayer v8 użyje go również jako domyślnego dla `codeDir`, ale zaloguje ostrzeżenie. Powiniensy jawnie zdefiniować `codeDir` w swojej konfiguracji.
1177
1320
 
1178
1321
  **Zachowanie w v7:**
1179
1322
 
@@ -1204,6 +1347,49 @@ Treści Markdown i HTML w Svelte są teraz automatycznie parsowane do HTML podcz
1204
1347
 
1205
1348
  ---
1206
1349
 
1350
+ ## Wsparcie dla Angulara: Vite Bundler (v8.11.0)
1351
+
1352
+ Dla użytkowników Angulara, Intlayer wspiera teraz natywnie bundler Vite poprzez nowy, niestandardowy plugin esbuild, co przyspiesza czas programowania i budowania.
1353
+
1354
+ Szczegóły dotyczące konfiguracji znajdziesz w [Dokumentacji środowiska Angular](https://intlayer.org/doc/environment/angular).
1355
+
1356
+ ---
1357
+
1358
+ ## Generowanie mapy strony - Sitemap (v8.6.0)
1359
+
1360
+ Intlayer generuje teraz automatycznie mapy stron (sitemaps) na podstawie Twoich lokalizacji (locales) i trybu routingu. Jest to szczególnie przydatne do optymalizacji SEO w architekturach routerów takich jak TanStack Router:
1361
+
1362
+ ```typescript fileName="src/routes/sitemap.xml.ts"
1363
+ import { createFileRoute } from "@tanstack/react-router";
1364
+ import { generateSitemap } from "intlayer";
1365
+
1366
+ const SITE_URL = (
1367
+ import.meta.env.VITE_SITE_URL ?? "http://localhost:3000"
1368
+ ).replace(/\/$/, "");
1369
+
1370
+ export const Route = createFileRoute("/sitemap.xml")({
1371
+ server: {
1372
+ handlers: {
1373
+ GET: async () => {
1374
+ const sitemap = generateSitemap(
1375
+ [
1376
+ { path: "/", changefreq: "daily", priority: 1.0 },
1377
+ { path: "/about", changefreq: "monthly", priority: 0.8 },
1378
+ ],
1379
+ { siteUrl: SITE_URL }
1380
+ );
1381
+
1382
+ return new Response(sitemap, {
1383
+ headers: { "Content-Type": "application/xml" },
1384
+ });
1385
+ },
1386
+ },
1387
+ },
1388
+ });
1389
+ ```
1390
+
1391
+ ---
1392
+
1207
1393
  ## Notatki migracyjne z v7
1208
1394
 
1209
1395
  ### Zmiany w konfiguracji