@intlayer/docs 5.8.1-canary.0 → 6.0.0-canary.0

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 (378) hide show
  1. package/blog/ar/rag_powered_documentation_assistant.md +282 -0
  2. package/blog/de/rag_powered_documentation_assistant.md +282 -0
  3. package/blog/en/rag_powered_documentation_assistant.md +289 -0
  4. package/blog/en-GB/rag_powered_documentation_assistant.md +284 -0
  5. package/blog/es/rag_powered_documentation_assistant.md +308 -0
  6. package/blog/fr/rag_powered_documentation_assistant.md +308 -0
  7. package/blog/hi/rag_powered_documentation_assistant.md +284 -0
  8. package/blog/it/rag_powered_documentation_assistant.md +284 -0
  9. package/blog/ja/rag_powered_documentation_assistant.md +284 -0
  10. package/blog/ko/rag_powered_documentation_assistant.md +283 -0
  11. package/blog/pt/rag_powered_documentation_assistant.md +284 -0
  12. package/blog/ru/rag_powered_documentation_assistant.md +284 -0
  13. package/blog/tr/index.md +69 -0
  14. package/blog/tr/internationalization_and_SEO.md +273 -0
  15. package/blog/tr/intlayer_with_i18next.md +162 -0
  16. package/blog/tr/intlayer_with_next-i18next.md +367 -0
  17. package/blog/tr/intlayer_with_next-intl.md +392 -0
  18. package/blog/tr/intlayer_with_react-i18next.md +346 -0
  19. package/blog/tr/intlayer_with_react-intl.md +345 -0
  20. package/blog/tr/list_i18n_technologies/CMS/drupal.md +143 -0
  21. package/blog/tr/list_i18n_technologies/CMS/wix.md +167 -0
  22. package/blog/tr/list_i18n_technologies/CMS/wordpress.md +188 -0
  23. package/blog/tr/list_i18n_technologies/frameworks/angular.md +125 -0
  24. package/blog/tr/list_i18n_technologies/frameworks/flutter.md +150 -0
  25. package/blog/tr/list_i18n_technologies/frameworks/react-native.md +217 -0
  26. package/blog/tr/list_i18n_technologies/frameworks/react.md +155 -0
  27. package/blog/tr/list_i18n_technologies/frameworks/svelte.md +129 -0
  28. package/blog/tr/list_i18n_technologies/frameworks/vue.md +130 -0
  29. package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +170 -0
  30. package/blog/tr/rag_powered_documentation_assistant.md +284 -0
  31. package/blog/tr/react-i18next_vs_react-intl_vs_intlayer.md +162 -0
  32. package/blog/tr/vue-i18n_vs_intlayer.md +276 -0
  33. package/blog/tr/what_is_internationalization.md +166 -0
  34. package/blog/zh/rag_powered_documentation_assistant.md +284 -0
  35. package/dist/cjs/generated/blog.entry.cjs +212 -0
  36. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  37. package/dist/cjs/generated/docs.entry.cjs +660 -132
  38. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  39. package/dist/cjs/generated/frequentQuestions.entry.cjs +84 -0
  40. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  41. package/dist/cjs/generated/legal.entry.cjs +6 -0
  42. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  43. package/dist/esm/generated/blog.entry.mjs +212 -0
  44. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  45. package/dist/esm/generated/docs.entry.mjs +660 -132
  46. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  47. package/dist/esm/generated/frequentQuestions.entry.mjs +84 -0
  48. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  49. package/dist/esm/generated/legal.entry.mjs +6 -0
  50. package/dist/esm/generated/legal.entry.mjs.map +1 -1
  51. package/dist/types/generated/blog.entry.d.ts +1 -0
  52. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  53. package/dist/types/generated/docs.entry.d.ts +5 -2
  54. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  55. package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
  56. package/dist/types/generated/legal.entry.d.ts.map +1 -1
  57. package/docs/ar/autoFill.md +41 -40
  58. package/docs/ar/configuration.md +202 -199
  59. package/docs/ar/dictionary/content_file.md +1059 -0
  60. package/docs/ar/intlayer_CMS.md +4 -4
  61. package/docs/ar/intlayer_with_nestjs.md +271 -0
  62. package/docs/ar/intlayer_with_nextjs_page_router.md +1 -1
  63. package/docs/ar/intlayer_with_react_router_v7.md +533 -0
  64. package/docs/ar/intlayer_with_tanstack.md +465 -299
  65. package/docs/ar/intlayer_with_vite+preact.md +7 -7
  66. package/docs/ar/intlayer_with_vite+react.md +7 -7
  67. package/docs/ar/intlayer_with_vite+vue.md +9 -9
  68. package/docs/ar/packages/vite-intlayer/index.md +3 -3
  69. package/docs/ar/readme.md +261 -0
  70. package/docs/ar/testing.md +199 -0
  71. package/docs/de/autoFill.md +42 -19
  72. package/docs/de/configuration.md +155 -147
  73. package/docs/de/dictionary/content_file.md +1059 -0
  74. package/docs/de/intlayer_CMS.md +4 -5
  75. package/docs/de/intlayer_with_nestjs.md +270 -0
  76. package/docs/de/intlayer_with_nextjs_page_router.md +1 -1
  77. package/docs/de/intlayer_with_react_router_v7.md +537 -0
  78. package/docs/de/intlayer_with_tanstack.md +469 -302
  79. package/docs/de/intlayer_with_vite+preact.md +7 -7
  80. package/docs/de/intlayer_with_vite+react.md +7 -7
  81. package/docs/de/intlayer_with_vite+vue.md +9 -9
  82. package/docs/de/packages/vite-intlayer/index.md +3 -3
  83. package/docs/de/readme.md +261 -0
  84. package/docs/de/testing.md +200 -0
  85. package/docs/en/CI_CD.md +4 -6
  86. package/docs/en/autoFill.md +25 -5
  87. package/docs/en/configuration.md +45 -54
  88. package/docs/en/dictionary/content_file.md +1054 -0
  89. package/docs/en/intlayer_CMS.md +8 -7
  90. package/docs/en/intlayer_cli.md +112 -5
  91. package/docs/en/intlayer_with_nestjs.md +268 -0
  92. package/docs/en/intlayer_with_nextjs_page_router.md +1 -1
  93. package/docs/en/intlayer_with_react_router_v7.md +531 -0
  94. package/docs/en/intlayer_with_tanstack.md +463 -294
  95. package/docs/en/intlayer_with_vite+preact.md +8 -8
  96. package/docs/en/intlayer_with_vite+react.md +8 -8
  97. package/docs/en/intlayer_with_vite+vue.md +8 -8
  98. package/docs/en/packages/intlayer/getLocalizedUrl.md +102 -25
  99. package/docs/en/packages/vite-intlayer/index.md +3 -3
  100. package/docs/en/readme.md +261 -0
  101. package/docs/en/testing.md +200 -0
  102. package/docs/en-GB/autoFill.md +29 -6
  103. package/docs/en-GB/configuration.md +79 -71
  104. package/docs/en-GB/dictionary/content_file.md +1084 -0
  105. package/docs/en-GB/intlayer_CMS.md +4 -5
  106. package/docs/en-GB/intlayer_with_nestjs.md +268 -0
  107. package/docs/en-GB/intlayer_with_nextjs_page_router.md +1 -1
  108. package/docs/en-GB/intlayer_with_react_router_v7.md +533 -0
  109. package/docs/en-GB/intlayer_with_tanstack.md +466 -299
  110. package/docs/en-GB/intlayer_with_vite+preact.md +7 -7
  111. package/docs/en-GB/intlayer_with_vite+react.md +7 -7
  112. package/docs/en-GB/intlayer_with_vite+vue.md +9 -9
  113. package/docs/en-GB/packages/vite-intlayer/index.md +3 -3
  114. package/docs/en-GB/readme.md +261 -0
  115. package/docs/en-GB/testing.md +200 -0
  116. package/docs/es/autoFill.md +45 -23
  117. package/docs/es/configuration.md +171 -167
  118. package/docs/es/dictionary/content_file.md +1088 -0
  119. package/docs/es/intlayer_CMS.md +4 -5
  120. package/docs/es/intlayer_with_nestjs.md +268 -0
  121. package/docs/es/intlayer_with_nextjs_page_router.md +1 -1
  122. package/docs/es/intlayer_with_react_router_v7.md +533 -0
  123. package/docs/es/intlayer_with_tanstack.md +469 -280
  124. package/docs/es/intlayer_with_vite+preact.md +7 -7
  125. package/docs/es/intlayer_with_vite+react.md +7 -7
  126. package/docs/es/intlayer_with_vite+vue.md +9 -9
  127. package/docs/es/packages/vite-intlayer/index.md +3 -3
  128. package/docs/es/readme.md +261 -0
  129. package/docs/es/testing.md +200 -0
  130. package/docs/fr/autoFill.md +47 -24
  131. package/docs/fr/configuration.md +213 -198
  132. package/docs/fr/dictionary/content_file.md +1054 -0
  133. package/docs/fr/intlayer_CMS.md +4 -5
  134. package/docs/fr/intlayer_with_nestjs.md +268 -0
  135. package/docs/fr/intlayer_with_nextjs_page_router.md +1 -1
  136. package/docs/fr/intlayer_with_react_router_v7.md +549 -0
  137. package/docs/fr/intlayer_with_tanstack.md +465 -279
  138. package/docs/fr/intlayer_with_vite+preact.md +7 -7
  139. package/docs/fr/intlayer_with_vite+react.md +7 -7
  140. package/docs/fr/intlayer_with_vite+vue.md +9 -9
  141. package/docs/fr/packages/vite-intlayer/index.md +3 -3
  142. package/docs/fr/readme.md +261 -0
  143. package/docs/fr/testing.md +200 -0
  144. package/docs/hi/autoFill.md +47 -25
  145. package/docs/hi/configuration.md +194 -189
  146. package/docs/hi/dictionary/content_file.md +1056 -0
  147. package/docs/hi/intlayer_CMS.md +4 -5
  148. package/docs/hi/intlayer_with_nestjs.md +269 -0
  149. package/docs/hi/intlayer_with_nextjs_page_router.md +1 -1
  150. package/docs/hi/intlayer_with_react_router_v7.md +533 -0
  151. package/docs/hi/intlayer_with_tanstack.md +467 -282
  152. package/docs/hi/intlayer_with_vite+preact.md +7 -7
  153. package/docs/hi/intlayer_with_vite+react.md +7 -7
  154. package/docs/hi/intlayer_with_vite+vue.md +9 -9
  155. package/docs/hi/packages/vite-intlayer/index.md +3 -3
  156. package/docs/hi/readme.md +261 -0
  157. package/docs/hi/testing.md +200 -0
  158. package/docs/it/autoFill.md +46 -24
  159. package/docs/it/configuration.md +169 -161
  160. package/docs/it/dictionary/content_file.md +1061 -0
  161. package/docs/it/intlayer_CMS.md +4 -5
  162. package/docs/it/intlayer_with_nestjs.md +268 -0
  163. package/docs/it/intlayer_with_nextjs_page_router.md +1 -1
  164. package/docs/it/intlayer_with_react_router_v7.md +535 -0
  165. package/docs/it/intlayer_with_tanstack.md +467 -301
  166. package/docs/it/intlayer_with_vite+preact.md +7 -7
  167. package/docs/it/intlayer_with_vite+react.md +7 -7
  168. package/docs/it/intlayer_with_vite+vue.md +9 -9
  169. package/docs/it/packages/vite-intlayer/index.md +3 -3
  170. package/docs/it/readme.md +261 -0
  171. package/docs/it/testing.md +200 -0
  172. package/docs/ja/autoFill.md +45 -23
  173. package/docs/ja/configuration.md +243 -204
  174. package/docs/ja/dictionary/content_file.md +1064 -0
  175. package/docs/ja/intlayer_CMS.md +4 -5
  176. package/docs/ja/intlayer_with_nestjs.md +268 -0
  177. package/docs/ja/intlayer_with_nextjs_page_router.md +1 -1
  178. package/docs/ja/intlayer_with_react_router_v7.md +534 -0
  179. package/docs/ja/intlayer_with_tanstack.md +467 -303
  180. package/docs/ja/intlayer_with_vite+preact.md +7 -7
  181. package/docs/ja/intlayer_with_vite+react.md +7 -7
  182. package/docs/ja/intlayer_with_vite+vue.md +9 -9
  183. package/docs/ja/packages/vite-intlayer/index.md +3 -3
  184. package/docs/ja/readme.md +263 -0
  185. package/docs/ja/testing.md +200 -0
  186. package/docs/ko/autoFill.md +39 -16
  187. package/docs/ko/configuration.md +217 -197
  188. package/docs/ko/dictionary/content_file.md +1060 -0
  189. package/docs/ko/intlayer_CMS.md +4 -5
  190. package/docs/ko/intlayer_with_nestjs.md +268 -0
  191. package/docs/ko/intlayer_with_nextjs_page_router.md +1 -1
  192. package/docs/ko/intlayer_with_react_router_v7.md +540 -0
  193. package/docs/ko/intlayer_with_tanstack.md +466 -302
  194. package/docs/ko/intlayer_with_vite+preact.md +7 -7
  195. package/docs/ko/intlayer_with_vite+react.md +7 -7
  196. package/docs/ko/intlayer_with_vite+vue.md +9 -9
  197. package/docs/ko/packages/vite-intlayer/index.md +3 -3
  198. package/docs/ko/readme.md +261 -0
  199. package/docs/ko/testing.md +200 -0
  200. package/docs/pt/autoFill.md +39 -15
  201. package/docs/pt/configuration.md +165 -147
  202. package/docs/pt/dictionary/content_file.md +1062 -0
  203. package/docs/pt/intlayer_CMS.md +4 -5
  204. package/docs/pt/intlayer_with_nestjs.md +271 -0
  205. package/docs/pt/intlayer_with_nextjs_page_router.md +1 -1
  206. package/docs/pt/intlayer_with_react_router_v7.md +535 -0
  207. package/docs/pt/intlayer_with_tanstack.md +469 -300
  208. package/docs/pt/intlayer_with_vite+preact.md +7 -7
  209. package/docs/pt/intlayer_with_vite+react.md +7 -7
  210. package/docs/pt/intlayer_with_vite+vue.md +9 -9
  211. package/docs/pt/packages/vite-intlayer/index.md +3 -3
  212. package/docs/pt/readme.md +261 -0
  213. package/docs/pt/testing.md +200 -0
  214. package/docs/ru/autoFill.md +52 -30
  215. package/docs/ru/configuration.md +164 -117
  216. package/docs/ru/dictionary/content_file.md +1064 -0
  217. package/docs/ru/intlayer_CMS.md +4 -4
  218. package/docs/ru/intlayer_with_nestjs.md +270 -0
  219. package/docs/ru/intlayer_with_nextjs_page_router.md +1 -1
  220. package/docs/ru/intlayer_with_react_router_v7.md +534 -0
  221. package/docs/ru/intlayer_with_tanstack.md +470 -305
  222. package/docs/ru/intlayer_with_vite+preact.md +7 -7
  223. package/docs/ru/intlayer_with_vite+react.md +7 -7
  224. package/docs/ru/intlayer_with_vite+vue.md +9 -9
  225. package/docs/ru/packages/vite-intlayer/index.md +3 -3
  226. package/docs/ru/readme.md +261 -0
  227. package/docs/ru/testing.md +202 -0
  228. package/docs/tr/CI_CD.md +198 -0
  229. package/docs/tr/autoFill.md +201 -0
  230. package/docs/tr/configuration.md +585 -0
  231. package/docs/tr/dictionary/condition.md +243 -0
  232. package/docs/tr/dictionary/content_file.md +1055 -0
  233. package/docs/tr/dictionary/enumeration.md +251 -0
  234. package/docs/tr/dictionary/file.md +228 -0
  235. package/docs/tr/dictionary/function_fetching.md +218 -0
  236. package/docs/tr/dictionary/gender.md +279 -0
  237. package/docs/tr/dictionary/insertion.md +191 -0
  238. package/docs/tr/dictionary/markdown.md +385 -0
  239. package/docs/tr/dictionary/nesting.md +279 -0
  240. package/docs/tr/dictionary/translation.md +315 -0
  241. package/docs/tr/formatters.md +618 -0
  242. package/docs/tr/how_works_intlayer.md +254 -0
  243. package/docs/tr/index.md +168 -0
  244. package/docs/tr/interest_of_intlayer.md +288 -0
  245. package/docs/tr/intlayer_CMS.md +347 -0
  246. package/docs/tr/intlayer_cli.md +570 -0
  247. package/docs/tr/intlayer_visual_editor.md +269 -0
  248. package/docs/tr/intlayer_with_angular.md +694 -0
  249. package/docs/tr/intlayer_with_create_react_app.md +1218 -0
  250. package/docs/tr/intlayer_with_express.md +415 -0
  251. package/docs/tr/intlayer_with_lynx+react.md +511 -0
  252. package/docs/tr/intlayer_with_nestjs.md +268 -0
  253. package/docs/tr/intlayer_with_nextjs_14.md +1029 -0
  254. package/docs/tr/intlayer_with_nextjs_15.md +1506 -0
  255. package/docs/tr/intlayer_with_nextjs_page_router.md +1484 -0
  256. package/docs/tr/intlayer_with_nuxt.md +773 -0
  257. package/docs/tr/intlayer_with_react_native+expo.md +660 -0
  258. package/docs/tr/intlayer_with_react_router_v7.md +531 -0
  259. package/docs/tr/intlayer_with_tanstack.md +452 -0
  260. package/docs/tr/intlayer_with_vite+preact.md +1673 -0
  261. package/docs/tr/intlayer_with_vite+react.md +1632 -0
  262. package/docs/tr/intlayer_with_vite+solid.md +288 -0
  263. package/docs/tr/intlayer_with_vite+svelte.md +288 -0
  264. package/docs/tr/intlayer_with_vite+vue.md +1042 -0
  265. package/docs/tr/introduction.md +209 -0
  266. package/docs/tr/locale_mapper.md +244 -0
  267. package/docs/tr/mcp_server.md +207 -0
  268. package/docs/tr/packages/@intlayer/api/index.md +58 -0
  269. package/docs/tr/packages/@intlayer/chokidar/index.md +57 -0
  270. package/docs/tr/packages/@intlayer/cli/index.md +47 -0
  271. package/docs/tr/packages/@intlayer/config/index.md +142 -0
  272. package/docs/tr/packages/@intlayer/core/index.md +51 -0
  273. package/docs/tr/packages/@intlayer/design-system/index.md +47 -0
  274. package/docs/tr/packages/@intlayer/dictionary-entry/index.md +53 -0
  275. package/docs/tr/packages/@intlayer/editor/index.md +47 -0
  276. package/docs/tr/packages/@intlayer/editor-react/index.md +47 -0
  277. package/docs/tr/packages/@intlayer/webpack/index.md +61 -0
  278. package/docs/tr/packages/angular-intlayer/index.md +59 -0
  279. package/docs/tr/packages/express-intlayer/index.md +258 -0
  280. package/docs/tr/packages/express-intlayer/t.md +459 -0
  281. package/docs/tr/packages/intlayer/getConfiguration.md +151 -0
  282. package/docs/tr/packages/intlayer/getEnumeration.md +165 -0
  283. package/docs/tr/packages/intlayer/getHTMLTextDir.md +127 -0
  284. package/docs/tr/packages/intlayer/getLocaleLang.md +87 -0
  285. package/docs/tr/packages/intlayer/getLocaleName.md +124 -0
  286. package/docs/tr/packages/intlayer/getLocalizedUrl.md +324 -0
  287. package/docs/tr/packages/intlayer/getMultilingualUrls.md +225 -0
  288. package/docs/tr/packages/intlayer/getPathWithoutLocale.md +81 -0
  289. package/docs/tr/packages/intlayer/getTranslation.md +196 -0
  290. package/docs/tr/packages/intlayer/getTranslationContent.md +195 -0
  291. package/docs/tr/packages/intlayer/index.md +505 -0
  292. package/docs/tr/packages/intlayer-cli/index.md +71 -0
  293. package/docs/tr/packages/intlayer-editor/index.md +139 -0
  294. package/docs/tr/packages/lynx-intlayer/index.md +85 -0
  295. package/docs/tr/packages/next-intlayer/index.md +154 -0
  296. package/docs/tr/packages/next-intlayer/t.md +354 -0
  297. package/docs/tr/packages/next-intlayer/useDictionary.md +270 -0
  298. package/docs/tr/packages/next-intlayer/useIntlayer.md +265 -0
  299. package/docs/tr/packages/next-intlayer/useLocale.md +133 -0
  300. package/docs/tr/packages/nuxt-intlayer/index.md +59 -0
  301. package/docs/tr/packages/preact-intlayer/index.md +55 -0
  302. package/docs/tr/packages/react-intlayer/index.md +148 -0
  303. package/docs/tr/packages/react-intlayer/t.md +304 -0
  304. package/docs/tr/packages/react-intlayer/useDictionary.md +554 -0
  305. package/docs/tr/packages/react-intlayer/useI18n.md +478 -0
  306. package/docs/tr/packages/react-intlayer/useIntlayer.md +253 -0
  307. package/docs/tr/packages/react-intlayer/useLocale.md +212 -0
  308. package/docs/tr/packages/react-native-intlayer/index.md +85 -0
  309. package/docs/tr/packages/react-scripts-intlayer/index.md +82 -0
  310. package/docs/tr/packages/solid-intlayer/index.md +56 -0
  311. package/docs/tr/packages/svelte-intlayer/index.md +55 -0
  312. package/docs/tr/packages/vite-intlayer/index.md +82 -0
  313. package/docs/tr/packages/vue-intlayer/index.md +59 -0
  314. package/docs/tr/per_locale_file.md +321 -0
  315. package/docs/tr/readme.md +261 -0
  316. package/docs/tr/roadmap.md +338 -0
  317. package/docs/tr/testing.md +200 -0
  318. package/docs/tr/vs_code_extension.md +154 -0
  319. package/docs/zh/autoFill.md +40 -18
  320. package/docs/zh/configuration.md +245 -226
  321. package/docs/zh/dictionary/content_file.md +1064 -0
  322. package/docs/zh/intlayer_CMS.md +4 -5
  323. package/docs/zh/intlayer_with_nestjs.md +268 -0
  324. package/docs/zh/intlayer_with_nextjs_page_router.md +1 -1
  325. package/docs/zh/intlayer_with_react_router_v7.md +535 -0
  326. package/docs/zh/intlayer_with_tanstack.md +468 -278
  327. package/docs/zh/intlayer_with_vite+preact.md +7 -7
  328. package/docs/zh/intlayer_with_vite+react.md +7 -7
  329. package/docs/zh/intlayer_with_vite+vue.md +7 -7
  330. package/docs/zh/packages/vite-intlayer/index.md +3 -3
  331. package/docs/zh/readme.md +261 -0
  332. package/docs/zh/testing.md +198 -0
  333. package/frequent_questions/tr/SSR_Next_no_[locale].md +105 -0
  334. package/frequent_questions/tr/array_as_content_declaration.md +72 -0
  335. package/frequent_questions/tr/build_dictionaries.md +59 -0
  336. package/frequent_questions/tr/build_error_CI_CD.md +75 -0
  337. package/frequent_questions/tr/customized_locale_list.md +65 -0
  338. package/frequent_questions/tr/domain_routing.md +114 -0
  339. package/frequent_questions/tr/esbuild_error.md +30 -0
  340. package/frequent_questions/tr/get_locale_cookie.md +142 -0
  341. package/frequent_questions/tr/intlayer_command_undefined.md +156 -0
  342. package/frequent_questions/tr/locale_incorect_in_url.md +74 -0
  343. package/frequent_questions/tr/static_rendering.md +45 -0
  344. package/frequent_questions/tr/translated_path_url.md +56 -0
  345. package/frequent_questions/tr/unknown_command.md +98 -0
  346. package/legal/tr/privacy_notice.md +83 -0
  347. package/legal/tr/terms_of_service.md +55 -0
  348. package/package.json +13 -13
  349. package/src/generated/blog.entry.ts +212 -0
  350. package/src/generated/docs.entry.ts +663 -135
  351. package/src/generated/frequentQuestions.entry.ts +85 -1
  352. package/src/generated/legal.entry.ts +7 -1
  353. package/docs/ar/dictionary/content_extention_customization.md +0 -100
  354. package/docs/ar/dictionary/get_started.md +0 -527
  355. package/docs/de/dictionary/content_extention_customization.md +0 -100
  356. package/docs/de/dictionary/get_started.md +0 -531
  357. package/docs/en/dictionary/content_extention_customization.md +0 -102
  358. package/docs/en/dictionary/get_started.md +0 -529
  359. package/docs/en-GB/dictionary/content_extention_customization.md +0 -100
  360. package/docs/en-GB/dictionary/get_started.md +0 -591
  361. package/docs/es/dictionary/content_extention_customization.md +0 -100
  362. package/docs/es/dictionary/get_started.md +0 -527
  363. package/docs/fr/dictionary/content_extention_customization.md +0 -100
  364. package/docs/fr/dictionary/get_started.md +0 -527
  365. package/docs/hi/dictionary/content_extention_customization.md +0 -100
  366. package/docs/hi/dictionary/get_started.md +0 -527
  367. package/docs/it/dictionary/content_extention_customization.md +0 -113
  368. package/docs/it/dictionary/get_started.md +0 -573
  369. package/docs/ja/dictionary/content_extention_customization.md +0 -113
  370. package/docs/ja/dictionary/get_started.md +0 -576
  371. package/docs/ko/dictionary/content_extention_customization.md +0 -100
  372. package/docs/ko/dictionary/get_started.md +0 -530
  373. package/docs/pt/dictionary/content_extention_customization.md +0 -100
  374. package/docs/pt/dictionary/get_started.md +0 -532
  375. package/docs/ru/dictionary/content_extention_customization.md +0 -100
  376. package/docs/ru/dictionary/get_started.md +0 -575
  377. package/docs/zh/dictionary/content_extention_customization.md +0 -117
  378. package/docs/zh/dictionary/get_started.md +0 -533
