@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
@@ -1,457 +1,621 @@
1
1
  ---
2
- createdAt: 2025-08-11
3
- updatedAt: 2025-08-11
4
- title: TanStack Start(React)でのIntlayerの使い始め
5
- description: Intlayerを使ってTanStack Startアプリにi18nを追加する-コンポーネントレベルの辞書、ローカライズされたURL、SEOに適したメタデータ。
2
+ createdAt: 2025-09-09
3
+ updatedAt: 2025-09-09
4
+ title: Tanstack StartでのIntlayerによる国際化(i18n)入門
5
+ description: Intlayerを使用してTanstack Startアプリケーションに国際化(i18n)を追加する方法を学びます。ロケール対応ルーティングで多言語対応アプリを作成するための包括的なガイドです。
6
6
  keywords:
7
7
  - 国際化
8
8
  - ドキュメント
9
9
  - Intlayer
10
- - TanStack Start
11
- - TanStack Router
10
+ - Tanstack Start
12
11
  - React
13
12
  - i18n
14
- - JavaScript
13
+ - TypeScript
14
+ - ロケールルーティング
15
15
  slugs:
16
16
  - doc
17
17
  - environment
18
+ - vite-and-react
18
19
  - tanstack-start
20
+ applicationTemplate: https://github.com/AydinTheFirst/tanstack-start-intlayer
21
+ author: AydinTheFirst
19
22
  ---
20
23
 
21
- # IntlayerとTanStack Start(React)で始める国際化(i18n
24
+ # IntlayerとTanstack Startによる国際化(i18n)入門
25
+
26
+ このガイドでは、Tanstack Startプロジェクトにおいて、ロケール対応ルーティング、TypeScriptサポート、最新の開発手法を活用しながら、**Intlayer**を統合してシームレスな国際化を実現する方法を示します。
22
27
 
23
28
  ## Intlayerとは?
24
29
 
25
- **Intlayer**はReactアプリ向けのオープンソースのi18nツールキットです。以下を提供します:
30
+ **Intlayer**は、最新のウェブアプリケーションにおける多言語対応を簡素化するために設計された革新的なオープンソースの国際化(i18n)ライブラリです。
26
31
 
27
- - **TypeScriptの安全性を備えたコンポーネントローカル辞書**。
28
- - **動的なメタデータとルート**(SEO対応)。
29
- - **ランタイムでのロケール切り替え**(ロケール検出・保持のためのヘルパー付き)。
30
- - **Viteプラグイン**(ビルド時の変換と開発者体験向上のため)。
32
+ Intlayerを使うことで、以下が可能になります:
31
33
 
32
- このガイドでは、**TanStack Start**プロジェクト(内部でViteを使用し、ルーティング/SSRにTanStack Routerを使っている)にIntlayerを組み込む方法を説明します。
34
+ - **コンポーネントレベルで宣言的な辞書を使い、翻訳を簡単に管理**できます。
35
+ - **メタデータ、ルート、コンテンツを動的にローカライズ**できます。
36
+ - **自動生成される型によりTypeScriptサポートを確保し、オートコンプリートやエラー検出を向上**させます。
37
+ - **動的なロケール検出や切り替えなどの高度な機能**を活用できます。
38
+ - **Tanstack Startのファイルベースのルーティングシステムを使ってロケール対応ルーティングを有効化**します。
33
39
 
34
40
  ---
35
41
 
36
- ## ステップ1:依存関係のインストール
42
+ ## Tanstack StartアプリケーションでIntlayerをセットアップするステップバイステップガイド
37
43
 
38
- ```bash
39
- # npm
40
- npm i intlayer react-intlayer
41
- npm i -D vite-intlayer
44
+ ### ステップ1:プロジェクトの作成
42
45
 
43
- # pnpm
44
- pnpm add intlayer react-intlayer
45
- pnpm add -D vite-intlayer
46
+ TanStack Startの公式サイトにある[新しいプロジェクトの開始](https://tanstack.com/start/latest/docs/framework/react/quick-start)ガイドに従って、新しいTanStack Startプロジェクトを作成します。
47
+
48
+ ### ステップ2:Intlayerパッケージのインストール
46
49
 
47
- # yarn
48
- yarn add intlayer react-intlayer
49
- yarn add -D vite-intlayer
50
+ お好みのパッケージマネージャーを使って必要なパッケージをインストールします:
51
+
52
+ ```bash packageManager="npm"
53
+ npm install intlayer react-intlayer
54
+ npm install vite-intlayer --save-dev
50
55
  ```
51
56
 
52
- - **intlayer**:コア(設定、辞書、CLI/変換)。
53
- - **react-intlayer**:React用の`<IntlayerProvider>`とフック。
54
- - **vite-intlayer**:Viteプラグイン、加えてロケール検出/リダイレクト用のオプションミドルウェア(開発環境とSSR/プレビューで動作。プロダクションSSRでは`dependencies`に移動)。
57
+ ```bash packageManager="pnpm"
58
+ pnpm add intlayer react-intlayer
59
+ pnpm add vite-intlayer --save-dev
60
+ ```
55
61
 
56
- ---
62
+ - **intlayer**
63
+
64
+ コアパッケージであり、設定管理、翻訳、[コンテンツ宣言](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/get_started.md)、トランスパイル、および[CLIコマンド](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/intlayer_cli.md)のための国際化ツールを提供します。
65
+
66
+ - **react-intlayer**
67
+ IntlayerをReactアプリケーションと統合するパッケージです。Reactの国際化のためのコンテキストプロバイダーやフックを提供します。
57
68
 
58
- ## ステップ2:Intlayerの設定
69
+ - **vite-intlayer**
70
+ Intlayerを[Viteバンドラー](https://vite.dev/guide/why.html#why-bundle-for-production)と統合するためのViteプラグインを含み、ユーザーの優先ロケール検出、クッキー管理、URLリダイレクト処理のためのミドルウェアも提供します。
59
71
 
60
- プロジェクトのルートに `intlayer.config.ts` を作成します:
72
+ ### ステップ3: プロジェクトの設定
61
73
 
62
- ```ts fileName="intlayer.config.ts"
63
- import { Locales, type IntlayerConfig } from "intlayer";
74
+ アプリケーションの言語を設定するための設定ファイルを作成します:
75
+
76
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
77
+ import type { IntlayerConfig } from "intlayer";
78
+
79
+ import { Locales } from "intlayer";
64
80
 
