@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,347 +1,435 @@
1
1
  ---
2
- createdAt: 2025-08-11
3
- updatedAt: 2025-08-11
4
- title: Prise en main d'Intlayer avec TanStack Start (React)
5
- description: Ajoutez l'internationalisation à votre application TanStack Start avec Intlayer - dictionnaires au niveau des composants, URLs localisées et métadonnées optimisées pour le SEO.
2
+ createdAt: 2025-09-09
3
+ updatedAt: 2025-09-09
4
+ title: Prise en main de l'internationalisation avec Intlayer dans Tanstack Start
5
+ description: Apprenez comment ajouter l'internationalisation (i18n) à votre application Tanstack Start en utilisant Intlayer. Suivez ce guide complet pour rendre votre application multilingue avec un routage sensible à la locale.
6
6
  keywords:
7
7
  - Internationalisation
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
+ - Routage par locale
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
- # Prise en main de l'internationalisation (i18n) avec Intlayer et TanStack Start (React)
24
+ # Prise en main de l'internationalisation (i18n) avec Intlayer et Tanstack Start
25
+
26
+ Ce guide montre comment intégrer **Intlayer** pour une internationalisation fluide dans les projets Tanstack Start avec un routage sensible à la locale, la prise en charge de TypeScript, et des pratiques de développement modernes.
22
27
 
23
28
  ## Qu'est-ce qu'Intlayer ?
24
29
 
25
- **Intlayer** est une boîte à outils open-source d'internationalisation pour les applications React. Elle vous offre :
30
+ **Intlayer** est une bibliothèque d'internationalisation (i18n) innovante et open-source, conçue pour simplifier la prise en charge multilingue dans les applications web modernes.
26
31
 
27
- - **Dictionnaires locaux aux composants** avec la sécurité de TypeScript.
28
- - **Métadonnées et routes dynamiques** (prêtes pour le SEO).
29
- - **Changement de locale à l'exécution** (et helpers pour détecter/persister les locales).
30
- - **Plugin Vite** pour les transformations au moment de la build + expérience développeur améliorée.
32
+ Avec Intlayer, vous pouvez :
31
33
 
32
- Ce guide montre comment intégrer Intlayer dans un projet **TanStack Start** (qui utilise Vite en interne et TanStack Router pour le routage/SSR).
34
+ - **Gérer facilement les traductions** en utilisant des dictionnaires déclaratifs au niveau des composants.
35
+ - **Localiser dynamiquement les métadonnées**, les routes et le contenu.
36
+ - **Assurer la prise en charge de TypeScript** avec des types générés automatiquement, améliorant l'autocomplétion et la détection des erreurs.
37
+ - **Bénéficier de fonctionnalités avancées**, comme la détection dynamique de la locale et son changement.
38
+ - **Activer le routage sensible à la locale** avec le système de routage basé sur les fichiers de Tanstack Start.
33
39
 
34
40
  ---
35
41
 
36
- ## Étape 1 : Installer les dépendances
42
+ ## Guide étape par étape pour configurer Intlayer dans une application Tanstack Start
37
43
 