@@ -0,0 +1,1064 @@
1
+ ---
2
+ createdAt: 2025-02-07
3
+ updatedAt: 2025-09-20
4
+ title: Файл контента
5
+ description: Узнайте, как настраивать расширения для ваших файлов декларации контента. Следуйте этой документации, чтобы эффективно реализовывать условия в вашем проекте.
6
+ keywords:
7
+ - Файл контента
8
+ - Документация
9
+ - Intlayer
10
+ slugs:
11
+ - doc
12
+ - concept
13
+ - content
14
+ ---
15
+
16
+ # Файл контента
17
+
18
+ <iframe title="i18n, Markdown, JSON… одно универсальное решение для управления всем этим | Intlayer" class="m-auto aspect-[16/9] w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/1VHgSY_j9_I?autoplay=0&amp;origin=http://intlayer.org&amp;controls=0&amp;rel=1"/>
19
+
20
+ ## Что такое файл контента?
21
+
22
+ Файл контента в Intlayer — это файл, содержащий определения словарей.
23
+ Эти файлы объявляют текстовое содержимое вашего приложения, переводы и ресурсы.
24
+ Файлы контента обрабатываются Intlayer для генерации словарей.
25
+
26
+ Словари будут конечным результатом, который ваше приложение импортирует с помощью хука `useIntlayer`.
27
+
28
+ ### Ключевые понятия
29
+
30
+ #### Словарь
31
+
32
+ Словарь — это структурированная коллекция контента, организованная по ключам. Каждый словарь содержит:
33
+
34
+ - **Ключ**: уникальный идентификатор словаря
35
+ - **Контент**: фактические значения контента (текст, числа, объекты и т.д.)
36
+ - **Метаданные**: дополнительная информация, такая как заголовок, описание, теги и т.д.
37
+
38
+ #### Файл контента
39
+
40
+ Пример файла контента:
41
+
42
+ ```tsx fileName="src/example.content.tsx" contentDeclarationFormat="typescript"
43
+ import { type ReactNode } from "react";
44
+ import {
45
+ t,
46
+ enu,
47
+ cond,
48
+ nest,
49
+ md,
50
+ insert,
51
+ file,
52
+ type Dictionary,
53
+ } from "intlayer";
54
+
55
+ interface Content {
56
+ imbricatedContent: {
57
+ imbricatedContent2: {
58
+ stringContent: string; // строковый контент
59
+ numberContent: number; // числовой контент
60
+ booleanContent: boolean; // булевый контент
61
+ javaScriptContent: string; // контент JavaScript
62
+ };
63
+ };
64
+ multilingualContent: string; // мультиязычный контент
65
+ quantityContent: string; // контент с количеством
66
+ conditionalContent: string; // условный контент
67
+ markdownContent: never; // markdown контент (никогда не используется)
68
+ externalContent: string; // внешний контент
69
+ insertionContent: string; // контент с вставкой
70
+ nestedContent: string; // вложенный контент
71
+ fileContent: string; // контент из файла
72
+ jsxContent: ReactNode; // JSX контент
73
+ }
74
+
75
+ export default {
76
+ key: "page", // ключ словаря
77
+ content: {
78
+ imbricatedContent: {
79
+ imbricatedContent2: {
80
+ stringContent: "Hello World",
81
+ numberContent: 123,
82
+ booleanContent: true,
83
+ javaScriptContent: `${process.env.NODE_ENV}`,
84
+ },
85
+ },
86
+ multilingualContent: t({
87
+ ru: "Русский контент",
88
+ en: "English content",
89
+ "en-GB": "English content (UK)",
90
+ fr: "French content",
91
+ es: "Spanish content",
92
+ }),
93
+ quantityContent: enu({
94
+ "<-1": "Меньше чем минус одна машина",
95
+ "-1": "Минус одна машина",
96
+ "0": "Нет машин",
97
+ "1": "Одна машина",
98
+ ">5": "Несколько машин",
99
+ ">19": "Много машин",
100
+ }),
101
+ conditionalContent: cond({
102
+ true: "Валидация включена",
103
+ false: "Валидация отключена",
104
+ }),
105
+ insertionContent: insert("Привет {{name}}!"),
106
+ nestedContent: nest(
107
+ "navbar", // Ключ словаря для вложения
108
+ "login.button" // [Опционально] Путь к контенту для вложения
109
+ ),
110
+ fileContent: file("./path/to/file.txt"),
111
+ externalContent: fetch("https://example.com").then((res) => res.json()),
112
+ markdownContent: md("# Пример Markdown"),
113
+
114
+ /*
115
+ * Доступно только при использовании `react-intlayer` или `next-intlayer`
116
+ */
117
+ jsxContent: <h1>Мой заголовок</h1>,
118
+ },
119
+ } satisfies Dictionary<Content>; // [необязательно] Dictionary является универсальным и позволяет усилить форматирование вашего словаря
120
+ ```
121
+
122
+ ```javascript fileName="src/example.content.mjx" contentDeclarationFormat="esm"
123
+ import { t, enu, cond, nest, md, insert, file } from "intlayer";
124
+
125
+ /** @type {import('intlayer').Dictionary} */
126
+ export default {
127
+ key: "page",
128
+ content: {
129
+ imbricatedContent: {
130
+ imbricatedContent2: {
131
+ stringContent: "Hello World",
132
+ numberContent: 123,
133
+ booleanContent: true,
134
+ javaScriptContent: `${process.env.NODE_ENV}`,
135
+ },
136
+ imbricatedArray: [1, 2, 3],
137
+ },
138
+ multilingualContent: t({
139
+ en: "English content",
140
+ "en-GB": "English content (UK)",
141
+ fr: "French content",
142
+ es: "Spanish content",
143
+ }),
144
+ quantityContent: enu({
145
+ "<-1": "Меньше чем минус одна машина",
146
+ "-1": "Минус одна машина",
147
+ "0": "Нет машин",
148
+ "1": "Одна машина",
149
+ ">5": "Некоторые машины",
150
+ ">19": "Много машин",
151
+ }),
152
+ conditionalContent: cond({
153
+ true: "Валидация включена",
154
+ false: "Валидация отключена",
155
+ }),
156
+ insertionContent: insert("Привет, {{name}}!"),
157
+ nestedContent: nest(
158
+ "navbar", // Ключ словаря для вложения
159
+ "login.button" // [Необязательно] Путь к содержимому для вложения
160
+ ),
161
+ markdownContent: md("# Пример Markdown"),
162
+ fileContent: file("./path/to/file.txt"),
163
+ externalContent: fetch("https://example.com").then((res) => res.json())
164
+
165
+ // Доступно только при использовании `react-intlayer` или `next-intlayer`
166
+ jsxContent: <h1>Мой заголовок</h1>,
167
+ },
168
+ };
169
+ ```
170
+
171
+ ```javascript fileName="src/example.content.cjx" contentDeclarationFormat="commonjs"
172
+ const { t, enu, cond, nest, md, insert, file } = require("intlayer");
173
+
174
+ /** @type {import('intlayer').Dictionary} */
175
+ module.exports = {
176
+ key: "page",
177
+ content: {
178
+ imbricatedContent: {
179
+ imbricatedContent2: {
180
+ stringContent: "Hello World",
181
+ numberContent: 123,
182
+ booleanContent: true,
183
+ javaScriptContent: `${process.env.NODE_ENV}`,
184
+ },
185
+ imbricatedArray: [1, 2, 3],
186
+ },
187
+ multilingualContent: t({
188
+ ru: "Содержимое на русском",
189
+ en: "English content",
190
+ "en-GB": "English content (UK)",
191
+ fr: "French content",
192
+ es: "Spanish content",
193
+ }),
194
+ quantityContent: enu({
195
+ "<-1": "Меньше чем минус одна машина",
196
+ "-1": "Минус одна машина",
197
+ "0": "Нет машин",
198
+ "1": "Одна машина",
199
+ ">5": "Несколько машин",
200
+ ">19": "Много машин",
201
+ }),
202
+ conditionalContent: cond({
203
+ true: "Валидация включена",
204
+ false: "Валидация отключена",
205
+ }),
206
+ insertionContent: insert("Привет, {{name}}!"),
207
+ nestedContent: nest(
208
+ "navbar", // Ключ словаря для вложения
209
+ "login.button" // [Необязательно] Путь к содержимому для вложения
210
+ ),
211
+ markdownContent: md("# Пример Markdown"),
212
+ fileContent: file("./path/to/file.txt"),
213
+ externalContent: fetch("https://example.com").then((res) => res.json())
214
+
215
+ // Доступно только при использовании `react-intlayer` или `next-intlayer`
216
+ jsxContent: <h1>Мой заголовок</h1>,
217
+ },
218
+ };
219
+ ```
220
+
221
+ ```json5 fileName="src/example.content.json" contentDeclarationFormat="json"
222
+ {
223
+ "$schema": "https://intlayer.org/schema.json",
224
+ "key": "page",
225
+ "content": {
226
+ "imbricatedContent": {
227
+ "imbricatedContent2": {
228
+ "stringContent": "Привет, мир",
229
+ "numberContent": 123,
230
+ "booleanContent": true,
231
+ },
232
+ "imbricatedArray": [1, 2, 3],
233
+ },
234
+ "multilingualContent": {
235
+ "nodeType": "translation",
236
+ "translation": {
237
+ "en": "English content",
238
+ "en-GB": "English content (UK)",
239
+ "fr": "French content",
240
+ "es": "Spanish content",
241
+ },
242
+ },
243
+ "quantityContent": {
244
+ "nodeType": "enumeration",
245
+ "enumeration": {
246
+ "0": "Нет машин",
247
+ "1": "Одна машина",
248
+ "<-1": "Меньше чем минус одна машина",
249
+ "-1": "Минус одна машина",
250
+ ">5": "Некоторые машины",
251
+ ">19": "Много машин",
252
+ },
253
+ },
254
+ "conditionalContent": {
255
+ "nodeType": "condition",
256
+ "condition": {
257
+ "true": "Валидация включена",
258
+ "false": "Валидация отключена",
259
+ },
260
+ },
261
+ "insertionContent": {
262
+ "nodeType": "insertion",
263
+ "insertion": "Привет, {{name}}!",
264
+ },
265
+ "nestedContent": {
266
+ "nodeType": "nested",
267
+ "nested": { "dictionaryKey": "app" },
268
+ },
269
+ "markdownContent": {
270
+ "nodeType": "markdown",
271
+ "markdown": "# Пример Markdown",
272
+ },
273
+ "fileContent": {
274
+ "nodeType": "file",
275
+ "file": "./path/to/file.txt",
276
+ },
277
+ "jsxContent": {
278
+ "type": "h1",
279
+ "key": null,
280
+ "ref": null,
281
+ "props": {
282
+ "children": ["Мой заголовок"],
283
+ },
284
+ },
285
+ },
286
+ }
287
+ ```
288
+
289
+ #### Узлы содержимого
290
+
291
+ Узлы содержимого являются строительными блоками содержимого словаря. Они могут быть:
292
+
293
+ - **Примитивные значения**: строки, числа, булевы значения, null, undefined
294
+ - **Типизированные узлы**: специальные типы содержимого, такие как переводы, условия, markdown и т.д.
295
+ - **Функции**: динамическое содержимое, которое может быть вычислено во время выполнения [см. Получение функций](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/function_fetching.md)
296
+ - **Вложенное содержимое**: ссылки на другие словари
297
+
298
+ #### Типы содержимого
299
+
300
+ Intlayer поддерживает различные типы содержимого через типизированные узлы:
301
+
302
+ - **Содержимое перевода**: Многоязычный текст с локализованными значениями [см. Содержимое перевода](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/translation_content.md)
303
+ - **Условное содержимое**: Содержимое, зависящее от булевых выражений [см. Условное содержимое](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/condition_content.md)
304
+ - **Перечисляемое содержимое**: Содержимое, изменяющееся в зависимости от перечисляемых значений [см. Перечисляемое содержимое](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/enumeration_content.md)
305
+ - **Вставляемое содержимое**: Содержимое, которое можно вставлять в другое содержимое [см. Вставляемое содержимое](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/insertion_content.md)
306
+ - **Содержимое Markdown**: Форматированный текст в формате Markdown [см. Содержимое Markdown](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/markdown_content.md)
307
+ - **Вложенное содержимое**: Ссылки на другие словари [см. Вложенное содержимое](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/nested_content.md)
308
+ - **Содержимое по полу**: Содержимое, зависящее от пола [см. Содержимое по полу](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/gender_content.md)
309
+ - **Содержимое файла**: Ссылки на внешние файлы [см. Содержимое файла](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/file_content.md)
310
+
311
+ ## Структура словаря
312
+
313
+ Словарь в Intlayer определяется типом `Dictionary` и содержит несколько свойств, которые управляют его поведением:
314
+
315
+ ### Обязательные свойства
316
+
317
+ #### `key` (строка)
318
+
319
+ Идентификатор словаря. Если несколько словарей имеют одинаковый ключ, Intlayer автоматически объединит их.
320
+
321
+ > Используйте соглашение об именовании в стиле kebab-case (например, `"about-page-meta"`).
322
+
323
+ #### Content (строка | число | булево | объект | массив | функция)
324
+
325
+ Свойство `content` содержит фактические данные словаря и поддерживает:
326
+
327
+ - **Примитивные значения**: строки, числа, булевы значения, null, undefined
328
+ - **Типизированные узлы**: специальные типы содержимого с использованием вспомогательных функций Intlayer
329
+ - **Вложенные объекты**: сложные структуры данных
330
+ - **Массивы**: коллекции содержимого
331
+ - **Функции**: динамическая оценка содержимого
332
+
333
+ ### Необязательные свойства
334
+
335
+ #### `title` (string)
336
+
337
+ Читаемое человеком название словаря, которое помогает идентифицировать его в редакторах и системах управления контентом (CMS). Это особенно полезно при работе с большим количеством словарей или при использовании интерфейсов управления контентом.
338
+
339
+ **Пример:**
340
+
341
+ ```typescript
342
+ {
343
+ key: "about-page-meta",
344
+ title: "Метаданные страницы «О нас»",
345
+ content: { /* ... */ }
346
+ }
347
+ ```
348
+
349
+ #### `description` (string)
350
+
351
+ Подробное описание, объясняющее назначение словаря, рекомендации по использованию и любые особые замечания. Это описание также используется как контекст для генерации переводов с помощью ИИ, что важно для поддержания качества и согласованности переводов.
352
+
353
+ **Пример:**
354
+
355
+ ```typescript
356
+ {
357
+ key: "about-page-meta",
358
+ description: [
359
+ "Этот словарь управляет метаданными страницы «О нас»",
360
+ "Рассмотрите лучшие практики для SEO:",
361
+ "- Заголовок должен содержать от 50 до 60 символов",
362
+ "- Описание должно содержать от 150 до 160 символов",
363
+ ].join('\n'),
364
+ content: { /* ... */ }
365
+ }
366
+ ```
367
+
368
+ #### `tags` (string[])
369
+
370
+ Массив строк для категоризации и организации словарей. Теги предоставляют дополнительный контекст и могут использоваться для фильтрации, поиска или организации словарей в редакторах и системах управления контентом.
371
+
372
+ **Пример:**
373
+
374
+ ```typescript
375
+ {
376
+ key: "about-page-meta",
377
+ tags: ["metadata", "about-page", "seo"],
378
+ content: { /* ... */ }
379
+ }
380
+ ```
381
+
382
+ #### `locale` (LocalesValues)
383
+
384
+ Преобразует словарь в словарь для каждого локаля, где каждое поле, объявленное в содержимом, автоматически преобразуется в узел перевода. Когда это свойство установлено:
385
+
386
+ - Словарь рассматривается как словарь для одного языка (локали)
387
+ - Каждое поле становится узлом перевода для этой конкретной локали
388
+ - НЕ следует использовать узлы перевода (`t()`) в содержимом при использовании этого свойства
389
+ - Если свойство отсутствует, словарь будет рассматриваться как многоязычный
390
+
391
+ > См. [Объявление контента по локалям в Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/per_locale_file.md) для получения дополнительной информации.
392
+
393
+ **Пример:**
394
+
395
+ ```json
396
+ // Словарь для одной локали
397
+ {
398
+ "key": "about-page",
399
+ "locale": "en",
400
+ "content": {
401
+ "title": "About Us", // Это становится узлом перевода для 'en'
402
+ "description": "Learn more about our company"
403
+ }
404
+ }
405
+ ```
406
+
407
+ #### `autoFill` (AutoFill)
408
+
409
+ Инструкции по автоматическому заполнению содержимого словаря из внешних источников. Это можно настроить глобально в `intlayer.config.ts` или для каждого словаря отдельно. Поддерживаются несколько форматов:
410
+
411
+ - **`true`**: Включить авто-заполнение для всех локалей
412
+ - **`string`**: Путь к одному файлу или шаблон с переменными
413
+ - **`object`**: Пути к файлам для каждой локали
414
+
415
+ **Примеры:**
416
+
417
+ ```json
418
+ // Включить для всех локалей
419
+ {
420
+ "autoFill": true
421
+ }
422
+ // Один файл
423
+ {
424
+ "autoFill": "./translations/aboutPage.content.json"
425
+ }
426
+ // Шаблон с переменными
427
+ {
428
+ "autoFill": "/messages/{{locale}}/{{key}}/{{fileName}}.content.json"
429
+ }
430
+ // Точная настройка для каждой локали
431
+ {
432
+ "autoFill": {
433
+ "en": "./translations/en/aboutPage.content.json",
434
+ "fr": "./translations/fr/aboutPage.content.json",
435
+ "es": "./translations/es/aboutPage.content.json"
436
+ }
437
+ }
438
+ ```
439
+
440
+ **Доступные переменные:**
441
+
442
+ - `{{locale}}` – Код локали (например, `fr`, `es`)
443
+ - `{{fileName}}` – Имя файла (например, `example`)
444
+ - `{{key}}` – Ключ словаря (например, `example`)
445
+
446
+ > Подробнее смотрите в разделе [Конфигурация автозаполнения в Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/autoFill.md).
447
+
448
+ ##### `priority` (число)
449
+
450
+ Указывает приоритет словаря для разрешения конфликтов. Когда несколько словарей содержат одинаковый ключ, словарь с наивысшим числовым приоритетом переопределит остальные. Это полезно для управления иерархией контента и переопределениями.
451
+
452
+ **Пример:**
453
+
454
+ ```typescript
455
+ // Базовый словарь
456
+ {
457
+ key: "welcome-message",
458
+ priority: 1,
459
+ content: { message: "Welcome!" }
460
+ }
461
+
462
+ // Словарь-переопределение
463
+ {
464
+ key: "welcome-message",
465
+ priority: 10,
466
+ content: { message: "Добро пожаловать в наш премиум-сервис!" }
467
+ }
468
+ // Это переопределит базовый словарь
469
+ ```
470
+
471
+ ### Свойства CMS
472
+
473
+ ##### `version` (строка)
474
+
475
+ Идентификатор версии для удалённых словарей. Помогает отслеживать, какая версия словаря в данный момент используется, особенно полезно при работе с удалёнными системами управления контентом.
476
+
477
+ ##### `live` (булево)
478
+
479
+ Для удалённых словарей указывает, должен ли словарь загружаться в режиме реального времени во время выполнения. При включении:
480
+
481
+ - Требуется, чтобы `importMode` был установлен в "live" в `intlayer.config.ts`
482
+ - Требуется запущенный живой сервер
483
+ - Словарь будет загружаться во время выполнения с использованием API живой синхронизации
484
+ - Если включён live, но загрузка не удалась, используется динамическое значение
485
+ - Если live не включён, словарь преобразуется во время сборки для оптимальной производительности
486
+
487
+ ### Системные свойства (Автоматически сгенерированные)
488
+
489
+ Эти свойства автоматически генерируются Intlayer и не должны изменяться вручную:
490
+
491
+ ##### `$schema` (string)
492
+
493
+ JSON-схема, используемая для валидации структуры словаря. Автоматически добавляется Intlayer для обеспечения целостности словаря.
494
+
495
+ ##### `id` (string)
496
+
497
+ Для удалённых словарей это уникальный идентификатор словаря на удалённом сервере. Используется для получения и управления удалённым контентом.
498
+
499
+ ##### `localId` (LocalDictionaryId)
500
+
501
+ Уникальный идентификатор для локальных словарей. Автоматически генерируется Intlayer для помощи в идентификации словаря и определения, является ли он локальным или удалённым, а также его расположения.
502
+
503
+ ##### `localIds` (LocalDictionaryId[])
504
+
505
+ Для объединённых словарей этот массив содержит идентификаторы всех словарей, которые были объединены вместе. Полезно для отслеживания источника объединённого содержимого.
506
+
507
+ ##### `filePath` (string)
508
+
509
+ Путь к файлу локального словаря, указывающий, из какого файла `.content` был сгенерирован словарь. Помогает при отладке и отслеживании источника.
510
+
511
+ ##### `versions` (string[])
512
+
513
+ Для удалённых словарей этот массив содержит все доступные версии словаря. Помогает отслеживать, какие версии доступны для использования.
514
+
515
+ ##### `autoFilled` (true)
516
+
517
+ Указывает, был ли словарь автоматически заполнен из внешних источников. В случае конфликтов базовые словари имеют приоритет над автоматически заполненными.
518
+
519
+ ##### `location` ('distant' | 'locale')
520
+
521
+ Указывает расположение словаря:
522
+
523
+ - `'locale'`: Локальный словарь (из файлов контента)
524
+ - `'distant'`: Удалённый словарь (из внешнего источника)
525
+
526
+ ## Типы узлов контента
527
+
528
+ Intlayer предоставляет несколько специализированных типов узлов контента, которые расширяют базовые примитивные значения:
529
+
530
+ ### Переводимый контент (`t`)
531
+
532
+ Многоязычный контент, который варьируется в зависимости от локали:
533
+
534
+ ```typescript
535
+ import { t } from "intlayer";
536
+
537
+ // TypeScript/JavaScript
538
+ multilingualContent: t({
539
+ en: "Welcome to our website",
540
+ fr: "Bienvenue sur notre site web",
541
+ es: "Bienvenido a nuestro sitio web",
542
+ });
543
+ ```
544
+
545
+ ### Условный контент (`cond`)
546
+
547
+ Контент, который меняется в зависимости от булевых условий:
548
+
549
+ ```typescript
550
+ import { cond } from "intlayer";
551
+
552
+ conditionalContent: cond({
553
+ true: "User is logged in",
554
+ false: "Please log in to continue",
555
+ });
556
+ ```
557
+
558
+ ### Перечисляемый контент (`enu`)
559
+
560
+ Контент, который меняется в зависимости от перечисленных значений:
561
+
562
+ ```typescript
563
+ import { enu } from "intlayer";
564
+
565
+ statusContent: enu({
566
+ pending: "Ваш запрос находится в ожидании",
567
+ approved: "Ваш запрос был одобрен",
568
+ rejected: "Ваш запрос был отклонён",
569
+ });
570
+ ```
571
+
572
+ ### Вставляемый контент (`insert`)
573
+
574
+ Контент, который можно вставлять в другой контент:
575
+
576
+ ```typescript
577
+ import { insert } from "intlayer";
578
+
579
+ insertionContent: insert("Этот текст можно вставить куда угодно");
580
+ ```
581
+
582
+ ### Вложенный контент (`nest`)
583
+
584
+ Ссылки на другие словари:
585
+
586
+ ```typescript
587
+ import { nest } from "intlayer";
588
+
589
+ nestedContent: nest("about-page");
590
+ ```
591
+
592
+ ### Контент в формате Markdown (`md`)
593
+
594
+ Форматированный текст в формате Markdown:
595
+
596
+ ```typescript
597
+ import { md } from "intlayer";
598
+
599
+ markdownContent: md(
600
+ "# Добро пожаловать\n\nЭто **жирный** текст с [ссылками](https://example.com)"
601
+ );
602
+ ```
603
+
604
+ ### Контент по половому признаку (`gender`)
605
+
606
+ Контент, который меняется в зависимости от пола:
607
+
608
+ ```typescript
609
+ import { gender } from "intlayer";
610
+
611
+ genderContent: gender({
612
+ male: "Он разработчик",
613
+ female: "Она разработчик",
614
+ other: "Они разработчики",
615
+ });
616
+ ```
617
+
618
+ ### Контент из файла (`file`)
619
+
620
+ Ссылки на внешние файлы:
621
+
622
+ ```typescript
623
+ import { file } from "intlayer";
624
+
625
+ fileContent: file("./path/to/content.txt");
626
+ ```
627
+
628
+ ## Создание файлов контента
629
+
630
+ ### Основная структура файла контента
631
+
632
+ Файл контента экспортирует объект по умолчанию, который соответствует типу `Dictionary`:
633
+
634
+ ```typescript
635
+ // example.content.ts
636
+ import { t, cond, nest, md, insert, file } from "intlayer";
637
+
638
+ export default {
639
+ key: "welcome-page",
640
+ title: "Содержание страницы приветствия",
641
+ description:
642
+ "Контент для главной страницы приветствия, включая секцию героя и функции",
643
+ tags: ["страница", "приветствие", "главная"],
644
+ content: {
645
+ hero: {
646
+ title: t({
647
+ en: "Welcome to Our Platform",
648
+ fr: "Bienvenue sur Notre Plateforme",
649
+ es: "Bienvenido a Nuestra Plataforma",
650
+ }),
651
+ subtitle: t({
652
+ en: "Build amazing applications with ease",
653
+ fr: "Construisez des applications incroyables avec facilité",
654
+ es: "Construye aplicaciones increíbles con facilidad",
655
+ }),
656
+ cta: cond({
657
+ true: t({
658
+ en: "Get Started",
659
+ fr: "Commencer",
660
+ es: "Comenzar",
661
+ }),
662
+ false: t({
663
+ en: "Sign Up",
664
+ fr: "S'inscrire",
665
+ es: "Registrarse",
666
+ }),
667
+ }),
668
+ },
669
+ features: [
670
+ {
671
+ title: t({
672
+ ru: "Простота использования",
673
+ en: "Easy to Use",
674
+ fr: "Facile à Utiliser",
675
+ es: "Fácil de Usar",
676
+ }),
677
+ description: t({
678
+ ru: "Интуитивно понятный интерфейс для всех уровней навыков",
679
+ en: "Intuitive interface for all skill levels",
680
+ fr: "Interface intuitive pour tous les niveaux",
681
+ es: "Interfaz intuitiva para todos los niveles",
682
+ }),
683
+ },
684
+ ],
685
+ documentation: nest("documentation"),
686
+ readme: file("./README.md"),
687
+ },
688
+ } satisfies Dictionary;
689
+ ```
690
+
691
+ ### JSON Content File
692
+
693
+ You can also create content files in JSON format:
694
+
695
+ ```json
696
+ {
697
+ "key": "welcome-page",
698
+ "title": "Содержание главной страницы приветствия",
699
+ "description": "Содержимое главной страницы приветствия",
700
+ "tags": ["page", "welcome"],
701
+ "content": {
702
+ "hero": {
703
+ "title": {
704
+ "nodeType": "translation",
705
+ "translation": {
706
+ "en": "Добро пожаловать на нашу платформу",
707
+ "fr": "Bienvenue sur Notre Plateforme"
708
+ }
709
+ },
710
+ "subtitle": {
711
+ "nodeType": "translation",
712
+ "translation": {
713
+ "en": "Создавайте удивительные приложения с легкостью",
714
+ "fr": "Construisez des applications incroyables avec facilité"
715
+ }
716
+ }
717
+ }
718
+ }
719
+ }
720
+ ```
721
+
722
+ ### Файлы контента для каждого локаля
723
+
724
+ Для словарей, специфичных для локали, укажите свойство `locale`:
725
+
726
+ ```typescript
727
+ // welcome-page.en.content.ts
728
+ export default {
729
+ key: "welcome-page",
730
+ locale: "en",
731
+ content: {
732
+ hero: {
733
+ title: "Добро пожаловать на нашу платформу",
734
+ subtitle: "Создавайте удивительные приложения с легкостью",
735
+ },
736
+ },
737
+ } satisfies Dictionary;
738
+ ```
739
+
740
+ ```typescript
741
+ // welcome-page.fr.content.ts
742
+ export default {
743
+ key: "welcome-page",
744
+ locale: "fr",
745
+ content: {
746
+ hero: {
747
+ title: "Bienvenue sur Notre Plateforme",
748
+ subtitle: "Construisez des applications incroyables avec facilité",
749
+ },
750
+ },
751
+ } satisfies Dictionary;
752
+ ```
753
+
754
+ ## Расширения файлов контента
755
+
756
+ Intlayer позволяет настраивать расширения для файлов деклараций контента. Эта настройка обеспечивает гибкость в управлении крупномасштабными проектами и помогает избежать конфликтов с другими модулями.
757
+
758
+ ### Расширения по умолчанию
759
+
760
+ По умолчанию Intlayer отслеживает все файлы с следующими расширениями для деклараций контента:
761
+
762
+ - `.content.json`
763
+ - `.content.ts`
764
+ - `.content.tsx`
765
+ - `.content.js`
766
+ - `.content.jsx`
767
+ - `.content.mjs`
768
+ - `.content.mjx`
769
+ - `.content.cjs`
770
+ - `.content.cjx`
771
+
772
+ Эти расширения по умолчанию подходят для большинства приложений. Однако, если у вас есть специфические требования, вы можете определить собственные расширения, чтобы оптимизировать процесс сборки и снизить риск конфликтов с другими компонентами.
773
+
774
+ > Чтобы настроить расширения файлов, которые Intlayer использует для определения файлов деклараций контента, вы можете указать их в конфигурационном файле Intlayer. Этот подход полезен для крупных проектов, где ограничение области наблюдения улучшает производительность сборки.
775
+
776
+ ## Расширенные концепции
777
+
778
+ ### Объединение словарей
779
+
780
+ Когда несколько словарей имеют одинаковый ключ, Intlayer автоматически объединяет их. Поведение при объединении зависит от нескольких факторов:
781
+
782
+ - **Приоритет**: словари с более высоким значением `priority` переопределяют словари с более низким значением
783
+ - **Автозаполнение против базового**: базовые словари имеют приоритет над автозаполненными словарями
784
+ - **Расположение**: локальные словари имеют приоритет над удалёнными словарями (при равенстве приоритетов)
785
+
786
+ ### Типобезопасность
787
+
788
+ Intlayer предоставляет полную поддержку TypeScript для файлов контента:
789
+
790
+ ```typescript
791
+ // Определите тип вашего контента
792
+ interface WelcomePageContent {
793
+ hero: {
794
+ title: string;
795
+ subtitle: string;
796
+ cta: string;
797
+ };
798
+ features: Array<{
799
+ title: string;
800
+ description: string;
801
+ }>;
802
+ }
803
+
804
+ // Используйте его в вашем словаре
805
+ export default {
806
+ key: "welcome-page",
807
+ content: {
808
+ // TypeScript обеспечит автозаполнение и проверку типов
809
+ hero: {
810
+ title: "Welcome",
811
+ subtitle: "Build amazing apps",
812
+ cta: "Get Started",
813
+ },
814
+ },
815
+ } satisfies Dictionary<WelcomePageContent>;
816
+ ```
817
+
818
+ ### Вложенность узлов
819
+
820
+ Вы можете без проблем вкладывать функции друг в друга.
821
+
822
+ Пример:
823
+
824
+ ```javascript fileName="src/example.content.tsx" contentDeclarationFormat="typescript"
825
+ import { t, enu, cond, nest, md, type Dictionary } from "intlayer";
826
+
827
+ const getName = async () => "John Doe";
828
+
829
+ export default {
830
+ key: "page",
831
+ content: {
832
+ // `getIntlayer('page','en').hiMessage` возвращает `['Hi', ' ', 'John Doe']`
833
+ hiMessage: [
834
+ t({
835
+ en: "Hi",
836
+ fr: "Salut",
837
+ es: "Hola",
838
+ }),
839
+ " ",
840
+ getName(),
841
+ ],
842
+ // Композитный контент, вкладывающий условие, перечисление и многоязычный контент
843
+ // `getIntlayer('page','en').advancedContent(true)(10)` возвращает 'Multiple items found'
844
+ advancedContent: cond({
845
+ true: enu({
846
+ "0": t({
847
+ en: "No items found",
848
+ fr: "Aucun article trouvé",
849
+ es: "No se encontraron artículos",
850
+ }),
851
+ "1": t({
852
+ en: "One item found",
853
+ fr: "Un article trouvé",
854
+ es: "Se encontró un artículo",
855
+ }),
856
+ ">1": t({
857
+ en: "Multiple items found",
858
+ fr: "Plusieurs articles trouvés",
859
+ es: "Se encontraron múltiples artículos",
860
+ }),
861
+ }),
862
+ false: t({
863
+ en: "No valid data available",
864
+ fr: "Aucune donnée valide disponible",
865
+ es: "No hay datos válidos disponibles",
866
+ }),
867
+ }),
868
+ },
869
+ } satisfies Dictionary;
870
+ ```
871
+
872
+ ```javascript fileName="src/example.content.mjx" contentDeclarationFormat="esm"
873
+ import { t, enu, cond, nest, md } from "intlayer";
874
+
875
+ const getName = async () => "John Doe"; // асинхронная функция для получения имени
876
+
877
+ /** @type {import('intlayer').Dictionary} */
878
+ export default {
879
+ key: "page",
880
+ content: {
881
+ // `getIntlayer('page','en').hiMessage` возвращает `['Hi', ' ', 'John Doe']`
882
+ hiMessage: [
883
+ t({
884
+ en: "Hi",
885
+ fr: "Salut",
886
+ es: "Hola",
887
+ }),
888
+ " ",
889
+ getName(),
890
+ ],
891
+ // Композитный контент, включающий условие, перечисление и многоязычный контент
892
+ // `getIntlayer('page','en').advancedContent(true)(10)` возвращает 'Multiple items found'
893
+ advancedContent: cond({
894
+ true: enu({
895
+ "0": t({
896
+ en: "No items found",
897
+ fr: "Aucun article trouvé",
898
+ es: "No se encontraron artículos",
899
+ }),
900
+ "1": t({
901
+ en: "One item found",
902
+ fr: "Un article trouvé",
903
+ es: "Se encontró un artículo",
904
+ }),
905
+ ">1": t({
906
+ en: "Multiple items found",
907
+ fr: "Plusieurs articles trouvés",
908
+ es: "Se encontraron múltiples artículos",
909
+ ru: "Найдено несколько элементов",
910
+ }),
911
+ }),
912
+ false: t({
913
+ en: "No valid data available",
914
+ fr: "Aucune donnée valide disponible",
915
+ es: "No hay datos válidos disponibles",
916
+ ru: "Нет доступных действительных данных",
917
+ }),
918
+ }),
919
+ },
920
+ };
921
+ ```
922
+
923
+ ```javascript fileName="src/example.content.cjx" contentDeclarationFormat="commonjs"
924
+ const { t, enu, cond, nest, md } = require("intlayer");
925
+
926
+ const getName = async () => "John Doe";
927
+
928
+ /** @type {import('intlayer').Dictionary} */
929
+ module.exports = {
930
+ key: "page",
931
+ content: {
932
+ // `getIntlayer('page','en').hiMessage` возвращает `['Hi', ' ', 'John Doe']`
933
+ hiMessage: [
934
+ t({
935
+ en: "Hi",
936
+ fr: "Salut",
937
+ ru: "Привет",
938
+ es: "Hola",
939
+ }),
940
+ " ",
941
+ getName(),
942
+ ],
943
+ // Композитный контент, включающий условие, перечисление и многоязычный контент
944
+ // `getIntlayer('page','en').advancedContent(true)(10)` возвращает 'Multiple items found'
945
+ advancedContent: cond({
946
+ true: enu({
947
+ "0": t({
948
+ en: "No items found",
949
+ fr: "Aucun article trouvé",
950
+ es: "No se encontraron artículos",
951
+ }),
952
+ "1": t({
953
+ en: "One item found",
954
+ fr: "Un article trouvé",
955
+ es: "Se encontró un artículo",
956
+ }),
957
+ ">1": t({
958
+ en: "Multiple items found",
959
+ fr: "Plusieurs articles trouvés",
960
+ es: "Se encontraron múltiples artículos",
961
+ }),
962
+ }),
963
+ false: t({
964
+ en: "No valid data available",
965
+ fr: "Aucune donnée valide disponible",
966
+ es: "No hay datos válidos disponibles",
967
+ }),
968
+ }),
969
+ },
970
+ };
971
+ ```
972
+
973
+ ```json5 fileName="src/example.content.json" contentDeclarationFormat="json"
974
+ {
975
+ "$schema": "https://intlayer.org/schema.json",
976
+ "key": "page",
977
+ "content": {
978
+ "hiMessage": {
979
+ "nodeType": "composite",
980
+ "composite": [
981
+ {
982
+ "nodeType": "translation",
983
+ "translation": {
984
+ en: "Привет", // Приветствие
985
+ fr: "Salut",
986
+ es: "Hola",
987
+ },
988
+ },
989
+ " ",
990
+ "John Doe",
991
+ ],
992
+ },
993
+ "advancedContent": {
994
+ "nodeType": "condition",
995
+ "condition": {
996
+ true: {
997
+ "nodeType": "enumeration",
998
+ "enumeration": {
999
+ "0": {
1000
+ "nodeType": "translation",
1001
+ "translation": {
1002
+ "en": "No items found",
1003
+ "fr": "Aucun article trouvé",
1004
+ "es": "No se encontraron artículos",
1005
+ "ru": "Элементы не найдены",
1006
+ },
1007
+ },
1008
+ "1": {
1009
+ "nodeType": "translation",
1010
+ "translation": {
1011
+ "en": "One item found",
1012
+ "fr": "Un article trouvé",
1013
+ "es": "Se encontró un artículo",
1014
+ "ru": "Найден один элемент",
1015
+ },
1016
+ },
1017
+ ">1": {
1018
+ "nodeType": "translation",
1019
+ "translation": {
1020
+ "en": "Multiple items found",
1021
+ "fr": "Plusieurs articles trouvés",
1022
+ "es": "Se encontraron múltiples artículos",
1023
+ "ru": "Найдено несколько элементов",
1024
+ },
1025
+ },
1026
+ },
1027
+ },
1028
+ "false": {
1029
+ "nodeType": "translation",
1030
+ "translation": {
1031
+ "en": "No valid data available",
1032
+ "fr": "Aucune donnée valide disponible",
1033
+ "es": "No hay datos válidos disponibles",
1034
+ },
1035
+ },
1036
+ },
1037
+ },
1038
+ },
1039
+ }
1040
+ ```
1041
+
1042
+ ### Лучшие практики
1043
+
1044
+ 1. **Соглашения об именах**:
1045
+ - Используйте kebab-case для ключей словаря (`"about-page-meta"`)
1046
+ - Группируйте связанный контент под одним префиксом ключа
1047
+
1048
+ 2. **Организация контента**:
1049
+ - Держите связанный контент вместе в одном словаре
1050
+ - Используйте вложенные объекты для организации сложных структур контента
1051
+ - Используйте теги для категоризации
1052
+ - Используйте `autoFill` для автоматического заполнения отсутствующих переводов
1053
+
1054
+ 3. **Производительность**:
1055
+ - Настройте конфигурацию контента, чтобы ограничить область отслеживаемых файлов
1056
+ - Используйте живые словари только тогда, когда необходимы обновления в реальном времени (например, A/B тестирование и т.д.)
1057
+ - Убедитесь, что плагин трансформации сборки (`@intlayer/swc` или `@intlayer/babel`) включен для оптимизации словаря во время сборки
1058
+
1059
+ ## История документации
1060
+
1061
+ | Версия | Дата | Изменения |
1062
+ | ------ | ---------- | ------------------------------- |
1063
+ | 6.0.0 | 2025-09-20 | Добавлена документация по полям |
1064
+ | 5.5.10 | 2025-06-29 | Инициализация истории |