@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
@@ -1,364 +1,435 @@
1
1
  ---
2
- createdAt: 2025-08-11
3
- updatedAt: 2025-08-11
4
- title: Getting Started with Intlayer in TanStack Start (React)
5
- description: Add i18n to your TanStack Start app using Intlayer-component-level dictionaries, localized URLs, and SEO-friendly metadata.
2
+ createdAt: 2025-09-09
3
+ updatedAt: 2025-09-09
4
+ title: Getting Started with Intlayer in Tanstack Start
5
+ description: Learn how to add internationalization (i18n) to your Tanstack Start application using Intlayer. Follow this comprehensive guide to make your app multilingual with locale-aware routing.
6
6
  keywords:
7
7
  - Internationalization
8
8
  - Documentation
9
9
  - Intlayer
10
- - TanStack Start
11
- - TanStack Router
10
+ - Tanstack Start
12
11
  - React
13
12
  - i18n
14
- - JavaScript
13
+ - TypeScript
14
+ - Locale Routing
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
- # Getting Started Internationalizing (i18n) with Intlayer and TanStack Start (React)
24
+ # Getting Started Internationalizing (i18n) with Intlayer and Tanstack Start
25
+
26
+ This guide demonstrates how to integrate **Intlayer** for seamless internationalization in Tanstack Start projects with locale-aware routing, TypeScript support, and modern development practices.
22
27
 
23
28
  ## What is Intlayer?
24
29
 
25
- **Intlayer** is an open-source i18n toolkit for React apps. It gives you:
30
+ **Intlayer** is an innovative, open-source internationalization (i18n) library designed to simplify multilingual support in modern web applications.
26
31
 
27
- - **Component-local dictionaries** with TypeScript safety.
28
- - **Dynamic metadata & routes** (SEO-ready).
29
- - **Runtime locale switching** (and helpers to detect/persist locales).
30
- - **Vite plugin** for build-time transforms + dev DX.
32
+ With Intlayer, you can:
31
33
 
32
- This guide shows how to wire Intlayer into a **TanStack Start** project (which uses Vite under the hood and TanStack Router for routing/SSR).
34
+ - **Easily manage translations** using declarative dictionaries at the component level.
35
+ - **Dynamically localize metadata**, routes, and content.
36
+ - **Ensure TypeScript support** with autogenerated types, improving autocompletion and error detection.
37
+ - **Benefit from advanced features**, like dynamic locale detection and switching.
38
+ - **Enable locale-aware routing** with Tanstack Start's file-based routing system.
33
39
 
34
40
  ---
35
41
 
36
- ## Step 1: Install Dependencies
42
+ ## Step-by-Step Guide to Set Up Intlayer in a Tanstack Start Application
37
43
 
38
- ```bash
39
- # npm
40
- npm i intlayer react-intlayer
41
- npm i -D vite-intlayer
44
+ ### Step 1: Create Project
42
45
 
43
- # pnpm
44
- pnpm add intlayer react-intlayer
45
- pnpm add -D vite-intlayer
46
+ Start by creating a new TanStack Start project by following the [Start new project](https://tanstack.com/start/latest/docs/framework/react/quick-start) guide on the TanStack Start website.
47
+
48
+ ### Step 2: Install Intlayer Packages
46
49
 
47
- # yarn
48
- yarn add intlayer react-intlayer
49
- yarn add -D vite-intlayer
50
+ Install the necessary packages using your preferred package manager:
51
+
52
+ ```bash packageManager="npm"
53
+ npm install intlayer react-intlayer
54
+ npm install vite-intlayer --save-dev
50
55
  ```
51
56
 
52
- - **intlayer**: core (config, dictionaries, CLI/transforms).
53
- - **react-intlayer**: `<IntlayerProvider>` + hooks for React.
54
- - **vite-intlayer**: Vite plugin, plus optional middleware for locale detection/redirects (works in dev & SSR/preview; move to `dependencies` for production SSR).
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
+ The core package that provides internationalization tools for configuration management, translation, [content declaration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/get_started.md), transpilation, and [CLI commands](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_cli.md).
65
+
66
+ - **react-intlayer**
67
+ The package that integrates Intlayer with React application. It provides context providers and hooks for React internationalization.
68
+
69
+ - **vite-intlayer**
70
+ Includes the Vite plugin for integrating Intlayer with the [Vite bundler](https://vite.dev/guide/why.html#why-bundle-for-production), as well as middleware for detecting the user's preferred locale, managing cookies, and handling URL redirection.
71
+
72
+ ### Step 3: Configuration of your project
57
73
 
58
- ## Step 2: Configure Intlayer
74
+ Create a config file to configure the languages of your application:
59
75
 
60
- Create `intlayer.config.ts` at your project root:
76
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
77
+ import type { IntlayerConfig } from "intlayer";
61
78
 
62
- ```ts fileName="intlayer.config.ts"
63
- import { Locales, type IntlayerConfig } from "intlayer";
79
+ import { Locales } from "intlayer";
64
80
 