38
- ```bash
39
- # npm
40
- npm i intlayer react-intlayer
41
- npm i -D vite-intlayer
44
+ ### Étape 1 : Créer le projet
42
45
 
43
- # pnpm
44
- pnpm add intlayer react-intlayer
45
- pnpm add -D vite-intlayer
46
+ Commencez par créer un nouveau projet TanStack Start en suivant le guide [Démarrer un nouveau projet](https://tanstack.com/start/latest/docs/framework/react/quick-start) sur le site de TanStack Start.
47
+
48
+ ### Étape 2 : Installer les packages Intlayer
46
49
 
47
- # yarn
48
- yarn add intlayer react-intlayer
49
- yarn add -D vite-intlayer
50
+ Installez les packages nécessaires en utilisant votre gestionnaire de paquets préféré :
51
+
52
+ ```bash packageManager="npm"
53
+ npm install intlayer react-intlayer
54
+ npm install vite-intlayer --save-dev
50
55
  ```
51
56
 
52
- - **intlayer** : cœur (configuration, dictionnaires, CLI/transformations).
53
- - **react-intlayer** : `<IntlayerProvider>` + hooks pour React.
54
- - **vite-intlayer** : plugin Vite, plus middleware optionnel pour la détection/redirection de locale (fonctionne en dev & SSR/preview ; déplacer dans `dependencies` pour le SSR en production).
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
+ Le package principal qui fournit des outils d'internationalisation pour la gestion de la configuration, la traduction, la [déclaration de contenu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/get_started.md), la transpilation, et les [commandes CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_cli.md).
65
+
66
+ - **react-intlayer**
67
+ Le package qui intègre Intlayer avec une application React. Il fournit des fournisseurs de contexte et des hooks pour l'internationalisation dans React.
57
68
 
58
- ## Étape 2 : Configurer Intlayer
69
+ - **vite-intlayer**
70
+ Inclut le plugin Vite pour intégrer Intlayer avec le [bundler Vite](https://vite.dev/guide/why.html#why-bundle-for-production), ainsi que des middlewares pour détecter la locale préférée de l'utilisateur, gérer les cookies, et gérer la redirection des URL.
59
71
 
60
- Créez `intlayer.config.ts` à la racine de votre projet :
72
+ ### Étape 3 : Configuration de votre projet
61
73
 
62
- ```ts fileName="intlayer.config.ts"
63
- import { Locales, type IntlayerConfig } from "intlayer";
74
+ Créez un fichier de configuration pour configurer les langues de votre application :
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
83
  defaultLocale: Locales.ENGLISH,
84
+ locales: [
85
+ Locales.ENGLISH,
86
+ Locales.FRENCH,
87
+ Locales.SPANISH,
88
+ // Vos autres langues
89
+ ],
69
90
  },
70
- // Vous pouvez aussi ajuster : contentDir, contentFileExtensions, options du middleware, etc.
71
91
  };
72
92
 
73
93
  export default config;
74
94
  ```
75
95
 
76
- Les variantes CommonJS/ESM sont identiques à votre doc originale si vous préférez `cjs`/`mjs`.
96
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
97
+ import { Locales } from "intlayer";
77
98
 
78
- > Référence complète de la configuration : voir la documentation de configuration d’Intlayer.
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
+ // Vos autres locales
108
+ ],
109
+ },
110
+ };
79
111
 
80
- ---
112
+ export default config;
113
+ ```
81
114
 
82
- ## Étape 3 : Ajouter le plugin Vite (et middleware optionnel)
115
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
116
+ const { Locales } = require("intlayer");
83
117
 
84
- **TanStack Start utilise Vite**, donc ajoutez le(s) plugin(s) d’Intlayer dans votre `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
+ // Vos autres locales
127
+ ],
128
+ },
129
+ };
130
+
131
+ module.exports = config;
132
+ ```
85
133
 
86
- ```ts fileName="vite.config.ts"
134
+ > Grâce à ce fichier de configuration, vous pouvez configurer des URLs localisées, la redirection via middleware, les noms des cookies, l'emplacement et l'extension de vos déclarations de contenu, désactiver les logs Intlayer dans la console, et bien plus encore. Pour une liste complète des paramètres disponibles, référez-vous à la [documentation de configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md).
135
+
136
+ ### Étape 4 : Intégrer Intlayer dans votre configuration Vite
137
+
138
+ Ajoutez le plugin intlayer dans votre 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
- // Optionnel mais recommandé pour la détection de la locale, les cookies et les redirections :
96
- intLayerMiddlewarePlugin(),
151
+ intlayerMiddlewarePlugin(),
97
152
  ],
98
153
  });
99
154
  ```
100
155
 
101
- > Si vous déployez en SSR, déplacez `vite-intlayer` dans les `dependencies` pour que le middleware fonctionne en production.
156
+ > Le plugin Vite `intlayerPlugin()` est utilisé pour intégrer Intlayer avec Vite. Il assure la construction des fichiers de déclaration de contenu et les surveille en mode développement. Il définit les variables d'environnement Intlayer au sein de l'application Vite. De plus, il fournit des alias pour optimiser les performances.
102
157
 
103
- ---
158
+ ### Étape 5 : Créez les composants de mise en page
159
+
160
+ Configurez votre mise en page racine et les mises en page spécifiques à chaque locale :
161
+
162
+ #### Mise en page racine
163
+
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
+ ### Étape 6 : Déclarez votre contenu
104
188
 
