@intlayer/docs 5.8.1 → 6.0.0-canary.1

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 +12 -12
  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;
62
+ };
63
+ };
64
+ multilingualContent: string;
65
+ quantityContent: string;
66
+ conditionalContent: string;
67
+ markdownContent: never;
68
+ externalContent: string;
69
+ insertionContent: string;
70
+ nestedContent: string;
71
+ fileContent: string;
72
+ jsxContent: ReactNode;
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}`, // 環境変数NODE_ENVの値
84
+ },
85
+ },
86
+ multilingualContent: t({
87
+ ja: "日本語のコンテンツ",
88
+ en: "English content",
89
+ "en-GB": "English content (UK)",
90
+ fr: "French content",
91
+ es: "Spanish content",
92
+ }),
93
+ quantityContent: enu({
94
+ "<-1": "マイナス1台未満の車",
95
+ "-1": "マイナス1台の車",
96
+ "0": "車はありません",
97
+ "1": "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("# マークダウンの例"),
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
+ ja: "日本語のコンテンツ",
140
+ en: "English content",
141
+ "en-GB": "English content (UK)",
142
+ fr: "French content",
143
+ es: "Spanish content",
144
+ }),
145
+ quantityContent: enu({
146
+ "<-1": "マイナス1台未満の車",
147
+ "-1": "マイナス1台の車",
148
+ "0": "車はありません",
149
+ "1": "1台の車",
150
+ ">5": "いくつかの車",
151
+ ">19": "多くの車",
152
+ }),
153
+ conditionalContent: cond({
154
+ true: "検証が有効です",
155
+ false: "検証が無効です",
156
+ }),
157
+ insertionContent: insert("こんにちは {{name}}!"),
158
+ nestedContent: nest(
159
+ "navbar", // ネストする辞書のキー
160
+ "login.button" // [オプション] ネストするコンテンツのパス
161
+ ),
162
+ markdownContent: md("# Markdownの例"),
163
+ fileContent: file("./path/to/file.txt"),
164
+ externalContent: fetch("https://example.com").then((res) => res.json())
165
+
166
+ // `react-intlayer` または `next-intlayer` を使用する場合のみ利用可能
167
+ jsxContent: <h1>My title</h1>,
168
+ },
169
+ };
170
+ ```
171
+
172
+ ```javascript fileName="src/example.content.cjx" contentDeclarationFormat="commonjs"
173
+ const { t, enu, cond, nest, md, insert, file } = require("intlayer");
174
+
175
+ /** @type {import('intlayer').Dictionary} */
176
+ module.exports = {
177
+ key: "page",
178
+ content: {
179
+ imbricatedContent: {
180
+ imbricatedContent2: {
181
+ stringContent: "Hello World",
182
+ numberContent: 123,
183
+ booleanContent: true,
184
+ javaScriptContent: `${process.env.NODE_ENV}`,
185
+ },
186
+ imbricatedArray: [1, 2, 3],
187
+ },
188
+ multilingualContent: t({
189
+ ja: "日本語のコンテンツ",
190
+ en: "English content",
191
+ "en-GB": "English content (UK)",
192
+ fr: "French content",
193
+ es: "Spanish content",
194
+ }),
195
+ quantityContent: enu({
196
+ "<-1": "マイナス1台未満の車",
197
+ "-1": "マイナス1台の車",
198
+ "0": "車はありません",
199
+ "1": "1台の車",
200
+ ">5": "いくつかの車",
201
+ ">19": "多くの車",
202
+ }),
203
+ conditionalContent: cond({
204
+ true: "検証が有効です",
205
+ false: "検証が無効です",
206
+ }),
207
+ insertionContent: insert("こんにちは {{name}}!"),
208
+ nestedContent: nest(
209
+ "navbar", // ネストする辞書のキー
210
+ "login.button" // [オプション] ネストするコンテンツのパス
211
+ ),
212
+ markdownContent: md("# マークダウンの例"),
213
+ fileContent: file("./path/to/file.txt"),
214
+ externalContent: fetch("https://example.com").then((res) => res.json())
215
+
216
+ // `react-intlayer` または `next-intlayer` を使用する場合のみ利用可能
217
+ jsxContent: <h1>My title</h1>,
218
+ },
219
+ };
220
+ ```
221
+
222
+ ```json5 fileName="src/example.content.json" contentDeclarationFormat="json"
223
+ {
224
+ "$schema": "https://intlayer.org/schema.json",
225
+ "key": "page",
226
+ "content": {
227
+ "imbricatedContent": {
228
+ "imbricatedContent2": {
229
+ "stringContent": "Hello World",
230
+ "numberContent": 123,
231
+ "booleanContent": true,
232
+ },
233
+ "imbricatedArray": [1, 2, 3],
234
+ },
235
+ "multilingualContent": {
236
+ "nodeType": "translation",
237
+ "translation": {
238
+ "en": "English content",
239
+ "en-GB": "English content (UK)",
240
+ "fr": "French content",
241
+ "es": "Spanish content",
242
+ },
243
+ },
244
+ "quantityContent": {
245
+ "nodeType": "enumeration",
246
+ "enumeration": {
247
+ "0": "車はありません",
248
+ "1": "車が1台",
249
+ "<-1": "マイナス1台未満の車",
250
+ "-1": "マイナス1台の車",
251
+ ">5": "いくつかの車",
252
+ ">19": "多くの車",
253
+ },
254
+ },
255
+ "conditionalContent": {
256
+ "nodeType": "condition",
257
+ "condition": {
258
+ "true": "検証が有効です",
259
+ "false": "検証が無効です",
260
+ },
261
+ },
262
+ "insertionContent": {
263
+ "nodeType": "insertion",
264
+ "insertion": "こんにちは {{name}}!",
265
+ },
266
+ "nestedContent": {
267
+ "nodeType": "nested",
268
+ "nested": { "dictionaryKey": "app" },
269
+ },
270
+ "markdownContent": {
271
+ "nodeType": "markdown",
272
+ "markdown": "# マークダウンの例",
273
+ },
274
+ "fileContent": {
275
+ "nodeType": "file",
276
+ "file": "./path/to/file.txt",
277
+ },
278
+ "jsxContent": {
279
+ "type": "h1",
280
+ "key": null,
281
+ "ref": null,
282
+ "props": {
283
+ "children": ["マイタイトル"],
284
+ },
285
+ },
286
+ },
287
+ }
288
+ ```
289
+
290
+ #### コンテンツノード
291
+
292
+ コンテンツノードは辞書コンテンツの構成要素です。以下のようなものがあります:
293
+
294
+ - **プリミティブ値**:文字列、数値、真偽値、null、undefined
295
+ - **型付きノード**:翻訳、条件、マークダウンなどの特殊なコンテンツタイプ
296
+ - **関数**:実行時に評価可能な動的コンテンツ [関数フェッチについてはこちら](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/function_fetching.md)
297
+ - **ネストされたコンテンツ**:他の辞書への参照
298
+
299
+ #### コンテンツタイプ
300
+
301
+ Intlayerは型付きノードを通じて様々なコンテンツタイプをサポートしています:
302
+
303
+ - **翻訳コンテンツ**: ロケール固有の値を持つ多言語テキスト [翻訳コンテンツを参照](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/translation_content.md)
304
+ - **条件コンテンツ**: ブール式に基づく条件付きコンテンツ [条件コンテンツを参照](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/condition_content.md)
305
+ - **列挙コンテンツ**: 列挙値に基づいて変化するコンテンツ [列挙コンテンツを参照](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/enumeration_content.md)
306
+ - **挿入コンテンツ**: 他のコンテンツに挿入可能なコンテンツ [挿入コンテンツを参照](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/insertion_content.md)
307
+ - **Markdown Content**: Markdown形式のリッチテキストコンテンツ [Markdown Contentを参照](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/markdown_content.md)
308
+ - **Nested Content**: 他の辞書への参照 [Nested Contentを参照](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/nested_content.md)
309
+ - **Gender Content**: 性別に応じて変わるコンテンツ [Gender Contentを参照](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/gender_content.md)
310
+ - **File Content**: 外部ファイルへの参照 [File Contentを参照](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/file_content.md)
311
+
312
+ ## 辞書の構造
313
+
314
+ Intlayerの辞書は`Dictionary`型で定義され、その動作を制御するいくつかのプロパティを含みます。
315
+
316
+ ### 必須プロパティ
317
+
318
+ #### `key` (string)
319
+
320
+ 辞書の識別子です。同じキーを持つ複数の辞書がある場合、Intlayerは自動的にそれらをマージします。
321
+
322
+ > ケバブケースの命名規則を使用してください(例: `"about-page-meta"`)。
323
+
324
+ #### Content (string | number | boolean | object | array | function)
325
+
326
+ `content`プロパティは実際の辞書データを含み、以下をサポートします:
327
+
328
+ - **プリミティブ値**:文字列、数値、ブール値、null、undefined
329
+ - **型付きノード**:Intlayerのヘルパー関数を使った特殊なコンテンツタイプ
330
+ - **ネストされたオブジェクト**:複雑なデータ構造
331
+ - **配列**:コンテンツのコレクション
332
+ - **関数**:動的なコンテンツ評価
333
+
334
+ ### 任意プロパティ
335
+
336
+ #### `title` (string)
337
+
338
+ 辞書を識別するための人間に読みやすいタイトルで、エディターやCMSシステムでの識別に役立ちます。特に大量の辞書を管理する場合やコンテンツ管理インターフェースで作業する際に有用です。
339
+
340
+ **例:**
341
+
342
+ ```typescript
343
+ {
344
+ key: "about-page-meta",
345
+ title: "About Page Metadata",
346
+ content: { /* ... */ }
347
+ }
348
+ ```
349
+
350
+ #### `description` (string)
351
+
352
+ 辞書の目的、使用ガイドライン、および特別な注意事項を説明する詳細な説明です。この説明はAIによる翻訳生成のコンテキストとしても使用され、翻訳の品質と一貫性を維持するために重要です。
353
+
354
+ **例:**
355
+
356
+ ```typescript
357
+ {
358
+ key: "about-page-meta",
359
+ description: [
360
+ "This dictionary manages the metadata of the About Page",
361
+ "SEOのベストプラクティスを考慮してください:",
362
+ "- タイトルは50〜60文字の間であるべきです",
363
+ "- 説明は150〜160文字の間であるべきです",
364
+ ].join('\n'),
365
+ content: { /* ... */ }
366
+ }
367
+ ```
368
+
369
+ #### `tags` (string[])
370
+
371
+ 辞書を分類および整理するための文字列配列です。タグは追加のコンテキストを提供し、エディターやCMSシステムでのフィルタリング、検索、整理に使用できます。
372
+
373
+ **例:**
374
+
375
+ ```typescript
376
+ {
377
+ key: "about-page-meta",
378
+ tags: ["metadata", "about-page", "seo"],
379
+ content: { /* ... */ }
380
+ }
381
+ ```
382
+
383
+ #### `locale` (LocalesValues)
384
+
385
+ 辞書をロケールごとの辞書に変換し、content内で宣言された各フィールドが自動的に翻訳ノードに変換されます。このプロパティが設定されている場合:
386
+
387
+ - 辞書は単一ロケールの辞書として扱われます
388
+ - 各フィールドは特定のロケールの翻訳ノードになります
389
+ - このプロパティを使用する場合、コンテンツ内で翻訳ノード(`t()`)を使用してはいけません
390
+ - 指定がない場合、辞書は多言語辞書として扱われます
391
+
392
+ > 詳細は [Intlayerにおけるロケール別コンテンツ宣言](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/per_locale_file.md) を参照してください。
393
+
394
+ **例:**
395
+
396
+ ```json
397
+ // ロケール別辞書
398
+ {
399
+ "key": "about-page",
400
+ "locale": "en",
401
+ "content": {
402
+ "title": "About Us", // これは 'en' の翻訳ノードになります
403
+ "description": "Learn more about our company"
404
+ }
405
+ }
406
+ ```
407
+
408
+ #### `autoFill` (AutoFill)
409
+
410
+ 外部ソースから辞書の内容を自動的に埋めるための指示です。これは `intlayer.config.ts` でグローバルに、または辞書ごとに設定できます。複数のフォーマットをサポートしています:
411
+
412
+ - **`true`**:すべてのロケールで自動埋めを有効にする
413
+ - **`string`**:単一ファイルへのパス、または変数を含むテンプレート
414
+ - **`object`**:ロケールごとのファイルパス
415
+
416
+ **例:**
417
+
418
+ ```json
419
+ // すべてのロケールで有効化
420
+ {
421
+ "autoFill": true
422
+ }
423
+ // 単一ファイル
424
+ {
425
+ "autoFill": "./translations/aboutPage.content.json"
426
+ }
427
+ // 変数を含むテンプレート
428
+ {
429
+ "autoFill": "/messages/{{locale}}/{{key}}/{{fileName}}.content.json"
430
+ }
431
+ // ロケールごとの詳細設定
432
+ {
433
+ "autoFill": {
434
+ "en": "./translations/en/aboutPage.content.json",
435
+ "fr": "./translations/fr/aboutPage.content.json",
436
+ "es": "./translations/es/aboutPage.content.json"
437
+ }
438
+ }
439
+ ```
440
+
441
+ **利用可能な変数:**
442
+
443
+ - `{{locale}}` – ロケールコード(例: `fr`, `es`)
444
+ - `{{fileName}}` – ファイル名(例: `example`)
445
+ - `{{key}}` – 辞書キー(例: `example`)
446
+
447
+ > 詳細は[Auto-Fill Configuration in Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/autoFill.md)を参照してください。
448
+
449
+ ##### `priority` (number)
450
+
451
+ 辞書の優先順位を示します。複数の辞書が同じキーを持つ場合、最も高い優先順位の辞書が他を上書きします。これはコンテンツの階層管理や上書きに役立ちます。
452
+
453
+ **例:**
454
+
455
+ ```typescript
456
+ // ベース辞書
457
+ {
458
+ key: "welcome-message",
459
+ priority: 1,
460
+ content: { message: "Welcome!" }
461
+ }
462
+
463
+ // 上書き辞書
464
+ {
465
+ key: "welcome-message",
466
+ priority: 10,
467
+ content: { message: "プレミアムサービスへようこそ!" }
468
+ }
469
+ // これはベースの辞書を上書きします
470
+ ```
471
+
472
+ ### CMSプロパティ
473
+
474
+ ##### `version` (string)
475
+
476
+ リモート辞書のバージョン識別子。どのバージョンの辞書が現在使用されているかを追跡するのに役立ちます。特にリモートコンテンツ管理システムを使用する場合に有用です。
477
+
478
+ ##### `live` (boolean)
479
+
480
+ リモート辞書の場合、辞書を実行時にライブで取得するかどうかを示します。有効にすると:
481
+
482
+ - `intlayer.config.ts`で`importMode`を"live"に設定する必要があります
483
+ - ライブサーバーが稼働している必要があります
484
+ - ライブ同期APIを使用して実行時に辞書が取得されます
485
+ - ライブで取得に失敗した場合は動的値にフォールバックします
486
+ - ライブでない場合は、最適なパフォーマンスのためにビルド時に辞書が変換されます
487
+
488
+ ### システムプロパティ(自動生成)
489
+
490
+ これらのプロパティはIntlayerによって自動的に生成され、手動での変更は推奨されません。
491
+
492
+ ##### `$schema` (string)
493
+
494
+ 辞書構造の検証に使用されるJSONスキーマ。辞書の整合性を保証するためにIntlayerによって自動的に追加されます。
495
+
496
+ ##### `id` (string)
497
+
498
+ リモート辞書の場合、リモートサーバー上の辞書の一意識別子です。リモートコンテンツの取得および管理に使用されます。
499
+
500
+ ##### `localId` (LocalDictionaryId)
501
+
502
+ ローカル辞書の一意識別子。辞書がローカルかリモートか、その場所を判別するためにIntlayerによって自動生成されます。
503
+
504
+ ##### `localIds` (LocalDictionaryId[])
505
+
506
+ マージされた辞書の場合、この配列にはマージされたすべての辞書のIDが含まれます。マージされたコンテンツの出所を追跡するのに役立ちます。
507
+
508
+ ##### `filePath` (string)
509
+
510
+ ローカル辞書のファイルパスで、どの `.content` ファイルから辞書が生成されたかを示します。デバッグやソースの追跡に役立ちます。
511
+
512
+ ##### `versions` (string[])
513
+
514
+ リモート辞書の場合、この配列には辞書の利用可能なすべてのバージョンが含まれます。どのバージョンが使用可能かを追跡するのに役立ちます。
515
+
516
+ ##### `autoFilled` (true)
517
+
518
+ 辞書が外部ソースから自動的に補完されたかどうかを示します。競合が発生した場合、ベース辞書が自動補完された辞書より優先されます。
519
+
520
+ ##### `location` ('distant' | 'locale')
521
+
522
+ 辞書の場所を示します:
523
+
524
+ - `'locale'`: ローカル辞書(コンテンツファイルから)
525
+ - `'distant'`: リモート辞書(外部ソースから)
526
+
527
+ ## コンテンツノードタイプ
528
+
529
+ Intlayerは、基本的なプリミティブ値を拡張するいくつかの専門的なコンテンツノードタイプを提供します。
530
+
531
+ ### 翻訳コンテンツ (`t`)
532
+
533
+ ロケールごとに異なる多言語コンテンツ:
534
+
535
+ ```typescript
536
+ import { t } from "intlayer";
537
+
538
+ // TypeScript/JavaScript
539
+ multilingualContent: t({
540
+ en: "Welcome to our website",
541
+ fr: "Bienvenue sur notre site web",
542
+ es: "Bienvenido a nuestro sitio web",
543
+ });
544
+ ```
545
+
546
+ ### 条件コンテンツ (`cond`)
547
+
548
+ ブール条件に基づいて変化するコンテンツ:
549
+
550
+ ```typescript
551
+ import { cond } from "intlayer";
552
+
553
+ conditionalContent: cond({
554
+ true: "User is logged in",
555
+ false: "Please log in to continue",
556
+ });
557
+ ```
558
+
559
+ ### 列挙コンテンツ (`enu`)
560
+
561
+ 列挙された値に基づいて変化するコンテンツ:
562
+
563
+ ```typescript
564
+ import { enu } from "intlayer";
565
+
566
+ statusContent: enu({
567
+ pending: "Your request is pending", // あなたのリクエストは保留中です
568
+ approved: "Your request has been approved", // あなたのリクエストは承認されました
569
+ rejected: "Your request has been rejected", // あなたのリクエストは拒否されました
570
+ });
571
+ ```
572
+
573
+ ### 挿入コンテンツ (`insert`)
574
+
575
+ 他のコンテンツに挿入できるコンテンツ:
576
+
577
+ ```typescript
578
+ import { insert } from "intlayer";
579
+
580
+ insertionContent: insert("This text can be inserted anywhere"); // このテキストはどこにでも挿入できます
581
+ ```
582
+
583
+ ### ネストコンテンツ (`nest`)
584
+
585
+ 他の辞書への参照:
586
+
587
+ ```typescript
588
+ import { nest } from "intlayer";
589
+
590
+ nestedContent: nest("about-page"); // "about-page" への参照
591
+ ```
592
+
593
+ ### マークダウンコンテンツ (`md`)
594
+
595
+ Markdown形式のリッチテキストコンテンツ:
596
+
597
+ ```typescript
598
+ import { md } from "intlayer";
599
+
600
+ markdownContent: md(
601
+ "# Welcome\n\nこれは**太字**のテキストで、[リンク](https://example.com)が含まれています"
602
+ );
603
+ ```
604
+
605
+ ### ジェンダーコンテンツ (`gender`)
606
+
607
+ ジェンダーに基づいて変化するコンテンツ:
608
+
609
+ ```typescript
610
+ import { gender } from "intlayer";
611
+
612
+ genderContent: gender({
613
+ male: "彼は開発者です",
614
+ female: "彼女は開発者です",
615
+ other: "彼らは開発者です",
616
+ });
617
+ ```
618
+
619
+ ### ファイルコンテンツ (`file`)
620
+
621
+ 外部ファイルへの参照:
622
+
623
+ ```typescript
624
+ import { file } from "intlayer";
625
+
626
+ fileContent: file("./path/to/content.txt");
627
+ ```
628
+
629
+ ## コンテンツファイルの作成
630
+
631
+ ### 基本的なコンテンツファイル構造
632
+
633
+ コンテンツファイルは `Dictionary` 型を満たすデフォルトオブジェクトをエクスポートします:
634
+
635
+ ```typescript
636
+ // example.content.ts
637
+ import { t, cond, nest, md, insert, file } from "intlayer";
638
+
639
+ export default {
640
+ key: "welcome-page",
641
+ title: "Welcome Page Content",
642
+ description:
643
+ "ヒーローセクションと機能を含むメインのウェルカムページのコンテンツ",
644
+ tags: ["ページ", "ウェルカム", "ホームページ"],
645
+ content: {
646
+ hero: {
647
+ title: t({
648
+ en: "Welcome to Our Platform",
649
+ fr: "Bienvenue sur Notre Plateforme",
650
+ es: "Bienvenido a Nuestra Plataforma",
651
+ }),
652
+ subtitle: t({
653
+ en: "Build amazing applications with ease",
654
+ fr: "Construisez des applications incroyables avec facilité",
655
+ es: "Construye aplicaciones increíbles con facilidad",
656
+ }),
657
+ cta: cond({
658
+ true: t({
659
+ en: "Get Started",
660
+ fr: "Commencer",
661
+ es: "Comenzar",
662
+ }),
663
+ false: t({
664
+ en: "Sign Up",
665
+ fr: "S'inscrire",
666
+ es: "Registrarse",
667
+ }),
668
+ }),
669
+ },
670
+ features: [
671
+ {
672
+ title: t({
673
+ ja: "使いやすい",
674
+ en: "Easy to Use",
675
+ fr: "Facile à Utiliser",
676
+ es: "Fácil de Usar",
677
+ }),
678
+ description: t({
679
+ ja: "すべてのスキルレベルに対応した直感的なインターフェース",
680
+ en: "Intuitive interface for all skill levels",
681
+ fr: "Interface intuitive pour tous les niveaux",
682
+ es: "Interfaz intuitiva para todos los niveles",
683
+ }),
684
+ },
685
+ ],
686
+ documentation: nest("documentation"),
687
+ readme: file("./README.md"),
688
+ },
689
+ } satisfies Dictionary;
690
+ ```
691
+
692
+ ### JSON コンテンツファイル
693
+
694
+ JSON形式でコンテンツファイルを作成することもできます:
695
+
696
+ ```json
697
+ {
698
+ "key": "welcome-page",
699
+ "title": "ウェルカムページのコンテンツ",
700
+ "description": "メインのウェルカムページのコンテンツ",
701
+ "tags": ["page", "welcome"],
702
+ "content": {
703
+ "hero": {
704
+ "title": {
705
+ "nodeType": "translation",
706
+ "translation": {
707
+ "en": "Welcome to Our Platform",
708
+ "fr": "Bienvenue sur Notre Plateforme"
709
+ }
710
+ },
711
+ "subtitle": {
712
+ "nodeType": "translation",
713
+ "translation": {
714
+ "en": "Build amazing applications with ease",
715
+ "fr": "Construisez des applications incroyables avec facilité"
716
+ }
717
+ }
718
+ }
719
+ }
720
+ }
721
+ ```
722
+
723
+ ### ロケール別コンテンツファイル
724
+
725
+ ロケール別の辞書を作成する場合は、`locale` プロパティを指定します:
726
+
727
+ ```typescript
728
+ // welcome-page.en.content.ts
729
+ export default {
730
+ key: "welcome-page",
731
+ locale: "en",
732
+ content: {
733
+ hero: {
734
+ title: "Welcome to Our Platform",
735
+ subtitle: "Build amazing applications with ease",
736
+ },
737
+ },
738
+ } satisfies Dictionary;
739
+ ```
740
+
741
+ ```typescript
742
+ // welcome-page.fr.content.ts
743
+ export default {
744
+ key: "welcome-page",
745
+ locale: "fr",
746
+ content: {
747
+ hero: {
748
+ title: "Bienvenue sur Notre Plateforme",
749
+ subtitle: "Construisez des applications incroyables avec facilité",
750
+ },
751
+ },
752
+ } satisfies Dictionary;
753
+ ```
754
+
755
+ ## コンテンツファイルの拡張子
756
+
757
+ Intlayerでは、コンテンツ宣言ファイルの拡張子をカスタマイズすることができます。このカスタマイズにより、大規模プロジェクトの管理が柔軟になり、他のモジュールとの競合を回避するのに役立ちます。
758
+
759
+ ### デフォルトの拡張子
760
+
761
+ デフォルトでは、Intlayerは以下の拡張子を持つすべてのファイルをコンテンツ宣言用に監視します:
762
+
763
+ - `.content.json`
764
+ - `.content.ts`
765
+ - `.content.tsx`
766
+ - `.content.js`
767
+ - `.content.jsx`
768
+ - `.content.mjs`
769
+ - `.content.mjx`
770
+ - `.content.cjs`
771
+ - `.content.cjx`
772
+
773
+ これらのデフォルト拡張子はほとんどのアプリケーションに適しています。しかし、特定のニーズがある場合は、カスタム拡張子を定義してビルドプロセスを効率化し、他のコンポーネントとの競合リスクを減らすことができます。
774
+
775
+ > Intlayerがコンテンツ宣言ファイルを識別するために使用するファイル拡張子をカスタマイズするには、Intlayerの設定ファイルで指定できます。この方法は、ウォッチプロセスの範囲を制限してビルドパフォーマンスを向上させる大規模プロジェクトに特に有効です。
776
+
777
+ ## 高度な概念
778
+
779
+ ### 辞書のマージ
780
+
781
+ 複数の辞書が同じキーを持つ場合、Intlayerは自動的にそれらをマージします。マージの挙動は以下のいくつかの要因に依存します:
782
+
783
+ - **優先度**: `priority` の値が高い辞書が低い辞書を上書きする
784
+ - **自動入力 vs ベース**: ベース辞書は自動入力された辞書を上書きします
785
+ - **場所**: ローカル辞書はリモート辞書を上書きします(優先度が同じ場合)
786
+
787
+ ### 型安全性
788
+
789
+ Intlayerはコンテンツファイルに対して完全なTypeScriptサポートを提供します:
790
+
791
+ ```typescript
792
+ // コンテンツの型を定義
793
+ interface WelcomePageContent {
794
+ hero: {
795
+ title: string;
796
+ subtitle: string;
797
+ cta: string;
798
+ };
799
+ features: Array<{
800
+ title: string;
801
+ description: string;
802
+ }>;
803
+ }
804
+
805
+ // 辞書で使用する
806
+ export default {
807
+ key: "welcome-page",
808
+ content: {
809
+ // TypeScriptがオートコンプリートと型チェックを提供します
810
+ hero: {
811
+ title: "Welcome",
812
+ subtitle: "Build amazing apps",
813
+ cta: "Get Started",
814
+ },
815
+ },
816
+ } satisfies Dictionary<WelcomePageContent>;
817
+ ```
818
+
819
+ ### ノードの入れ子構造
820
+
821
+ 問題なく関数を他の関数に入れ子にすることができます。
822
+
823
+ 例:
824
+
825
+ ```javascript fileName="src/example.content.tsx" contentDeclarationFormat="typescript"
826
+ import { t, enu, cond, nest, md, type Dictionary } from "intlayer";
827
+
828
+ const getName = async () => "John Doe";
829
+
830
+ export default {
831
+ key: "page",
832
+ content: {
833
+ // `getIntlayer('page','en').hiMessage` は `['Hi', ' ', 'John Doe']` を返します
834
+ hiMessage: [
835
+ t({
836
+ en: "Hi",
837
+ fr: "Salut",
838
+ es: "Hola",
839
+ }),
840
+ " ",
841
+ getName(),
842
+ ],
843
+ // 条件、列挙、多言語コンテンツを組み合わせた複合コンテンツ
844
+ // `getIntlayer('page','en').advancedContent(true)(10)` は 'Multiple items found' を返します
845
+ advancedContent: cond({
846
+ true: enu({
847
+ "0": t({
848
+ en: "No items found",
849
+ fr: "Aucun article trouvé",
850
+ es: "No se encontraron artículos",
851
+ }),
852
+ "1": t({
853
+ en: "One item found",
854
+ fr: "Un article trouvé",
855
+ es: "Se encontró un artículo",
856
+ }),
857
+ ">1": t({
858
+ en: "Multiple items found",
859
+ fr: "Plusieurs articles trouvés",
860
+ es: "Se encontraron múltiples artículos",
861
+ }),
862
+ }),
863
+ false: t({
864
+ en: "No valid data available",
865
+ fr: "Aucune donnée valide disponible",
866
+ es: "No hay datos válidos disponibles",
867
+ }),
868
+ }),
869
+ },
870
+ } satisfies Dictionary;
871
+ ```
872
+
873
+ ```javascript fileName="src/example.content.mjx" contentDeclarationFormat="esm"
874
+ import { t, enu, cond, nest, md } from "intlayer";
875
+
876
+ const getName = async () => "John Doe";
877
+
878
+ /** @type {import('intlayer').Dictionary} */
879
+ export default {
880
+ key: "page",
881
+ content: {
882
+ // `getIntlayer('page','en').hiMessage` は `['Hi', ' ', 'John Doe']` を返します
883
+ hiMessage: [
884
+ t({
885
+ en: "Hi",
886
+ fr: "Salut",
887
+ es: "Hola",
888
+ }),
889
+ " ",
890
+ getName(),
891
+ ],
892
+ // 条件、列挙、多言語コンテンツを組み合わせた複合コンテンツ
893
+ // `getIntlayer('page','en').advancedContent(true)(10)` は 'Multiple items found' を返します
894
+ advancedContent: cond({
895
+ true: enu({
896
+ "0": t({
897
+ en: "No items found",
898
+ fr: "Aucun article trouvé",
899
+ es: "No se encontraron artículos",
900
+ }),
901
+ "1": t({
902
+ en: "One item found",
903
+ fr: "Un article trouvé",
904
+ es: "Se encontró un artículo",
905
+ }),
906
+ ">1": t({
907
+ en: "Multiple items found",
908
+ fr: "Plusieurs articles trouvés",
909
+ es: "Se encontraron múltiples artículos",
910
+ ja: "複数のアイテムが見つかりました",
911
+ }),
912
+ }),
913
+ false: t({
914
+ en: "No valid data available",
915
+ fr: "Aucune donnée valide disponible",
916
+ es: "No hay datos válidos disponibles",
917
+ ja: "有効なデータがありません",
918
+ }),
919
+ }),
920
+ },
921
+ };
922
+ ```
923
+
924
+ ```javascript fileName="src/example.content.cjx" contentDeclarationFormat="commonjs"
925
+ const { t, enu, cond, nest, md } = require("intlayer");
926
+
927
+ const getName = async () => "John Doe";
928
+
929
+ /** @type {import('intlayer').Dictionary} */
930
+ module.exports = {
931
+ key: "page",
932
+ content: {
933
+ // `getIntlayer('page','en').hiMessage` は `['Hi', ' ', 'John Doe']` を返します
934
+ hiMessage: [
935
+ t({
936
+ en: "Hi",
937
+ fr: "Salut",
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: "Hi", // 挨拶の翻訳
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
+ "ja": "アイテムが見つかりませんでした",
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
+ "ja": "1つのアイテムが見つかりました",
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
+ "ja": "複数のアイテムが見つかりました",
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
+ - 辞書のキーにはケバブケース(`"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 | 履歴を初期化 |