65
81
  const config: IntlayerConfig = {
66
82
  internationalization: {
67
- locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
68
83
  defaultLocale: Locales.ENGLISH,
84
+ locales: [
85
+ Locales.ENGLISH,
86
+ Locales.FRENCH,
87
+ Locales.SPANISH,
88
+ // Your other locales
89
+ ],
69
90
  },
70
- // You can also tweak: contentDir, contentFileExtensions, middleware options, etc.
71
91
  };
72
92
 
73
93
  export default config;
74
94
  ```
75
95
 
76
- CommonJS/ESM variants are identical to your original doc if you prefer `cjs`/`mjs`.
96
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
97
+ import { Locales } from "intlayer";
77
98
 
78
- > Full config reference: see Intlayer’s configuration docs.
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
+ // Your other locales
108
+ ],
109
+ },
110
+ };
79
111
 
80
- ---
112
+ export default config;
113
+ ```
81
114
 
82
- ## Step 3: Add the Vite Plugin (and optional middleware)
115
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
116
+ const { Locales } = require("intlayer");
83
117
 
84
- **TanStack Start uses Vite**, so add Intlayer’s plugin(s) to your `vite.config.ts`:
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
+ // Your other locales
127
+ ],
128
+ },
129
+ };
85
130
 
86
- ```ts fileName="vite.config.ts"
131
+ module.exports = config;
132
+ ```
133
+
134
+ > Through this configuration file, you can set up localized URLs, middleware redirection, cookie names, the location and extension of your content declarations, disable Intlayer logs in the console, and more. For a complete list of available parameters, refer to the [configuration documentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/configuration.md).
135
+
136
+ ### Step 4: Integrate Intlayer in Your Vite Configuration
137
+
138
+ Add the intlayer plugin into your configuration:
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
- // Optional but recommended for locale detection, cookies & redirects:
96
- intLayerMiddlewarePlugin(),
151
+ intlayerMiddlewarePlugin(),
97
152
  ],
98
153
  });