65
81
  const config: IntlayerConfig = {
66
82
  internationalization: {
67
- locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
68
- defaultLocale: Locales.ENGLISH,
83
+ defaultLocale: Locales.ENGLISH, // デフォルトのロケール
84
+ locales: [
85
+ Locales.ENGLISH, // 英語
86
+ Locales.FRENCH, // フランス語
87
+ Locales.SPANISH, // スペイン語
88
+ // 他のロケールを追加
89
+ ],
69
90
  },
70
- // contentDir、contentFileExtensions、middlewareオプションなども調整可能です。
71
91
  };
72
92
 
73
93
  export default config;
74
94
  ```
75
95
 
76
- CommonJS/ESMのバリアントは、`cjs`/`mjs`を好む場合でも元のドキュメントと同じです。
96
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
97
+ import { Locales } from "intlayer";
98
+
99
+ /** @type {import('intlayer').IntlayerConfig} */
100
+ const config = {
101
+ internationalization: {
102
+ defaultLocale: Locales.ENGLISH, // デフォルトのロケール
103
+ locales: [
104
+ Locales.ENGLISH, // 英語
105
+ Locales.FRENCH, // フランス語
106
+ Locales.SPANISH, // スペイン語
107
+ // 他のロケール
108
+ ],
109
+ },
110
+ };
77
111
 
78
- > 完全な設定リファレンスは、Intlayerの設定ドキュメントをご覧ください。
112
+ export default config;
113
+ ```
79
114
 
80
- ---
115
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
116
+ const { Locales } = require("intlayer");
81
117
 
82
- ## ステップ3:Viteプラグイン(およびオプションのミドルウェア)を追加
118
+ /** @type {import('intlayer').IntlayerConfig} */
119
+ const config = {
120
+ internationalization: {
121
+ defaultLocale: Locales.ENGLISH,
122
+ locales: [
123
+ Locales.ENGLISH,
124
+ Locales.FRENCH,
125
+ Locales.SPANISH,
126
+ // 他のロケール
127
+ ],
128
+ },
129
+ };
130
+
131
+ module.exports = config;
132
+ ```
83
133
 
84
- **TanStack StartはViteを使用しているため**、`vite.config.ts` にIntlayerのプラグインを追加します:
134
+ > この設定ファイルを通じて、ローカライズされたURL、ミドルウェアのリダイレクション、クッキー名、コンテンツ宣言の場所と拡張子、コンソールでのIntlayerログの無効化などを設定できます。利用可能なパラメータの完全なリストについては、[設定ドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/configuration.md)を参照してください。
85
135
 
86
- ```ts fileName="vite.config.ts"
136
+ ### ステップ4: Vite設定にIntlayerを統合する
137
+
138
+ 設定にintlayerプラグインを追加します:
139
+
140
+ ```typescript fileName="vite.config.ts" codeFormat="typescript"
141
+ import { reactRouter } from "@react-router/dev/vite";
87
142
  import { defineConfig } from "vite";
88
- import react from "@vitejs/plugin-react-swc";
89
- import { intlayerPlugin, intLayerMiddlewarePlugin } from "vite-intlayer";
143
+ import { intlayerMiddlewarePlugin, intlayerPlugin } from "vite-intlayer";
144
+ import tsconfigPaths from "vite-tsconfig-paths";
90
145
 
91
146
  export default defineConfig({
92
147
  plugins: [
93
- react(),
148
+ reactRouter(),
149
+ tsconfigPaths(),
94
150
  intlayerPlugin(),
95
- // ロケール検出、クッキー、リダイレクトのためにオプションだが推奨:
96
- intLayerMiddlewarePlugin(),
151
+ intlayerMiddlewarePlugin(),
97
152
  ],
98
153
  });
99
154
  ```