105
- ## Étape 4 : Déclarez Votre Contenu
189
+ Créez et gérez vos déclarations de contenu pour stocker les traductions :
106
190
 
107
- Placez vos dictionnaires n'importe où sous `./src` (contentDir par défaut). Exemple :
191
+ ```tsx fileName="src/contents/page.content.ts" contentDeclarationFormat="typescript"
192
+ import type { Dictionary } from "intlayer";
108
193
 
109
- ```tsx fileName="src/app.content.tsx"
110
- import { t, type Dictionary } from "intlayer";
111
- import type { ReactNode } from "react";
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: "Accueil",
206
+ es: "Inicio",
207
+ fr: "Accueil",
208
+ }),
209
+ },
210
+ meta: {
211
+ description: t({
212
+ en: "Ceci est un exemple d'utilisation d'Intlayer avec 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: "Cliquez sur les logos pour en savoir plus",
144
- fr: "Cliquez sur les logos pour en savoir plus",
145
- es: "Haz clic en los logotipos para saber más",
218
+ en: "Bienvenue à 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
- Les variantes JSON/ESM/CJS fonctionnent de la même manière que dans votre document original.
229
+ > Vos déclarations de contenu peuvent être définies n'importe où dans votre application dès qu'elles sont incluses dans le répertoire `contentDir` (par défaut, `./app`). Et correspondent à l'extension de fichier de déclaration de contenu (par défaut, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
154
230
 
155
- > Contenu TSX ? N’oubliez pas `import React from "react"` si votre configuration en a besoin.
231
+ > Pour plus de détails, consultez la [documentation sur la déclaration de contenu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/get_started.md).
156
232
 
157
- ---
233
+ ### Étape 7 : Créer des composants et hooks sensibles à la locale
158
234
 
159
- ## Étape 5 : Envelopper TanStack Start avec Intlayer
235
+ Créez un composant `LocalizedLink` pour une navigation sensible à la locale :
160
236
 
161
- Avec TanStack Start, votre **route racine** est l’endroit idéal pour définir les fournisseurs.
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
- // Exemple d’utilisation d’un dictionnaire au niveau supérieur :
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="/">Accueil</RouterLink>
179
- <RouterLink to="/about">À propos</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
- Ensuite, utilisez votre contenu dans les 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
- > Les attributs de type chaîne (`alt`, `title`, `aria-label`, …) nécessitent `.value` :
226
- >
227
- > ```jsx
228
- > <img alt={c.reactLogo.value} />
229
- > ```
263
+ Créez un hook `useLocalizedNavigate` pour la navigation programmatique :
230
264
 
231
- ---
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";
232
271
 
233
- ## (Optionnel) Étape 6 : Changement de langue (Client)
272
+ type LocalizedNavigateOptions = {
273
+ to: string;
274
+ } & Omit<NavigateOptions, "to">;
234
275
 
235
- ```tsx fileName="src/components/LocaleSwitcher.tsx"
236
- import { Locales } from "intlayer";
237
- import { useLocale } from "react-intlayer";
276
+ export const useLocalizedNavigate = () => {
277
+ const navigate = useNavigate();
278
+ const { locale } = useLocale();
238
279
 
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
- }
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
+ };
249
294
  ```
250
295
 
251
- ---
296
+ ### Étape 8 : Utilisez Intlayer dans vos pages
252
297
 
253
- ## (Optionnel) Étape 7 : Routage localisé (URLs optimisées pour le SEO)
298
+ Accédez à vos dictionnaires de contenu dans toute votre application :
254
299
 
255
- Vous avez **deux bons modèles** avec TanStack Start. Choisissez-en un.
300
+ #### Page de redirection racine
256
301
 
257
- Créez un dossier de segment dynamique `src/routes/$locale/` pour que vos URLs soient `/:locale/...`. Dans le layout `$locale`, validez le `params.locale`, définissez `<IntlayerProvider locale=...>`, et affichez un `<Outlet />`. Cette approche est simple, mais vous monterez le reste de vos routes sous `$locale`, et vous aurez besoin d’un arbre supplémentaire sans préfixe si vous ne souhaitez pas que la locale par défaut soit préfixée.
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";
258
306
 
259
- ---
307
+ export default function Page() {
308
+ const { locale } = useLocale();
260
309
 
261
- ## (Optionnel) Étape 8 : Mettre à jour l’URL lors du changement de langue
310
+ return <Navigate replace to={locale} />;
311
+ }
312
+ ```
262
313
 
263
- Avec le Modèle A (basepath), changer de langue signifie **naviguer vers un basepath différent** :
314
+ #### Page d'accueil localisée
264
315
 
265
- ```tsx fileName="src/components/LocaleSwitcherNavigate.tsx"
266
- import { useRouter } from "@tanstack/react-router";
267
- import { Locales, getLocalizedUrl } from "intlayer";
268
- 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";
269
320
 
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 }); // préserve l’historique
281
- setLocale(next);
282
- };
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();
283
343
 