99
154
  ```
100
155
 
101
- > If you deploy SSR, move `vite-intlayer` to `dependencies` so the middleware runs in production.
156
+ > The `intlayerPlugin()` Vite plugin is used to integrate Intlayer with Vite. It ensures the building of content declaration files and monitors them in development mode. It defines Intlayer environment variables within the Vite application. Additionally, it provides aliases to optimize performance.
102
157
 
103
- ---
158
+ ### Step 5: Create Layout Components
104
159
 
105
- ## Step 4: Declare Your Content
160
+ Set up your root layout and locale-specific layouts:
106
161
 
107
- Place your dictionaries anywhere under `./src` (default `contentDir`). Example:
162
+ #### Root Layout
108
163
 
109
- ```tsx fileName="src/app.content.tsx"
110
- import { t, type Dictionary } from "intlayer";
111
- import type { ReactNode } from "react";
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
+ ```
186
+
187
+ ### Step 6: Declare Your Content
188
+
189
+ Create and manage your content declarations to store translations:
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({ en: "Vite logo", fr: "Logo Vite", es: "Logo Vite" }),
117
- reactLogo: t({ en: "React logo", fr: "Logo React", es: "Logo React" }),
198
+ links: {
199
+ about: t({
200
+ en: "About",
201
+ es: "Acerca de",
202
+ fr: "À propos",
203
+ }),
204
+ home: t({
205
+ en: "Home",
206
+ es: "Inicio",
207
+ fr: "Accueil",
208
+ }),
209
+ },
210
+ meta: {
211
+ description: t({
212
+ en: "This is an example of using Intlayer with 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
+ },
118
217
  title: t({
119
- en: "TanStack Start + React",
120
- fr: "TanStack Start + React",
121
- es: "TanStack Start + React",
122
- }),
123
- count: t({ en: "count is ", fr: "le compte est ", es: "el recuento es " }),
124
- edit: t<ReactNode>({
125
- en: (
126
- <>
127
- Edit <code>src/routes/index.tsx</code> and save to test HMR
128
- </>
129
- ),
130
- fr: (
131
- <>
132
- Éditez <code>src/routes/index.tsx</code> et enregistrez pour tester
133
- HMR
134
- </>
135
- ),
136
- es: (
137
- <>
138
- Edita <code>src/routes/index.tsx</code> y guarda para probar HMR
139
- </>
140
- ),
141
- }),
142
- readTheDocs: t({
143
- en: "Click the logos to learn more",
144
- fr: "Cliquez sur les logos pour en savoir plus",
145
- es: "Haz clic en los logotipos para saber más",
218
+ en: "Welcome to Intlayer + TanStack Router",
219
+ es: "Bienvenido a Intlayer + TanStack Router",
220
+ fr: "Bienvenue à Intlayer + TanStack Router",
146
221
  }),
147
222
  },
223
+ key: "app",
148
224
  } satisfies Dictionary;
149
225
 
150
226
  export default appContent;
151
227
  ```
152
228
 