100
155
 
101
- > SSRをデプロイする場合は、`vite-intlayer`を`dependencies`に移動して、ミドルウェアが本番環境で動作するようにしてください。
156
+ > `intlayerPlugin()` Viteプラグインは、IntlayerをViteに統合するために使用されます。これにより、コンテンツ宣言ファイルのビルドが保証され、開発モードでの監視が行われます。また、Viteアプリケーション内でIntlayerの環境変数を定義します。さらに、パフォーマンス最適化のためのエイリアスも提供します。
102
157
 
103
- ---
158
+ ### ステップ5: レイアウトコンポーネントの作成
159
+
160
+ ルートレイアウトとロケール固有のレイアウトを設定します。
161
+
162
+ #### ルートレイアウト
104
163
 
105
- ## ステップ4:コンテンツを宣言する
164
+ ```tsx fileName="src/routes/{-$locale}/route.tsx" codeFormat="typescript"
165
+ // src/routes/{-$locale}/route.tsx
166
+ import { createFileRoute, Navigate, Outlet } from "@tanstack/react-router";
167
+ import { configuration } from "intlayer";
168
+ import { IntlayerProvider, useLocale } from "react-intlayer";
169
+
170
+ import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes";
171
+
172
+ export const Route = createFileRoute("/{-$locale}")({
173
+ component: LayoutComponent,
174
+ });
175
+
176
+ function LayoutComponent() {
177
+ const { locale } = Route.useParams();
178
+
179
+ return (
180
+ <IntlayerProvider locale={locale}>
181
+ <Outlet />
182
+ </IntlayerProvider>
183
+ );
184
+ }
185
+ ```
106
186
 
107
- 辞書ファイルは`./src`以下の任意の場所に配置します(デフォルトは`contentDir`)。例:
187
+ ### ステップ6: コンテンツを宣言する
108
188
 
109
- ```tsx fileName="src/app.content.tsx"
110
- import { t, type Dictionary } from "intlayer";
111
- import type { ReactNode } from "react";
189
+ 翻訳を保存するためのコンテンツ宣言を作成および管理します:
190
+
191
+ ```tsx fileName="src/contents/page.content.ts" contentDeclarationFormat="typescript"
192
+ import type { Dictionary } from "intlayer";
193
+
194
+ import { t } from "intlayer";
112
195
 
113
196
  const appContent = {
114
- key: "app",
115
197
  content: {
116
- viteLogo: t({
117
- ja: "Vite ロゴ",
118
- en: "Vite logo",
119
- fr: "Logo Vite",
120
- es: "Logo Vite",
121
- }),
122
- reactLogo: t({
123
- ja: "React ロゴ",
124
- en: "React logo",
125
- fr: "Logo React",
126
- es: "Logo React",
127
- }),
198
+ links: {
199
+ about: t({
200
+ en: "About",
201
+ es: "Acerca de",
202
+ fr: "À propos",
203
+ }),
204
+ home: t({
205
+ en: "ホーム",
206
+ es: "Inicio",
207
+ fr: "Accueil",
208
+ }),
209
+ },
210
+ meta: {
211
+ description: t({
212
+ en: "これは Intlayer と TanStack Router を使用した例です",
213
+ es: "Este es un ejemplo de uso de Intlayer con TanStack Router",
214
+ fr: "Ceci est un exemple d'utilisation d'Intlayer avec TanStack Router",
215
+ }),
216
+ },
128
217
  title: t({
129
- ja: "TanStack Start + React",
130
- en: "TanStack Start + React",
131
- fr: "TanStack Start + React",
132
- es: "TanStack Start + React",
133
- }),
134
- count: t({
135
- ja: "カウントは ",
136
- en: "count is ",
137
- fr: "le compte est ",
138
- es: "el recuento es ",
139
- }),
140
- edit: t<ReactNode>({
141
- ja: (
142
- <>
143
- <code>src/routes/index.tsx</code> を編集して保存し、HMRをテストします
144
- </>
145
- ),
146
- en: (
147
- <>
148
- Edit <code>src/routes/index.tsx</code> and save to test HMR
149
- </>
150
- ),
151
- fr: (
152
- <>
153
- Éditez <code>src/routes/index.tsx</code> et enregistrez pour tester
154
- HMR
155
- </>
156
- ),
157
- es: (
158
- <>
159
- Edita <code>src/routes/index.tsx</code> y guarda para probar HMR
160
- </>
161
- ),
162
- }),
163
- readTheDocs: t({
164
- en: "Click the logos to learn more",
165
- fr: "Cliquez sur les logos pour en savoir plus",
166
- es: "Haz clic en los logotipos para saber más",
167
- ja: "ロゴをクリックして詳細を学ぶ",
218
+ en: "Intlayer + TanStack Router へようこそ",
219
+ es: "Bienvenido a Intlayer + TanStack Router",
220
+ fr: "Bienvenue à Intlayer + TanStack Router",
168
221
  }),
169
222
  },
223
+ key: "app",
170
224
  } satisfies Dictionary;