284
344
  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>
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>
289
363
  </div>
290
364
  );
291
365
  }
292
366
  ```
293
367
 
294
- ---
368
+ > Pour en savoir plus sur le hook `useIntlayer`, consultez la [documentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/packages/react-intlayer/useIntlayer.md).
295
369
 
296
- ## (Optionnel) Étape 9 : `<html lang>` et `dir` (Document TanStack Start)
370
+ ### Étape 9 : Créer un composant de changement de langue
297
371
 
298
- TanStack Start expose un **Document** (coquille HTML racine) que vous pouvez personnaliser. Définissez `lang` et `dir` pour l’accessibilité/SEO :
372
+ Créez un composant pour permettre aux utilisateurs de changer de langue :
299
373
 
300
- ```tsx fileName="src/routes/__root.tsx" {4,15}
301
- import { Outlet, createRootRoute } from "@tanstack/react-router";
302
- import { IntlayerProvider } from "react.intlayer";
303
- 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
+ });
304
394
 
305
- function Document({
306
- locale,
307
- children,
308
- }: {
309
- locale: string;
310
- children: React.ReactNode;
311
- }) {
312
395
  return (
313
- <html lang={locale} dir={getHTMLTextDir(locale)}>
314
- <head>
315
- <meta charSet="utf-8" />
316
- <meta name="viewport" content="width=device-width, initial-scale=1" />
317
- {/* ... */}
318
- </head>
319
- <body>{children}</body>
320
- </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
+ {/* Exemple : Français (French) */}
409
+ {getLocaleName(localeItem, locale)} (
410
+ {getLocaleName(localeItem, Locales.ENGLISH)})
411
+ </option>
412
+ ))}
413
+ </select>
321
414
  );
322
415
  }
323
-
324
- export const Route = createRootRoute({
325
- component: () => (
326
- <IntlayerProvider>
327
- {/* Si vous calculez la locale côté serveur, transmettez-la dans Document ; sinon le client corrigera après l'hydratation */}
328
- <Document locale={document?.documentElement?.lang || "en"}>
329
- <Outlet />
330
- </Document>
331
- </IntlayerProvider>
332
- ),
333
- });
334
416
  ```
335
417
 
336
- Pour la correction côté client, vous pouvez aussi conserver votre petit hook :
418
+ > Pour en savoir plus sur le hook `useLocale`, consultez la [documentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/packages/react-intlayer/useLocale.md).
337
419
 
338
- ```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx"
420
+ ### Étape 10 : Ajouter la gestion des attributs HTML (optionnel)
421
+
422
+ Créez un hook pour gérer les attributs lang et dir du HTML :
423
+
424
+ ```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx" codeFormat="typescript"
425
+ // src/hooks/useI18nHTMLAttributes.tsx
426
+ import { getHTMLTextDir } from "intlayer";
339
427
  import { useEffect } from "react";
340
428
  import { useLocale } from "react-intlayer";
341
- import { getHTMLTextDir } from "intlayer";
342
429
 
343
430
  export const useI18nHTMLAttributes = () => {
344
431
  const { locale } = useLocale();
432
+
345
433
  useEffect(() => {
346
434
  document.documentElement.lang = locale;
347
435
  document.documentElement.dir = getHTMLTextDir(locale);
@@ -349,87 +437,185 @@ export const useI18nHTMLAttributes = () => {
349
437
  };
350
438
  ```
351
439
 
352
- ---
440
+ Ensuite, utilisez-le dans votre composant racine :
353
441
 
354
- ## (Optionnel) Étape 10 : Composant Link localisé
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";
355
446
 