153
- JSON/ESM/CJS variants work the same as in your original doc.
229
+ > Your content declarations can be defined anywhere in your application as soon they are included into the `contentDir` directory (by default, `./app`). And match the content declaration file extension (by default, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
154
230
 
155
- > TSX content? Don’t forget `import React from "react"` if your setup needs it.
231
+ > For more details, refer to the [content declaration documentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/get_started.md).
156
232
 
157
- ---
233
+ ### Step 7: Create Locale-Aware Components and Hooks
158
234
 
159
- ## Step 5: Wrap TanStack Start with Intlayer
235
+ Create a `LocalizedLink` component for locale-aware navigation:
160
236
 
161
- With TanStack Start, your **root route** is the right place to set providers.
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";
162
243
 
163
- ```tsx fileName="src/routes/__root.tsx"
164
- import {
165
- Outlet,
166
- createRootRoute,
167
- Link as RouterLink,
168
- } from "@tanstack/react-router";
169
- import { IntlayerProvider, useIntlayer } from "react-intlayer";
170
-
171
- function AppShell() {
172
- // Example of using a dictionary at the top level:
173
- const content = useIntlayer("app");
244
+ type LocalizedLinkProps = {
245
+ to: string;
246
+ } & Omit<LinkProps, "to">;
174
247
 
175
- return (
176
- <div>
177
- <nav className="flex gap-3 p-3">
178
- <RouterLink to="/">Home</RouterLink>
179
- <RouterLink to="/about">About</RouterLink>
180
- </nav>
181
- <main className="p-6">
182
- <h1>{content.title}</h1>
183
- <Outlet />
184
- </main>
185
- </div>
186
- );
187
- }
248
+ export function LocalizedLink(props: LocalizedLinkProps) {
249
+ const { locale } = useLocale();
188
250
 
189
- export const Route = createRootRoute({
190
- component: () => (
191
- <IntlayerProvider>
192
- <AppShell />
193
- </IntlayerProvider>
194
- ),
195
- });
196
- ```
251
+ const isExternal = (to: string) => {
252
+ return /^(https?:)?\/\//.test(to);
253
+ };
197
254
 
198
- Then use your content in pages:
255
+ const to = isExternal(props.to)
256
+ ? props.to
257
+ : getLocalizedUrl(props.to, locale);
199
258
 
200
- ```tsx fileName="src/routes/index.tsx"
201
- import { createFileRoute } from "@tanstack/react-router";
202
- import { useIntlayer } from "react-intlayer";
203
- import reactLogo from "../assets/react.svg";
204
-
205
- export const Route = createFileRoute("/")({
206
- component: () => {
207
- const content = useIntlayer("app");
208
- return (
209
- <>
210
- <button>{content.count}0</button>
211
- <p>{content.edit}</p>
212
- <img
213
- src={reactLogo}
214
- alt={content.reactLogo.value}
215
- width={48}
216
- height={48}
217
- />
218
- <p className="opacity-70">{content.readTheDocs}</p>
219
- </>
220
- );
221
- },
222
- });
259
+ return <Link {...props} to={to as LinkProps["to"]} />;
260
+ }
223
261
  ```
224
262
 
225
- > String attributes (`alt`, `title`, `aria-label`, …) need `.value`:
226
- >
227
- > ```jsx
228
- > <img alt={c.reactLogo.value} />
229
- > ```
263
+ Create a `useLocalizedNavigate` hook for programmatic navigation:
230
264
 
231
- ---
232
-
233
- ## (Optional) Step 6: Locale Switching (Client)
234
-
235
- ```tsx fileName="src/components/LocaleSwitcher.tsx"
236
- import { Locales } from "intlayer";
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";
237
270
  import { useLocale } from "react-intlayer";
238
271
 
239
- export function LocaleSwitcher() {
240
- const { setLocale } = useLocale();
241
- return (
242
- <div className="flex gap-2">
243
- <button onClick={() => setLocale(Locales.ENGLISH)}>English</button>
244
- <button onClick={() => setLocale(Locales.FRENCH)}>Français</button>
245
- <button onClick={() => setLocale(Locales.SPANISH)}>Español</button>
246
- </div>
247
- );
248
- }
249
- ```
272
+ type LocalizedNavigateOptions = {
273
+ to: string;
274
+ } & Omit<NavigateOptions, "to">;
250
275
 
251
- ---
276
+ export const useLocalizedNavigate = () => {
277
+ const navigate = useNavigate();
278
+ const { locale } = useLocale();
252
279
 
253
- ## (Optional) Step 7: Localized Routing (SEO-friendly URLs)
280
+ const isExternal = (to: string) => {
281
+ return /^(https?:)?\/\//.test(to);
282
+ };
254
283
 
255
- You have **two good patterns** with TanStack Start. Pick one.
284
+ const localizedNavigate = (options: LocalizedNavigateOptions) => {
285
+ const to = isExternal(options.to)
286
+ ? options.to
287
+ : getLocalizedUrl(options.to, locale);
256
288
 
257
- Create a dynamic segment folder `src/routes/$locale/` so your URLs are `/:locale/...`. In the `$locale` layout, validate the `params.locale`, set `<IntlayerProvider locale=...>`, and render an `<Outlet />`. This approach is straightforward, but you’ll mount the rest of your routes beneath `$locale`, and you’ll need an extra non-prefixed tree if you _don’t_ want the default locale prefixed.
289
+ navigate({ ...options, to: to as NavigateOptions["to"] });
290
+ };
258
291
 
259
- ---
292
+ return localizedNavigate;
293
+ };
294
+ ```
295
+
296
+ ### Step 8: Utilize Intlayer in Your Pages
260
297
 
261
- ## (Optional) Step 8: Update the URL when switching locale
298
+ Access your content dictionaries throughout your application:
262
299
 
263
- With Pattern A (basepath), switching locales means **navigating to a different basepath**:
300
+ #### Root Redirect Page
264
301
 
265
- ```tsx fileName="src/components/LocaleSwitcherNavigate.tsx"
266
- import { useRouter } from "@tanstack/react-router";
267
- import { Locales, getLocalizedUrl } from "intlayer";
302
+ ```tsx fileName="src/routes/page.tsx" codeFormat="typescript"
303
+ // src/routes/page.tsx
268
304
  import { useLocale } from "react-intlayer";
305
+ import { Navigate } from "react-router";
269
306
 
270
- export function LocaleSwitcherNavigate() {
271
- const router = useRouter();
272
- const { locale, setLocale } = useLocale();
273
-
274
- const change = async (next: Locales) => {
275
- if (next === locale) return;
276
- const nextPath = getLocalizedUrl(
277
- window.location.pathname + window.location.search,
278
- next
279
- );
280
- await router.navigate({ to: nextPath }); // preserves history
281
- setLocale(next);
282
- };
307
+ export default function Page() {
308
+ const { locale } = useLocale();
283
309
 
284
- return (
285
- <div className="flex gap-2">
286
- <button onClick={() => change(Locales.ENGLISH)}>English</button>
287
- <button onClick={() => change(Locales.FRENCH)}>Français</button>
288
- <button onClick={() => change(Locales.SPANISH)}>Español</button>
289
- </div>
290
- );
310
+ return <Navigate replace to={locale} />;
291
311
  }
292
312
  ```
293
313
 
294
- ---
314
+ #### Localized Home Page
295
315
 
296
- ## (Optional) Step 9: `<html lang>` and `dir` (TanStack Start Document)
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";
297
320
 
298
- TanStack Start exposes a **Document** (root HTML shell) you can customize. Set `lang` and `dir` for accessibility/SEO:
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
+ });
299
339
 