171
225
 
172
226
  export default appContent;
173
227
  ```
174
228
 
175
- JSON/ESM/CJS バリアントは、元のドキュメントと同様に動作します。
229
+ > コンテンツ宣言は、アプリケーション内のどこにでも定義できますが、`contentDir` ディレクトリ(デフォルトは `./app`)に含まれている必要があります。また、コンテンツ宣言ファイルの拡張子(デフォルトは `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`)に一致している必要があります。
176
230
 
177
- > TSX コンテンツですか?セットアップで必要な場合は `import React from "react"` を忘れないでください。
231
+ > 詳細については、[コンテンツ宣言のドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/get_started.md)を参照してください。
178
232
 
179
- ---
233
+ ### ステップ7: ロケール対応コンポーネントとフックを作成する
180
234
 
181
- ## ステップ 5: TanStack Start を Intlayer でラップする
235
+ ロケール対応のナビゲーション用に `LocalizedLink` コンポーネントを作成します:
182
236
 
183
- TanStack Start では、**ルートルート** がプロバイダーを設定する適切な場所です。
237
+ ```tsx fileName="src/components/localized-link.tsx" codeFormat="typescript"
238
+ // src/components/localized-link.tsx
239
+ // eslint-disable-next-line no-restricted-imports
240
+ import { Link, type LinkProps } from "@tanstack/react-router";
241
+ import { getLocalizedUrl } from "intlayer";
242
+ import { useLocale } from "react-intlayer";
184
243
 
185
- ```tsx fileName="src/routes/__root.tsx"
186
- import {
187
- Outlet,
188
- createRootRoute,
189
- Link as RouterLink,
190
- } from "@tanstack/react-router";
191
- import { IntlayerProvider, useIntlayer } from "react-intlayer";
192
-
193
- function AppShell() {
194
- // トップレベルで辞書を使用する例:
195
- const content = useIntlayer("app");
244
+ type LocalizedLinkProps = {
245
+ to: string;
246
+ } & Omit<LinkProps, "to">;
196
247
 
197
- return (
198
- <div>
199
- <nav className="flex gap-3 p-3">
200
- <RouterLink to="/">ホーム</RouterLink>
201
- <RouterLink to="/about">アバウト</RouterLink>
202
- </nav>
203
- <main className="p-6">
204
- <h1>{content.title}</h1>
205
- <Outlet />
206
- </main>
207
- </div>
208
- );
209
- }
248
+ export function LocalizedLink(props: LocalizedLinkProps) {
249
+ const { locale } = useLocale();
210
250
 
211
- export const Route = createRootRoute({
212
- component: () => (
213
- <IntlayerProvider>
214
- <AppShell />
215
- </IntlayerProvider>
216
- ),
217
- });
218
- ```
251
+ const isExternal = (to: string) => {
252
+ return /^(https?:)?\/\//.test(to);
253
+ };
219
254
 
220
- 次に、ページでコンテンツを使用します:
255
+ const to = isExternal(props.to)
256
+ ? props.to
257
+ : getLocalizedUrl(props.to, locale);
221
258
 
222
- ```tsx fileName="src/routes/index.tsx"
223
- import { createFileRoute } from "@tanstack/react-router";
224
- import { useIntlayer } from "react-intlayer";
225
- import reactLogo from "../assets/react.svg";
226
-
227
- export const Route = createFileRoute("/")({
228
- component: () => {
229
- const content = useIntlayer("app");
230
- return (
231
- <>
232
- <button>{content.count}0</button>
233
- <p>{content.edit}</p>
234
- <img
235
- src={reactLogo}
236
- alt={content.reactLogo.value}
237
- width={48}
238
- height={48}
239
- />
240
- <p className="opacity-70">{content.readTheDocs}</p>
241
- </>
242
- );
243
- },
244
- });
259
+ return <Link {...props} to={to as LinkProps["to"]} />;
260
+ }
245
261
  ```
246
262
 
247
- > 文字列属性(`alt`、`title`、`aria-label`など)には `.value` が必要です:
248
- >
249
- > ```jsx
250
- > <img alt={c.reactLogo.value} />
251
- > ```
263
+ プログラム的なナビゲーションのために `useLocalizedNavigate` フックを作成します:
252
264
 