356
- TanStack Router fournit un `<Link/>`, mais si vous avez besoin d'un simple `<a>` qui préfixe automatiquement les URL internes :
447
+ import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes"; // importer le hook
357
448
 
358
- ```tsx fileName="src/components/Link.tsx"
359
- import { getLocalizedUrl } from "intlayer";
360
- import {
361
- forwardRef,
362
- type AnchorHTMLAttributes,
363
- type DetailedHTMLProps,
364
- } from "react";
365
- import { useLocale } from "react-intlayer";
449
+ export const Route = createFileRoute("/{-$locale}")({
450
+ component: LayoutComponent,
451
+ });
366
452
 
367
- export interface LinkProps
368
- extends DetailedHTMLProps<
369
- AnchorHTMLAttributes<HTMLAnchorElement>,
370
- HTMLAnchorElement
371
- > {}
372
-
373
- const isExternal = (href?: string) => /^https?:\/\//.test(href ?? "");
374
-
375
- export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
376
- ({ href, children, ...props }, ref) => {
377
- const { locale } = useLocale();
378
- const hrefI18n =
379
- href && !isExternal(href) ? getLocalizedUrl(href, locale) : href;
380
- return (
381
- <a href={hrefI18n} ref={ref} {...props}>
382
- {children}
383
- </a>
384
- );
385
- }
386
- );
387
- Link.displayName = "Link";
453
+ function LayoutComponent() {
454
+ useI18nHTMLAttributes(); // ajouter cette ligne
455
+
456
+ const { locale } = Route.useParams();
457
+
458
+ return (
459
+ <IntlayerProvider locale={locale}>
460
+ <Outlet />
461
+ </IntlayerProvider>
462
+ );
463
+ }
388
464
  ```
389
465
 
390
- > Si vous utilisez le Modèle A (basepath), le `<Link to="/about" />` de TanStack résout déjà vers `/fr/about` via `basepath`, donc un lien personnalisé est optionnel.
466
+ ### Étape 11 : Construisez et lancez votre application
391
467
 
392
- ---
468
+ Construisez les dictionnaires de contenu et lancez votre application :
393
469
 
394
- ## TypeScript
470
+ ```bash packageManager="npm"
471
+ # Construire les dictionnaires Intlayer
472
+ npm run intlayer:build
473
+
474
+ # Démarrer le serveur de développement
475
+ npm run dev
476
+ ```
395
477
 
396
- Inclure les types générés par Intlayer :
478
+ ```bash packageManager="pnpm"
479
+ # Construire les dictionnaires Intlayer
480
+ pnpm intlayer:build
481
+
482
+ # Démarrer le serveur de développement
483
+ pnpm dev
484
+ ```
485
+
486
+ ```bash packageManager="yarn"
487
+ # Construire les dictionnaires Intlayer
488
+ yarn intlayer:build
489
+
490
+ # Démarrer le serveur de développement
491
+ yarn dev
492
+ ```
493
+
494
+ ### Étape 12 : Configurer TypeScript (Optionnel)
495
+
496
+ Intlayer utilise l'augmentation de module pour bénéficier de TypeScript et renforcer votre base de code.
497
+
498
+ Assurez-vous que votre configuration TypeScript inclut les types générés automatiquement :
397
499
 
398
500
  ```json5 fileName="tsconfig.json"
399
501
  {
400
- "include": ["src", ".intlayer/**/*.ts"],
502
+ compilerOptions: {
503
+ // ... vos configurations TypeScript existantes
504
+ },
505
+ include: [
506
+ // ... vos inclusions existantes
507
+ ".intlayer/**/*.ts", // Inclure les types générés automatiquement
508
+ ],
401
509
  }
402
510
  ```
403
511
 
404
- ---
512
+ ### Configuration Git
405
513
 
406
- ## Git
514
+ Il est recommandé d'ignorer les fichiers générés par Intlayer. Cela vous permet d'éviter de les commettre dans votre dépôt Git.
407
515
 
408
- Ignorer les artefacts générés par Intlayer :
516
+ Pour ce faire, vous pouvez ajouter les instructions suivantes dans votre fichier `.gitignore` :
409
517
 
410
- ```gitignore
518
+ ```plaintext fileName=".gitignore"
519
+ # Ignorer les fichiers générés par Intlayer
411
520
  .intlayer