300
- ```tsx fileName="src/routes/__root.tsx" {4,15}
301
- import { HeadContent, Scripts, createRootRoute } from "@tanstack/react-router";
302
- import { TanStackRouterDevtools } from "@tanstack/react-router-devtools";
340
+ function RouteComponent() {
341
+ const content = useIntlayer("app");
342
+ const navigate = useLocalizedNavigate();
303
343
 
304
- import Header from "../components/Header";
344
+ return (
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="/">Index</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>
363
+ </div>
364
+ );
365
+ }
366
+ ```
305
367
 
306
- import { IntlayerProvider } from "react-intlayer";
307
- import appCss from "../styles.css?url";
368
+ > To Learn more about the `useIntlayer` hook, refer to the [documentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useIntlayer.md).
308
369
 
309
- export const Route = createRootRoute({
310
- head: () => ({
311
- meta: [
312
- {
313
- charSet: "utf-8",
314
- },
315
- {
316
- name: "viewport",
317
- content: "width=device-width, initial-scale=1",
318
- },
319
- {
320
- title: "TanStack Start Starter",
321
- },
322
- ],
323
- links: [
324
- {
325
- rel: "stylesheet",
326
- href: appCss,
327
- },
328
- ],
329
- }),
370
+ ### Step 9: Create a Locale Switcher Component
330
371
 
331
- shellComponent: RootDocument,
332
- });
372
+ Create a component to allow users to change languages:
373
+
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
+ });
333
394
 
334
- function RootDocument({ children }: { children: React.ReactNode }) {
335
395
  return (
336
- <IntlayerProvider>
337
- <html lang="en">
338
- <head>
339
- <HeadContent />
340
- </head>
341
- <body>
342
- <Header />
343
- {children}
344
- <TanStackRouterDevtools />
345
- <Scripts />
346
- </body>
347
- </html>
348
- </IntlayerProvider>
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
+ {/* Example: Français (French) */}
409
+ {getLocaleName(localeItem, locale)} (
410
+ {getLocaleName(localeItem, Locales.ENGLISH)})
411
+ </option>
412
+ ))}
413
+ </select>
349
414
  );
350
415
  }