253
- ---
265
+ ```tsx fileName="src/hooks/useLocalizedNavigate.tsx" codeFormat="typescript"
266
+ // src/hooks/useLocalizedNavigate.tsx
267
+ // eslint-disable-next-line no-restricted-imports
268
+ import { NavigateOptions, useNavigate } from "@tanstack/react-router";
269
+ import { getLocalizedUrl } from "intlayer";
270
+ import { useLocale } from "react-intlayer";
254
271
 
255
- ## (オプション)ステップ6:ロケール切り替え(クライアント)
272
+ type LocalizedNavigateOptions = {
273
+ to: string;
274
+ } & Omit<NavigateOptions, "to">;
256
275
 
257
- ```tsx fileName="src/components/LocaleSwitcher.tsx"
258
- import { Locales } from "intlayer";
259
- import { useLocale } from "react-intlayer";
276
+ export const useLocalizedNavigate = () => {
277
+ const navigate = useNavigate();
278
+ const { locale } = useLocale();
260
279
 
261
- export function LocaleSwitcher() {
262
- const { setLocale } = useLocale();
263
- return (
264
- <div className="flex gap-2">
265
- <button onClick={() => setLocale(Locales.ENGLISH)}>English</button>
266
- <button onClick={() => setLocale(Locales.FRENCH)}>Français</button>
267
- <button onClick={() => setLocale(Locales.SPANISH)}>Español</button>
268
- </div>
269
- );
270
- }
280
+ const isExternal = (to: string) => {
281
+ return /^(https?:)?\/\//.test(to);
282
+ };
283
+
284
+ const localizedNavigate = (options: LocalizedNavigateOptions) => {
285
+ const to = isExternal(options.to)
286
+ ? options.to
287
+ : getLocalizedUrl(options.to, locale);
288
+
289
+ navigate({ ...options, to: to as NavigateOptions["to"] });
290
+ };
291
+
292
+ return localizedNavigate;
293
+ };
271
294
  ```
272
295
 
273
- ---
296
+ ### ステップ8: ページでIntlayerを活用する
274
297
 
275
- ## (オプション)ステップ7:ローカライズされたルーティング(SEOに優しいURL)
298
+ アプリケーション全体でコンテンツ辞書にアクセスします:
276
299
 
277
- TanStack Startには**2つの優れたパターン**があります。どちらかを選んでください。
300
+ #### ルートリダイレクトページ
278
301
 
279
- 動的セグメントフォルダ `src/routes/$locale/` を作成し、URLを `/:locale/...` にします。`$locale` レイアウト内で `params.locale` を検証し、`<IntlayerProvider locale=...>` を設定し、`<Outlet />` をレンダリングします。この方法はシンプルですが、残りのルートは `$locale` の下にマウントされ、デフォルトのロケールにプレフィックスを付けたくない場合は、プレフィックスなしの別のツリーが必要になります。
302
+ ```tsx fileName="src/routes/page.tsx" codeFormat="typescript"
303
+ // src/routes/page.tsx
304
+ import { useLocale } from "react-intlayer";
305
+ import { Navigate } from "react-router";
280
306
 
281
- ---
307
+ export default function Page() {
308
+ const { locale } = useLocale();
282
309
 
283
- ## (オプション)ステップ8:ロケール切り替え時にURLを更新する
310
+ return <Navigate replace to={locale} />;
311
+ }
312
+ ```
284
313
 
285
- パターンA(ベースパス)では、ロケールを切り替えると**異なるベースパスへナビゲートする**ことを意味します:
314
+ #### ローカライズされたホームページ
286
315
 
287
- ```tsx fileName="src/components/LocaleSwitcherNavigate.tsx"
288
- import { useRouter } from "@tanstack/react-router";
289
- import { Locales, getLocalizedUrl } from "intlayer";
290
- import { useLocale } from "react-intlayer";
316
+ ```tsx fileName="src/routes/{-$locale}/index.tsx" codeFormat="typescript"
317
+ import { createFileRoute } from "@tanstack/react-router";
318
+ import { getIntlayer } from "intlayer";
319
+ import { useIntlayer } from "react-intlayer";
291
320
 
292
- export function LocaleSwitcherNavigate() {
293
- const router = useRouter();
294
- const { locale, setLocale } = useLocale();
295
-
296
- const change = async (next: Locales) => {
297
- if (next === locale) return;
298
- const nextPath = getLocalizedUrl(
299
- window.location.pathname + window.location.search,
300
- next
301
- );
302
- await router.navigate({ to: nextPath }); // 履歴を保持
303
- setLocale(next);
304
- };
321
+ import LocaleSwitcher from "@/components/locale-switcher";
322
+ import { LocalizedLink } from "@/components/localized-link";
323
+ import { useLocalizedNavigate } from "@/hooks/useLocalizedNavigate";
324
+
325
+ export const Route = createFileRoute("/{-$locale}/")({
326
+ component: RouteComponent,
327
+ head: ({ params }) => {
328
+ const { locale } = params;
329
+ const metaContent = getIntlayer("app", locale);
330
+
331
+ return {
332
+ meta: [
333
+ { title: metaContent.title },
334
+ { content: metaContent.meta.description, name: "description" },
335
+ ],
336
+ };
337
+ },
338
+ });
339
+
340
+ function RouteComponent() {
341
+ const content = useIntlayer("app");
342
+ const navigate = useLocalizedNavigate();
305
343
 
306
344
  return (
307
- <div className="flex gap-2">
308
- <button onClick={() => change(Locales.ENGLISH)}>English</button>
309
- <button onClick={() => change(Locales.FRENCH)}>Français</button>
310
- <button onClick={() => change(Locales.SPANISH)}>Español</button>
345
+ <div className="grid place-items-center h-screen">
346
+ <div className="flex flex-col gap-4 items-center text-center">
347
+ {content.title}
348
+ <LocaleSwitcher />
349
+ <div className="flex gap-4">
350
+ <a href="/">インデックス</a>
351
+ <LocalizedLink to="/">{content.links.home}</LocalizedLink>
352
+ <LocalizedLink to="/about">{content.links.about}</LocalizedLink>
353
+ </div>
354
+ <div className="flex gap-4">
355
+ <button onClick={() => navigate({ to: "/" })}>
356
+ {content.links.home}
357
+ </button>
358
+ <button onClick={() => navigate({ to: "/about" })}>
359
+ {content.links.about}
360
+ </button>
361
+ </div>
362
+ </div>
311
363
  </div>
312
364
  );
313
365
  }
314
366
  ```