412
521
  ```
413
522
 
414
523
  ---
415
524
 
525
+ ### Étape 13 : Créer une redirection (Optionnel)
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
+ // Rediriger vers la locale par défaut si aucune locale n'est présente dans l'URL lorsque prefixDefault est vrai
537
+ if (selectedLocale === defaultLocale && !locale && prefixDefault) {
538
+ return <Navigate replace to={defaultLocale} />;
539
+ }
540
+
541
+ // Rediriger vers la locale sélectionnée si la locale dans l'URL ne correspond pas à la locale sélectionnée
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
+ ## Déploiement en Production
555
+
556
+ Lors du déploiement de votre application :
557
+
558
+ 1. **Construisez votre application :**
559
+
560
+ ```bash
561
+ npm run build
562
+ ```
563
+
564
+ 2. **Générez les dictionnaires Intlayer :**
565
+
566
+ ```bash
567
+ npm run intlayer:build
568
+ ```
569
+
570
+ 3. **Déplacez `vite-intlayer` dans les dépendances** si vous utilisez le middleware en production :
571
+ ```bash
572
+ npm install vite-intlayer --save
573
+ ```
574
+
575
+ Votre application prendra désormais en charge :
576
+
577
+ - **Structure des URL** : `/en`, `/en/about`, `/tr`, `/tr/about`
578
+ - **Détection automatique de la langue** basée sur les préférences du navigateur
579
+ - **Routage sensible à la langue** avec Tanstack Start
580
+ - **Support TypeScript** avec des types générés automatiquement
581
+ - **Rendu côté serveur** avec une gestion correcte de la langue
582
+
416
583
  ## Extension VS Code
417
584
 
418
- - **Extension Intlayer pour VS Code** autocomplétion, erreurs, aperçus en ligne, actions rapides.
419
- Marketplace : `intlayer.intlayer-vs-code-extension`
585
+ Pour améliorer votre expérience de développement avec Intlayer, vous pouvez installer l’extension officielle **Intlayer VS Code Extension**.
586
+
587
+ [Installer depuis le Marketplace VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
588
+
589
+ Cette extension offre :
590
+
591
+ - **Autocomplétion** pour les clés de traduction.
592
+ - **Détection d’erreurs en temps réel** pour les traductions manquantes.
593
+ - **Aperçus en ligne** du contenu traduit.
594
+ - **Actions rapides** pour créer et mettre à jour facilement les traductions.
595
+
596
+ Pour plus de détails sur l’utilisation de l’extension, consultez la [documentation de l’extension Intlayer VS Code](https://intlayer.org/doc/vs-code-extension).
420
597
 
421
598
  ---
422
599
 
423
- ## Aller Plus Loin
600
+ ## Aller plus loin
424
601
 
425
- - Éditeur Visuel
426
- - Mode CMS
427
- - Détection de la locale à la périphérie / adaptateurs
602
+ Pour aller plus loin, vous pouvez implémenter l’[éditeur visuel](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_visual_editor.md) ou externaliser votre contenu en utilisant le [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_CMS.md).
428
603
 
429
604
  ---
430
605
 
431
- ## Historique de la Documentation
606
+ ## Références de la documentation
607
+
608
+ - [Documentation Intlayer](https://intlayer.org)
609
+ - [Documentation Tanstack Start](https://reactrouter.com/)
610
+ - [Hook useIntlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/packages/react-intlayer/useIntlayer.md)
611
+ - [Hook useLocale](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/packages/react-intlayer/useLocale.md)
612
+ - [Déclaration de contenu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/get_started.md)
613
+ - [Configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md)
614
+
615
+ Ce guide complet vous fournit tout ce dont vous avez besoin pour intégrer Intlayer avec Tanstack Start afin de créer une application entièrement internationalisée avec un routage sensible à la locale et une prise en charge de TypeScript.
616
+
617
+ ## Historique de la documentation
432
618
 
433
- | Version | Date | Modifications |
434
- | ------- | ---------- | --------------------------------- |
435
- | 1.0.0 | 2025-08-11 | Adaptation TanStack Start ajoutée |
619
+ | Version | Date | Modifications |
620
+ | ------- | ---------- | ------------------------- |
621
+ | 5.8.1 | 2025-09-09 | Ajout pour Tanstack Start |