351
416
  ```
352
417
 
353
- For client-side correction, you can also keep your small hook:
418
+ > To Learn more about the `useLocale` hook, refer to the [documentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useLocale.md).
354
419
 
355
- ```tsx fileName="src/hooks/useI18nHTMLAttributes.ts"
420
+ ### Step 10: Add HTML Attributes Management (Optional)
421
+
422
+ Create a hook to manage HTML lang and dir attributes:
423
+
424
+ ```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx" codeFormat="typescript"
425
+ // src/hooks/useI18nHTMLAttributes.tsx
426
+ import { getHTMLTextDir } from "intlayer";
356
427
  import { useEffect } from "react";
357
428
  import { useLocale } from "react-intlayer";
358
- import { getHTMLTextDir } from "intlayer";
359
429
 
360
430
  export const useI18nHTMLAttributes = () => {
361
431
  const { locale } = useLocale();
432
+
362
433
  useEffect(() => {
363
434
  document.documentElement.lang = locale;
364
435
  document.documentElement.dir = getHTMLTextDir(locale);
@@ -366,87 +437,185 @@ export const useI18nHTMLAttributes = () => {
366
437
  };
367
438
  ```
368
439
 
369
- ---
440
+ Then use it in your root component:
370
441
 
371
- ## (Optional) Step 10: Localized Link component
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";
372
446
 
373
- TanStack Router provides a `<Link/>`, but if you ever need a plain `<a>` that auto-prefixes internal URLs:
447
+ import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes"; // import the hook
374
448
 
375
- ```tsx fileName="src/components/Link.tsx"
376
- import { getLocalizedUrl } from "intlayer";
377
- import {
378
- forwardRef,
379
- type AnchorHTMLAttributes,
380
- type DetailedHTMLProps,
381
- } from "react";
382
- import { useLocale } from "react-intlayer";
449
+ export const Route = createFileRoute("/{-$locale}")({
450
+ component: LayoutComponent,
451
+ });
383
452
 
384
- export interface LinkProps
385
- extends DetailedHTMLProps<
386
- AnchorHTMLAttributes<HTMLAnchorElement>,
387
- HTMLAnchorElement
388
- > {}
389
-
390
- const isExternal = (href?: string) => /^https?:\/\//.test(href ?? "");
391
-
392
- export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
393
- ({ href, children, ...props }, ref) => {
394
- const { locale } = useLocale();
395
- const hrefI18n =
396
- href && !isExternal(href) ? getLocalizedUrl(href, locale) : href;
397
- return (
398
- <a href={hrefI18n} ref={ref} {...props}>
399
- {children}
400
- </a>
401
- );
402
- }
403
- );
404
- Link.displayName = "Link";
453
+ function LayoutComponent() {
454
+ useI18nHTMLAttributes(); // add this line
455
+
456
+ const { locale } = Route.useParams();
457
+
458
+ return (
459
+ <IntlayerProvider locale={locale}>
460
+ <Outlet />
461
+ </IntlayerProvider>
462
+ );
463
+ }
405
464
  ```
406
465
 
407
- > If you use Pattern A (basepath), TanStack’s `<Link to="/about" />` already resolves to `/fr/about` via `basepath`, so a custom link is optional.
466
+ ### Step 11: Build and Run Your Application
408
467
 
409
- ---
468
+ Build the content dictionaries and run your application:
410
469
 
411
- ## TypeScript
470
+ ```bash packageManager="npm"
471
+ # Build Intlayer dictionaries
472
+ npm run intlayer:build
412
473
 
413
- Include Intlayer’s generated types:
474
+ # Start development server
475
+ npm run dev
476
+ ```
477
+
478
+ ```bash packageManager="pnpm"
479
+ # Build Intlayer dictionaries
480
+ pnpm intlayer:build
481
+
482
+ # Start development server
483
+ pnpm dev
484
+ ```
485
+
486
+ ```bash packageManager="yarn"
487
+ # Build Intlayer dictionaries
488
+ yarn intlayer:build
489
+
490
+ # Start development server
491
+ yarn dev
492
+ ```
493
+
494
+ ### Step 12: Configure TypeScript (Optional)
495
+
496
+ Intlayer uses module augmentation to get benefits of TypeScript and make your codebase stronger.
497
+
498
+ Ensure your TypeScript configuration includes the autogenerated types:
414
499
 
415
500
  ```json5 fileName="tsconfig.json"
416
501
  {
417
- "include": ["src", ".intlayer/**/*.ts"],
502
+ compilerOptions: {
503
+ // ... your existing TypeScript configurations
504
+ },
505
+ include: [
506
+ // ... your existing includes
507
+ ".intlayer/**/*.ts", // Include the auto-generated types
508
+ ],
418
509
  }
419
510
  ```