315
367
 
316
- ---
368
+ > `useIntlayer` フックの詳細については、[ドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/react-intlayer/useIntlayer.md)を参照してください。
317
369
 
318
- ## (任意)ステップ9: `<html lang>` と `dir` の設定(TanStack Start Document)
370
+ ### ステップ9: ロケールスイッチャーコンポーネントの作成
319
371
 
320
- TanStack Start はカスタマイズ可能な **Document**(ルートHTMLシェル)を提供します。アクセシビリティやSEOのために `lang` と `dir` を設定しましょう:
372
+ ユーザーが言語を切り替えられるコンポーネントを作成します:
321
373
 
322
- ```tsx fileName="src/routes/__root.tsx" {4,15}
323
- import { Outlet, createRootRoute } from "@tanstack/react-router";
324
- import { IntlayerProvider } from "react-intlayer";
325
- import { getHTMLTextDir } from "intlayer";
374
+ ```tsx fileName="src/components/locale-switcher.tsx" codeFormat="typescript"
375
+ import { useLocation } from "@tanstack/react-router";
376
+ import {
377
+ getHTMLTextDir,
378
+ getLocaleName,
379
+ getLocalizedUrl,
380
+ Locales,
381
+ } from "intlayer";
382
+ import { useIntlayer, useLocale } from "react-intlayer";
383
+
384
+ export default function LocaleSwitcher() {
385
+ const { pathname, searchStr } = useLocation();
386
+ const content = useIntlayer("locale-switcher");
387
+
388
+ const { availableLocales, locale, setLocale } = useLocale({
389
+ onLocaleChange: (newLocale) => {
390
+ const pathWithLocale = getLocalizedUrl(pathname + searchStr, newLocale);
391
+ location.replace(pathWithLocale);
392
+ },
393
+ });
326
394
 
327
- function Document({
328
- locale,
329
- children,
330
- }: {
331
- locale: string;
332
- children: React.ReactNode;
333
- }) {
334
395
  return (
335
- <html lang={locale} dir={getHTMLTextDir(locale)}>
336
- <head>
337
- <meta charSet="utf-8" />
338
- <meta name="viewport" content="width=device-width, initial-scale=1" />
339
- {/* ... */}
340
- </head>
341
- <body>{children}</body>
342
- </html>
396
+ <select
397
+ aria-label={content.label.toString()}
398
+ onChange={(e) => setLocale(e.target.value)}
399
+ value={locale}
400
+ >
401
+ {availableLocales.map((localeItem) => (
402
+ <option
403
+ dir={getHTMLTextDir(localeItem)}
404
+ key={localeItem}
405
+ lang={localeItem}
406
+ value={localeItem}
407
+ >
408
+ {/* 例: Français (フランス語) */}
409
+ {getLocaleName(localeItem, locale)} (
410
+ {getLocaleName(localeItem, Locales.ENGLISH)})
411
+ </option>
412
+ ))}
413
+ </select>
343
414
  );
344
415
  }
345
-
346
- export const Route = createRootRoute({
347
- component: () => (
348
- <IntlayerProvider>
349
- {/* サーバーでロケールを計算する場合はDocumentに渡してください。そうでなければクライアント側でハイドレーション後に修正されます */}
350
- <Document locale={document?.documentElement?.lang || "en"}>
351
- <Outlet />
352
- </Document>
353
- </IntlayerProvider>
354
- ),
355
- });
356
416
  ```
357
417
 
358
- クライアント側での修正のために、小さなフックを保持することもできます:
418
+ > `useLocale` フックの詳細については、[ドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/react-intlayer/useLocale.md)を参照してください。
419
+
420
+ ### ステップ10: HTML属性の管理を追加(オプション)
359
421
 
360
- ```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx"
422
+ HTMLのlangおよびdir属性を管理するフックを作成します:
423
+
424
+ ```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx" codeFormat="typescript"
425
+ // src/hooks/useI18nHTMLAttributes.tsx
426
+ import { getHTMLTextDir } from "intlayer";
361
427
  import { useEffect } from "react";
362
428
  import { useLocale } from "react-intlayer";
363
- import { getHTMLTextDir } from "intlayer";
364
429
 
365
430
  export const useI18nHTMLAttributes = () => {
366
431
  const { locale } = useLocale();
432
+
367
433
  useEffect(() => {
368
- document.documentElement.lang = locale;
369
- document.documentElement.dir = getHTMLTextDir(locale);
434
+ document.documentElement.lang = locale; // HTMLのlang属性を設定
435
+ document.documentElement.dir = getHTMLTextDir(locale); // HTMLのdir属性を設定
370
436
  }, [locale]);
371
437
  };
372
438
  ```
373
439
 
374
- ---
440
+ 次に、ルートコンポーネントでこれを使用します:
375
441
 
376
- ## (オプション)ステップ10:ローカライズされたLinkコンポーネント
442
+ ```tsx fileName="src/routes/{-$locale}/index.tsx" codeFormat="typescript"
443
+ import { createFileRoute, Navigate, Outlet } from "@tanstack/react-router";
444
+ import { configuration } from "intlayer";
445
+ import { IntlayerProvider, useLocale } from "react-intlayer";
377
446
 
378
- TanStack Routerは`<Link/>`を提供していますが、内部URLに自動でプレフィックスを付けるプレーンな`<a>`タグが必要な場合:
447
+ import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes"; // フックをインポート
379
448
 
380
- ```tsx fileName="src/components/Link.tsx"
381
- import { getLocalizedUrl } from "intlayer";
382
- import {
383
- forwardRef,
384
- type AnchorHTMLAttributes,
385
- type DetailedHTMLProps,
386
- } from "react";
387
- import { useLocale } from "react-intlayer";
449
+ export const Route = createFileRoute("/{-$locale}")({
450
+ component: LayoutComponent,
451
+ });
388
452
 
389
- export interface LinkProps
390
- extends DetailedHTMLProps<
391
- AnchorHTMLAttributes<HTMLAnchorElement>,
392
- HTMLAnchorElement
393
- > {}
394
-
395
- const isExternal = (href?: string) => /^https?:\/\//.test(href ?? "");
396
-
397
- export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
398
- ({ href, children, ...props }, ref) => {
399
- const { locale } = useLocale();
400
- const hrefI18n =
401
- href && !isExternal(href) ? getLocalizedUrl(href, locale) : href;
402
- return (
403
- <a href={hrefI18n} ref={ref} {...props}>
404
- {children}
405
- </a>
406
- );
407
- }
408
- );
409
- Link.displayName = "Link";
453
+ function LayoutComponent() {
454
+ useI18nHTMLAttributes(); // この行を追加
455
+
456
+ const { locale } = Route.useParams();
457
+
458
+ return (
459
+ <IntlayerProvider locale={locale}>
460
+ <Outlet />
461
+ </IntlayerProvider>
462
+ );
463
+ }
410
464
  ```
411
465
 
412
- > パターンA(basepath)を使用している場合、TanStackの`<Link to="/about" />`はすでに`basepath`を介して`/fr/about`に解決されるため、カスタムリンクはオプションです。
466
+ ### ステップ11: アプリケーションのビルドと実行
413
467
 
414
- ---
468
+ コンテンツ辞書をビルドし、アプリケーションを実行します:
415
469
 
416
- ## TypeScript
470
+ ```bash packageManager="npm"
471
+ # Intlayerの辞書をビルド
472
+ npm run intlayer:build
417
473
 
418
- Intlayerの生成された型を含めてください:
474
+ # 開発サーバーを起動
475
+ npm run dev
476
+ ```
477
+
478
+ ```bash packageManager="pnpm"
479
+ # Intlayerの辞書をビルド
480
+ pnpm intlayer:build
481
+
482
+ # 開発サーバーを起動
483
+ pnpm dev
484
+ ```
485
+
486
+ ```bash packageManager="yarn"
487
+ # Intlayerの辞書をビルド
488
+ yarn intlayer:build
489
+
490
+ # 開発サーバーを起動
491
+ yarn dev
492
+ ```
493
+
494
+ ### ステップ12: TypeScriptの設定(任意)
495
+
496
+ Intlayerはモジュール拡張を使用してTypeScriptの利点を活かし、コードベースをより強固にします。
497
+
498
+ TypeScriptの設定に自動生成された型が含まれていることを確認してください:
419
499
 
420
500
  ```json5 fileName="tsconfig.json"
421
501
  {
422
- "include": ["src", ".intlayer/**/*.ts"],
502
+ compilerOptions: {
503
+ // ... 既存のTypeScript設定
504
+ },
505
+ include: [
506
+ // ... 既存のインクルード
507
+ ".intlayer/**/*.ts", // 自動生成された型を含める
508
+ ],
423
509
  }
424
510
  ```
425
511
 
426
- ---
512
+ ### Git設定
427
513
 
428
- ## Git
514
+ Intlayerによって生成されたファイルは無視することを推奨します。これにより、Gitリポジトリへのコミットを避けることができます。
429
515
 
430
- Intlayerの生成されたアーティファクトを無視してください:
516
+ これを行うには、`.gitignore`ファイルに以下の指示を追加してください:
431
517
 
432
- ```gitignore
518
+ ```plaintext fileName=".gitignore"
519
+ # Intlayerによって生成されたファイルを無視する
433
520
  .intlayer
434
521
  ```
435
522
 
436
523
  ---