420
511
 
421
- ---
512
+ ### Git Configuration
422
513
 
423
- ## Git
514
+ It is recommended to ignore the files generated by Intlayer. This allows you to avoid committing them to your Git repository.
424
515
 
425
- Ignore Intlayer’s generated artifacts:
516
+ To do this, you can add the following instructions to your `.gitignore` file:
426
517
 
427
- ```gitignore
518
+ ```plaintext fileName=".gitignore"
519
+ # Ignore the files generated by Intlayer
428
520
  .intlayer
429
521
  ```
430
522
 
431
523
  ---
432
524
 
525
+ ### Step 13: Create Redirection (Optional)
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
+ // Redirect to the default locale if no locale is present in the URL when prefixDefault is true
537
+ if (selectedLocale === defaultLocale && !locale && prefixDefault) {
538
+ return <Navigate replace to={defaultLocale} />;
539
+ }
540
+
541
+ // Redirect to the selected locale if the locale in the URL does not match the selected locale
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
+ ## Production Deployment
555
+
556
+ When deploying your application:
557
+
558
+ 1. **Build your application:**
559
+
560
+ ```bash
561
+ npm run build
562
+ ```
563
+
564
+ 2. **Build Intlayer dictionaries:**
565
+
566
+ ```bash
567
+ npm run intlayer:build
568
+ ```
569
+
570
+ 3. **Move `vite-intlayer` to dependencies** if using middleware in production:
571
+ ```bash
572
+ npm install vite-intlayer --save
573
+ ```
574
+
575
+ Your application will now support:
576
+
577
+ - **URL Structure**: `/en`, `/en/about`, `/tr`, `/tr/about`
578
+ - **Automatic locale detection** based on browser preferences
579
+ - **Locale-aware routing** with Tanstack Start
580
+ - **TypeScript support** with auto-generated types
581
+ - **Server-side rendering** with proper locale handling
582
+
433
583
  ## VS Code Extension
434
584
 
435
- - **Intlayer VS Code Extension** autocompletion, errors, inline previews, quick actions.
436
- Marketplace: `intlayer.intlayer-vs-code-extension`
585
+ To improve your development experience with Intlayer, you can install the official **Intlayer VS Code Extension**.
586
+
587
+ [Install from the VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
588
+
589
+ This extension provides:
590
+
591
+ - **Autocompletion** for translation keys.
592
+ - **Real-time error detection** for missing translations.
593
+ - **Inline previews** of translated content.
594
+ - **Quick actions** to easily create and update translations.
595
+
596
+ For more details on how to use the extension, refer to the [Intlayer VS Code Extension documentation](https://intlayer.org/doc/vs-code-extension).
437
597
 
438
598
  ---
439
599
 
440
600
  ## Go Further
441
601
 
442
- - Visual Editor
443
- - CMS mode
444
- - Locale detection on the edge / adapters
602
+ To go further, you can implement the [visual editor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_visual_editor.md) or externalize your content using the [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_CMS.md).
445
603
 
446
604
  ---
447
605
 
606
+ ## Documentation References
607
+
608
+ - [Intlayer Documentation](https://intlayer.org)
609
+ - [Tanstack Start Documentation](https://reactrouter.com/)
610
+ - [useIntlayer hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useIntlayer.md)
611
+ - [useLocale hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useLocale.md)
612
+ - [Content Declaration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/get_started.md)
613
+ - [Configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/configuration.md)
614
+
615
+ This comprehensive guide provides everything you need to integrate Intlayer with Tanstack Start for a fully internationalized application with locale-aware routing and TypeScript support.
616
+
448
617
  ## Doc History
449
618
 
450
- | Version | Date | Changes |
451
- | ------- | ---------- | ------------------------------- |
452
- | 1.0.0 | 2025-08-11 | TanStack Start adaptation added |
619
+ | Version | Date | Changes |
620
+ | ------- | ---------- | ------------------------ |
621
+ | 5.8.1 | 2025-09-09 | Added for Tanstack Start |