437
524
 
438
- ## VS Code 拡張機能
525
+ ### ステップ13: リダイレクトの作成(オプション)
526
+
527
+ ```typescript fileName="src/routes/{-$locale}/rotue.tsx" codeFormat="typescript"
528
+ function LayoutComponent() {
529
+ useI18nHTMLAttributes();
530
+
531
+ const { locale } = Route.useParams();
532
+ const { locale: selectedLocale } = useLocale();
533
+ const { defaultLocale } = configuration.internationalization;
534
+ const { prefixDefault } = configuration.middleware;
535
+
536
+ // prefixDefault が true の場合、URL にロケールが存在しないときはデフォルトロケールへリダイレクトする
537
+ if (selectedLocale === defaultLocale && !locale && prefixDefault) {
538
+ return <Navigate replace to={defaultLocale} />;
539
+ }
439
540
 
440
- - **Intlayer VS Code 拡張機能** → オートコンプリート、エラー表示、インラインプレビュー、クイックアクション。
441
- マーケットプレイス: `intlayer.intlayer-vs-code-extension`
541
+ // URL のロケールが選択されたロケールと一致しない場合は選択されたロケールへリダイレクトする
542
+ if (selectedLocale !== defaultLocale && !locale) {
543
+ return <Navigate replace to={selectedLocale} />;
544
+ }
545
+
546
+ return (
547
+ <IntlayerProvider locale={locale}>
548
+ <Outlet />
549
+ </IntlayerProvider>
550
+ );
551
+ }
552
+ ```
553
+
554
+ ## 本番環境へのデプロイ
555
+
556
+ アプリケーションをデプロイする際は、以下の手順を行ってください:
557
+
558
+ 1. **アプリケーションをビルドする:**
559
+
560
+ ```bash
561
+ npm run build
562
+ ```
563
+
564
+ 2. **Intlayerの辞書をビルドする:**
565
+
566
+ ```bash
567
+ npm run intlayer:build
568
+ ```
569
+
570
+ 3. **本番環境でミドルウェアを使用する場合は、`vite-intlayer`を依存関係に移動する:**
571
+ ```bash
572
+ npm install vite-intlayer --save
573
+ ```
574
+
575
+ これでアプリケーションは以下をサポートします:
576
+
577
+ - **URL構造**: `/en`, `/en/about`, `/tr`, `/tr/about`
578
+ - **ブラウザの設定に基づく自動ロケール検出**
579
+ - **Tanstack Startによるロケール対応ルーティング**
580
+ - **自動生成された型定義によるTypeScriptサポート**
581
+ - **適切なロケール処理を行うサーバーサイドレンダリング**
582
+
583
+ ## VS Code拡張機能
584
+
585
+ Intlayerでの開発体験を向上させるために、公式の**Intlayer VS Code拡張機能**をインストールできます。
586
+
587
+ [VS Codeマーケットプレイスからインストール](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
588
+
589
+ この拡張機能は以下を提供します:
590
+
591
+ - 翻訳キーの**オートコンプリート**。
592
+ - 翻訳が不足している場合の**リアルタイムエラー検出**。
593
+ - 翻訳されたコンテンツの**インラインプレビュー**。
594
+ - 翻訳の作成や更新を簡単に行うための**クイックアクション**。
595
+
596
+ 拡張機能の使い方の詳細については、[Intlayer VS Code拡張機能のドキュメント](https://intlayer.org/doc/vs-code-extension)を参照してください。
442
597
 
443
598
  ---
444
599
 
445
600
  ## さらに進む
446
601
 
447
- - ビジュアルエディター
448
- - CMSモード
449
- - エッジでのロケール検出 / アダプター
602
+ さらに進めるには、[ビジュアルエディター](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/intlayer_visual_editor.md)を実装するか、[CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/intlayer_CMS.md)を使用してコンテンツを外部化することができます。
450
603
 
451
604
  ---
452
605
 
606
+ ## ドキュメント参照
607
+
608
+ - [Intlayer ドキュメント](https://intlayer.org)
609
+ - [Tanstack Start ドキュメント](https://reactrouter.com/)
610
+ - [useIntlayer フック](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/react-intlayer/useIntlayer.md)
611
+ - [useLocale フック](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/react-intlayer/useLocale.md)
612
+ - [コンテンツ宣言](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/get_started.md)
613
+ - [設定](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/configuration.md)
614
+
615
+ この包括的なガイドは、IntlayerをTanstack Startと統合し、ロケール対応のルーティングとTypeScriptサポートを備えた完全な国際化アプリケーションを構築するために必要なすべてを提供します。
616
+
453
617
  ## ドキュメント履歴
454
618
 
455
- | バージョン | 日付 | 変更内容 |
456
- | ---------- | ---------- | --------------------------- |
457
- | 1.0.0 | 2025-08-11 | TanStack Start の適応を追加 |
619
+ | バージョン | 日付 | 変更内容 |
620
+ | ---------- | ---------- | ------------------------ |
621
+ | 5.8.1 | 2025-09-09 | Tanstack Start向けに追加 |