@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,369 +1,437 @@
1
1
  ---
2
- createdAt: 2025-08-11
3
- updatedAt: 2025-08-11
4
- title: Iniziare con Intlayer in TanStack Start (React)
5
- description: Aggiungi l'internazionalizzazione alla tua app TanStack Start usando Intlayer-dizionari a livello di componente, URL localizzati e metadati ottimizzati per SEO.
2
+ createdAt: 2025-09-09
3
+ updatedAt: 2025-09-09
4
+ title: Iniziare con Intlayer in Tanstack Start
5
+ description: Scopri come aggiungere l'internazionalizzazione (i18n) alla tua applicazione Tanstack Start utilizzando Intlayer. Segui questa guida completa per rendere la tua app multilingue con il routing consapevole della localizzazione.
6
6
  keywords:
7
7
  - Internazionalizzazione
8
8
  - Documentazione
9
9
  - Intlayer
10
- - TanStack Start
11
- - TanStack Router
10
+ - Tanstack Start
12
11
  - React
13
12
  - i18n
14
- - JavaScript
13
+ - TypeScript
14
+ - Routing 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
- # Iniziare con l'internazionalizzazione (i18n) usando Intlayer e TanStack Start (React)
24
+ # Iniziare con l'internazionalizzazione (i18n) usando Intlayer e Tanstack Start
25
+
26
+ Questa guida dimostra come integrare **Intlayer** per un'internazionalizzazione senza soluzione di continuità nei progetti Tanstack Start con routing consapevole della localizzazione, supporto TypeScript e pratiche di sviluppo moderne.
22
27
 
23
28
  ## Cos'è Intlayer?
24
29
 
25
- **Intlayer** è un toolkit open-source per l'internazionalizzazione (i18n) di app React. Ti offre:
30
+ **Intlayer** è una libreria innovativa e open-source per l'internazionalizzazione (i18n) progettata per semplificare il supporto multilingue nelle moderne applicazioni web.
26
31
 
27
- - **Dizionari locali al componente** con sicurezza TypeScript.
28
- - **Metadati e rotte dinamiche** (pronte per SEO).
29
- - **Cambio della lingua a runtime** (e helper per rilevare/persistere le lingue).
30
- - **Plugin Vite** per trasformazioni in fase di build + esperienza di sviluppo (DX).
32
+ Con Intlayer, puoi:
31
33
 
32
- Questa guida mostra come integrare Intlayer in un progetto **TanStack Start** (che utilizza Vite sotto il cofano e TanStack Router per il routing/SSR).
34
+ - **Gestire facilmente le traduzioni** utilizzando dizionari dichiarativi a livello di componente.
35
+ - **Localizzare dinamicamente i metadata**, le rotte e i contenuti.
36
+ - **Garantire il supporto TypeScript** con tipi autogenerati, migliorando l'autocompletamento e il rilevamento degli errori.
37
+ - **Beneficiare di funzionalità avanzate**, come il rilevamento e il cambio dinamico della localizzazione.
38
+ - **Abilitare il routing consapevole della localizzazione** con il sistema di routing basato su file di Tanstack Start.
33
39
 
34
40
  ---
35
41
 
36
- ## Passo 1: Installare le dipendenze
42
+ ## Guida passo-passo per configurare Intlayer in un'applicazione Tanstack Start
37
43
 
38
- ```bash
39
- # npm
40
- npm i intlayer react-intlayer
41
- npm i -D vite-intlayer
44
+ ### Passo 1: Creare il progetto
42
45
 
43
- # pnpm
44
- pnpm add intlayer react-intlayer
45
- pnpm add -D vite-intlayer
46
+ Inizia creando un nuovo progetto TanStack Start seguendo la guida [Start new project](https://tanstack.com/start/latest/docs/framework/react/quick-start) sul sito di TanStack Start.
47
+
48
+ ### Passo 2: Installare i pacchetti Intlayer
46
49
 
47
- # yarn
48
- yarn add intlayer react-intlayer
49
- yarn add -D vite-intlayer
50
+ Installa i pacchetti necessari utilizzando il tuo gestore di pacchetti preferito:
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 (configurazione, dizionari, CLI/trasformazioni).
53
- - **react-intlayer**: `<IntlayerProvider>` + hook per React.
54
- - **vite-intlayer**: plugin Vite, più middleware opzionale per il rilevamento/reindirizzamento della lingua (funziona in dev e SSR/preview; spostare in `dependencies` per SSR in produzione).
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
+ - **intlayer**
65
+
66
+ Il pacchetto principale che fornisce strumenti di internazionalizzazione per la gestione della configurazione, la traduzione, la [dichiarazione dei contenuti](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/dictionary/get_started.md), la traspilazione e i [comandi CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/intlayer_cli.md).
67
+
68
+ - **react-intlayer**
69
+ Il pacchetto che integra Intlayer con le applicazioni React. Fornisce provider di contesto e hook per l'internazionalizzazione in React.
70
+
71
+ - **vite-intlayer**
72
+ Include il plugin Vite per integrare Intlayer con il [bundler Vite](https://vite.dev/guide/why.html#why-bundle-for-production), oltre a middleware per rilevare la localizzazione preferita dall'utente, gestire i cookie e gestire il reindirizzamento degli URL.
57
73
 
58
- ## Passo 2: Configurare Intlayer
74
+ ### Passo 3: Configurazione del tuo progetto
59
75
 
60
- Crea `intlayer.config.ts` nella root del tuo progetto:
76
+ Crea un file di configurazione per configurare le lingue della tua applicazione:
61
77
 
62
- ```ts fileName="intlayer.config.ts"
63
- import { Locales, type IntlayerConfig } from "intlayer";
78
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
79
+ import type { IntlayerConfig } from "intlayer";
80
+
81
+ import { Locales } from "intlayer";
64
82
 
65
83
  const config: IntlayerConfig = {
66
84
  internationalization: {
67
- locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
68
85
  defaultLocale: Locales.ENGLISH,
86
+ locales: [
87
+ Locales.ENGLISH,
88
+ Locales.FRENCH,
89
+ Locales.SPANISH,
90
+ // Le tue altre lingue
91
+ ],
69
92
  },
70
- // Puoi anche modificare: contentDir, contentFileExtensions, opzioni del middleware, ecc.
71
93
  };
72
94
 
73
95
  export default config;
74
96
  ```
75
97
 
76
- Le varianti CommonJS/ESM sono identiche al tuo documento originale se preferisci `cjs`/`mjs`.
98
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
99
+ import { Locales } from "intlayer";
77
100
 
78
- > Riferimento completo alla configurazione: vedi la documentazione di configurazione di Intlayer.
101
+ /** @type {import('intlayer').IntlayerConfig} */
102
+ const config = {
103
+ internationalization: {
104
+ defaultLocale: Locales.ENGLISH,
105
+ locales: [
106
+ Locales.ENGLISH,
107
+ Locales.FRENCH,
108
+ Locales.SPANISH,
109
+ // Le tue altre lingue
110
+ ],
111
+ },
112
+ };
79
113
 
80
- ---
114
+ export default config;
115
+ ```
81
116
 
82
- ## Passo 3: Aggiungere il Plugin Vite (e middleware opzionale)
117
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
118
+ const { Locales } = require("intlayer");
83
119
 
84
- **TanStack Start usa Vite**, quindi aggiungi il/i plugin di Intlayer al tuo `vite.config.ts`:
120
+ /** @type {import('intlayer').IntlayerConfig} */
121
+ const config = {
122
+ internationalization: {
123
+ defaultLocale: Locales.ENGLISH,
124
+ locales: [
125
+ Locales.ENGLISH,
126
+ Locales.FRENCH,
127
+ Locales.SPANISH,
128
+ // Le tue altre lingue
129
+ ],
130
+ },
131
+ };
132
+
133
+ module.exports = config;
134
+ ```
85
135
 
86
- ```ts fileName="vite.config.ts"
136
+ > Attraverso questo file di configurazione, puoi impostare URL localizzati, reindirizzamenti middleware, nomi dei cookie, la posizione e l'estensione delle tue dichiarazioni di contenuto, disabilitare i log di Intlayer nella console e altro ancora. Per un elenco completo dei parametri disponibili, consulta la [documentazione della configurazione](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/configuration.md).
137
+
138
+ ### Passo 4: Integra Intlayer nella tua configurazione Vite
139
+
140
+ Aggiungi il plugin intlayer nella tua configurazione:
141
+
142
+ ```typescript fileName="vite.config.ts" codeFormat="typescript"
143
+ import { reactRouter } from "@react-router/dev/vite";
87
144
  import { defineConfig } from "vite";
88
- import react from "@vitejs/plugin-react-swc";
89
- import { intlayerPlugin, intLayerMiddlewarePlugin } from "vite-intlayer";
145
+ import { intlayerMiddlewarePlugin, intlayerPlugin } from "vite-intlayer";
146
+ import tsconfigPaths from "vite-tsconfig-paths";
90
147
 
91
148
  export default defineConfig({
92
149
  plugins: [
93
- react(),
150
+ reactRouter(),
151
+ tsconfigPaths(),
94
152
  intlayerPlugin(),
95
- // Opzionale ma consigliato per il rilevamento della lingua, cookie e reindirizzamenti:
96
- intLayerMiddlewarePlugin(),
153
+ intlayerMiddlewarePlugin(),
97
154
  ],
98
155
  });
99
156
  ```
100
157
 
101
- > Se distribuisci SSR, sposta `vite-intlayer` nelle `dependencies` affinché il middleware funzioni in produzione.
158
+ > Il plugin Vite `intlayerPlugin()` viene utilizzato per integrare Intlayer con Vite. Garantisce la creazione dei file di dichiarazione dei contenuti e li monitora in modalità sviluppo. Definisce le variabili d'ambiente di Intlayer all'interno dell'applicazione Vite. Inoltre, fornisce alias per ottimizzare le prestazioni.
102
159
 
103
- ---
160
+ ### Passo 5: Crea i Componenti di Layout
161
+
162
+ Configura il tuo layout principale e i layout specifici per locale:
163
+
164
+ #### Layout Principale
165
+
166
+ ```tsx fileName="src/routes/{-$locale}/route.tsx" codeFormat="typescript"
167
+ // src/routes/{-$locale}/route.tsx
168
+ import { createFileRoute, Navigate, Outlet } from "@tanstack/react-router";
169
+ import { configuration } from "intlayer";
170
+ import { IntlayerProvider, useLocale } from "react-intlayer";
171
+
172
+ import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes";
173
+
174
+ export const Route = createFileRoute("/{-$locale}")({
175
+ component: LayoutComponent,
176
+ });
177
+
178
+ function LayoutComponent() {
179
+ const { locale } = Route.useParams();
180
+
181
+ return (
182
+ <IntlayerProvider locale={locale}>
183
+ <Outlet />
184
+ </IntlayerProvider>
185
+ );
186
+ }
187
+ ```
188
+
189
+ ### Passo 6: Dichiarare il Tuo Contenuto
104
190
 
105
- ## Passo 4: Dichiara il tuo contenuto
191
+ Crea e gestisci le tue dichiarazioni di contenuto per memorizzare le traduzioni:
106
192
 
107
- Posiziona i tuoi dizionari ovunque sotto `./src` (default `contentDir`). Esempio:
193
+ ```tsx fileName="src/contents/page.content.ts" contentDeclarationFormat="typescript"
194
+ import type { Dictionary } from "intlayer";
108
195
 
109
- ```tsx fileName="src/app.content.tsx"
110
- import { t, type Dictionary } from "intlayer";
111
- import type { ReactNode } from "react";
196
+ import { t } from "intlayer";
112
197
 
113
198
  const appContent = {
114
- key: "app",
115
199
  content: {
116
- viteLogo: t({
117
- it: "Logo Vite",
118
- en: "Vite logo",
119
- fr: "Logo Vite",
120
- es: "Logo Vite",
121
- }),
122
- reactLogo: t({
123
- it: "Logo React",
124
- en: "React logo",
125
- fr: "Logo React",
126
- es: "Logo React",
127
- }),
200
+ links: {
201
+ about: t({
202
+ en: "About",
203
+ es: "Acerca de",
204
+ fr: "À propos",
205
+ }),
206
+ home: t({
207
+ en: "Home",
208
+ es: "Inicio",
209
+ fr: "Accueil",
210
+ }),
211
+ },
212
+ meta: {
213
+ description: t({
214
+ en: "Questo è un esempio di utilizzo di Intlayer con TanStack Router",
215
+ es: "Este es un ejemplo de uso de Intlayer con TanStack Router",
216
+ fr: "Ceci est un exemple d'utilisation d'Intlayer avec TanStack Router",
217
+ }),
218
+ },
128
219
  title: t({
129
- it: "TanStack Start + React",
130
- en: "TanStack Start + React",
131
- fr: "TanStack Start + React",
132
- es: "TanStack Start + React",
133
- }),
134
- count: t({
135
- it: "il conteggio è ",
136
- en: "count is ",
137
- fr: "le compte est ",
138
- es: "el recuento es ",
139
- }),
140
- edit: t<ReactNode>({
141
- it: (
142
- <>
143
- Modifica <code>src/routes/index.tsx</code> e salva per testare HMR
144
- </>
145
- ),
146
- en: (
147
- <>
148
- Edit <code>src/routes/index.tsx</code> and save to test HMR
149
- </>
150
- ),
151
- fr: (
152
- <>
153
- Éditez <code>src/routes/index.tsx</code> et enregistrez pour tester
154
- HMR
155
- </>
156
- ),
157
- es: (
158
- <>
159
- Edita <code>src/routes/index.tsx</code> y guarda para probar HMR
160
- </>
161
- ),
162
- }),
163
- readTheDocs: t({
164
- it: "Clicca sui loghi per saperne di più",
165
- en: "Click the logos to learn more",
166
- fr: "Cliquez sur les logos pour en savoir plus",
167
- es: "Haz clic en los logotipos para saber más",
220
+ en: "Benvenuto in Intlayer + TanStack Router",
221
+ es: "Bienvenido a Intlayer + TanStack Router",
222
+ fr: "Bienvenue à Intlayer + TanStack Router",
168
223
  }),
169
224
  },
225
+ key: "app",
170
226
  } satisfies Dictionary;
171
227
 
172
228
  export default appContent;
173
229
  ```
174
230
 
175
- Le varianti JSON/ESM/CJS funzionano allo stesso modo del tuo documento originale.
231
+ > Le dichiarazioni di contenuto possono essere definite ovunque nella tua applicazione non appena vengono incluse nella directory `contentDir` (per impostazione predefinita, `./app`). E devono corrispondere all'estensione del file di dichiarazione del contenuto (per impostazione predefinita, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
176
232
 
177
- > Contenuto TSX? Non dimenticare `import React from "react"` se la tua configurazione lo richiede.
233
+ > Per maggiori dettagli, consulta la [documentazione sulla dichiarazione del contenuto](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/dictionary/get_started.md).
178
234
 
179
- ---
235
+ ### Passo 7: Crea Componenti e Hook Sensibili alla Localizzazione
180
236
 
181
- ## Passo 5: Avvolgi TanStack Start con Intlayer
237
+ Crea un componente `LocalizedLink` per una navigazione sensibile alla localizzazione:
182
238
 
183
- Con TanStack Start, la tua **root route** è il posto giusto per impostare i provider.
239
+ ```tsx fileName="src/components/localized-link.tsx" codeFormat="typescript"
240
+ // src/components/localized-link.tsx
241
+ // eslint-disable-next-line no-restricted-imports
242
+ import { Link, type LinkProps } from "@tanstack/react-router";
243
+ import { getLocalizedUrl } from "intlayer";
244
+ import { useLocale } from "react-intlayer";
184
245
 
185
- ```tsx fileName="src/routes/__root.tsx"
186
- import {
187
- Outlet,
188
- createRootRoute,
189
- Link as RouterLink,
190
- } from "@tanstack/react-router";
191
- import { IntlayerProvider, useIntlayer } from "react-intlayer";
192
-
193
- function AppShell() {
194
- // Esempio di utilizzo di un dizionario a livello superiore:
195
- const content = useIntlayer("app");
246
+ type LocalizedLinkProps = {
247
+ to: string;
248
+ } & Omit<LinkProps, "to">;
196
249
 
197
- return (
198
- <div>
199
- <nav className="flex gap-3 p-3">
200
- <RouterLink to="/">Home</RouterLink>
201
- <RouterLink to="/about">Informazioni</RouterLink>
202
- </nav>
203
- <main className="p-6">
204
- <h1>{content.title}</h1>
205
- <Outlet />
206
- </main>
207
- </div>
208
- );
209
- }
250
+ export function LocalizedLink(props: LocalizedLinkProps) {
251
+ const { locale } = useLocale();
210
252
 
211
- export const Route = createRootRoute({
212
- component: () => (
213
- <IntlayerProvider>
214
- <AppShell />
215
- </IntlayerProvider>
216
- ),
217
- });
218
- ```
253
+ const isExternal = (to: string) => {
254
+ return /^(https?:)?\/\//.test(to);
255
+ };
219
256
 
220
- Quindi usa i tuoi contenuti nelle pagine:
257
+ const to = isExternal(props.to)
258
+ ? props.to
259
+ : getLocalizedUrl(props.to, locale);
221
260
 
222
- ```tsx fileName="src/routes/index.tsx"
223
- import { createFileRoute } from "@tanstack/react-router";
224
- import { useIntlayer } from "react-intlayer";
225
- import reactLogo from "../assets/react.svg";
226
-
227
- export const Route = createFileRoute("/")({
228
- component: () => {
229
- const content = useIntlayer("app");
230
- return (
231
- <>
232
- <button>{content.count}0</button>
233
- <p>{content.edit}</p>
234
- <img
235
- src={reactLogo}
236
- alt={content.reactLogo.value}
237
- width={48}
238
- height={48}
239
- />
240
- <p className="opacity-70">{content.readTheDocs}</p>
241
- </>
242
- );
243
- },
244
- });
261
+ return <Link {...props} to={to as LinkProps["to"]} />;
262
+ }
245
263
  ```
246
264
 
247
- > Gli attributi stringa (`alt`, `title`, `aria-label`, …) necessitano di `.value`:
248
- >
249
- > ```jsx
250
- > <img alt={c.reactLogo.value} />
251
- > ```
265
+ Crea un hook `useLocalizedNavigate` per la navigazione programmata:
252
266
 
253
- ---
267
+ ```tsx fileName="src/hooks/useLocalizedNavigate.tsx" codeFormat="typescript"
268
+ // src/hooks/useLocalizedNavigate.tsx
269
+ // eslint-disable-next-line no-restricted-imports
270
+ import { NavigateOptions, useNavigate } from "@tanstack/react-router";
271
+ import { getLocalizedUrl } from "intlayer";
272
+ import { useLocale } from "react-intlayer";
254
273
 
255
- ## (Opzionale) Passo 6: Cambio della lingua (Client)
274
+ type LocalizedNavigateOptions = {
275
+ to: string;
276
+ } & Omit<NavigateOptions, "to">;
256
277
 
257
- ```tsx fileName="src/components/LocaleSwitcher.tsx"
258
- import { Locales } from "intlayer";
259
- import { useLocale } from "react-intlayer";
278
+ export const useLocalizedNavigate = () => {
279
+ const navigate = useNavigate();
280
+ const { locale } = useLocale();
260
281
 
261
- export function LocaleSwitcher() {
262
- const { setLocale } = useLocale();
263
- return (
264
- <div className="flex gap-2">
265
- <button onClick={() => setLocale(Locales.ENGLISH)}>Inglese</button>
266
- <button onClick={() => setLocale(Locales.FRENCH)}>Francese</button>
267
- <button onClick={() => setLocale(Locales.SPANISH)}>Spagnolo</button>
268
- </div>
269
- );
270
- }
282
+ const isExternal = (to: string) => {
283
+ return /^(https?:)?\/\//.test(to);
284
+ };
285
+
286
+ const localizedNavigate = (options: LocalizedNavigateOptions) => {
287
+ const to = isExternal(options.to)
288
+ ? options.to
289
+ : getLocalizedUrl(options.to, locale);
290
+
291
+ navigate({ ...options, to: to as NavigateOptions["to"] });
292
+ };
293
+
294
+ return localizedNavigate;
295
+ };
271
296
  ```
272
297
 
273
- ---
298
+ ### Passo 8: Utilizzare Intlayer nelle tue Pagine
274
299
 
275
- ## (Opzionale) Passo 7: Routing Localizzato (URL SEO-friendly)
300
+ Accedi ai tuoi dizionari di contenuti in tutta l'applicazione:
276
301
 
277
- Hai **due buoni modelli** con TanStack Start. Scegline uno.
302
+ #### Pagina di Reindirizzamento Radice
278
303
 
279
- Crea una cartella segmento dinamico `src/routes/$locale/` così i tuoi URL saranno `/:locale/...`. Nel layout `$locale`, valida `params.locale`, imposta `<IntlayerProvider locale=...>`, e renderizza un `<Outlet />`. Questo approccio è semplice, ma monterai il resto delle tue rotte sotto `$locale`, e avrai bisogno di un albero extra senza prefisso se _non_ vuoi il prefisso della locale di default.
304
+ ```tsx fileName="src/routes/page.tsx" codeFormat="typescript"
305
+ // src/routes/page.tsx
306
+ import { useLocale } from "react-intlayer";
307
+ import { Navigate } from "react-router";
280
308
 
281
- ---
309
+ export default function Page() {
310
+ const { locale } = useLocale();
282
311
 
283
- ## (Opzionale) Passo 8: Aggiornare l'URL quando si cambia lingua
312
+ return <Navigate replace to={locale} />;
313
+ }
314
+ ```
284
315
 
285
- Con il Pattern A (basepath), cambiare lingua significa **navigare verso un basepath differente**:
316
+ #### Pagina Home Localizzata
286
317
 
287
- ```tsx fileName="src/components/LocaleSwitcherNavigate.tsx"
288
- import { useRouter } from "@tanstack/react-router";
289
- import { Locales, getLocalizedUrl } from "intlayer";
290
- import { useLocale } from "react-intlayer";
318
+ ```tsx fileName="src/routes/{-$locale}/index.tsx" codeFormat="typescript"
319
+ import { createFileRoute } from "@tanstack/react-router";
320
+ import { getIntlayer } from "intlayer";
321
+ import { useIntlayer } from "react-intlayer";
291
322
 
292
- export function LocaleSwitcherNavigate() {
293
- const router = useRouter();
294
- const { locale, setLocale } = useLocale();
295
-
296
- const change = async (next: Locales) => {
297
- if (next === locale) return;
298
- const nextPath = getLocalizedUrl(
299
- window.location.pathname + window.location.search,
300
- next
301
- );
302
- await router.navigate({ to: nextPath }); // preserva la cronologia
303
- setLocale(next);
304
- };
323
+ import LocaleSwitcher from "@/components/locale-switcher";
324
+ import { LocalizedLink } from "@/components/localized-link";
325
+ import { useLocalizedNavigate } from "@/hooks/useLocalizedNavigate";
326
+
327
+ export const Route = createFileRoute("/{-$locale}/")({
328
+ component: RouteComponent,
329
+ head: ({ params }) => {
330
+ const { locale } = params;
331
+ const metaContent = getIntlayer("app", locale);
332
+
333
+ return {
334
+ meta: [
335
+ { title: metaContent.title },
336
+ { content: metaContent.meta.description, name: "description" },
337
+ ],
338
+ };
339
+ },
340
+ });
341
+
342
+ function RouteComponent() {
343
+ const content = useIntlayer("app");
344
+ const navigate = useLocalizedNavigate();
305
345
 
306
346
  return (
307
- <div className="flex gap-2">
308
- <button onClick={() => change(Locales.ENGLISH)}>English</button>
309
- <button onClick={() => change(Locales.FRENCH)}>Français</button>
310
- <button onClick={() => change(Locales.SPANISH)}>Español</button>
347
+ <div className="grid place-items-center h-screen">
348
+ <div className="flex flex-col gap-4 items-center text-center">
349
+ {content.title}
350
+ <LocaleSwitcher />
351
+ <div className="flex gap-4">
352
+ <a href="/">Indice</a>
353
+ <LocalizedLink to="/">{content.links.home}</LocalizedLink>
354
+ <LocalizedLink to="/about">{content.links.about}</LocalizedLink>
355
+ </div>
356
+ <div className="flex gap-4">
357
+ <button onClick={() => navigate({ to: "/" })}>
358
+ {content.links.home}
359
+ </button>
360
+ <button onClick={() => navigate({ to: "/about" })}>
361
+ {content.links.about}
362
+ </button>
363
+ </div>
364
+ </div>
311
365
  </div>
312
366
  );
313
367
  }
314
368
  ```
315
369
 
316
- ---
370
+ > Per saperne di più sull'hook `useIntlayer`, consulta la [documentazione](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/packages/react-intlayer/useIntlayer.md).
317
371
 
318
- ## (Opzionale) Passo 9: `<html lang>` e `dir` (TanStack Start Document)
372
+ ### Passo 9: Crea un componente Locale Switcher
319
373
 
320
- TanStack Start espone un **Document** (shell HTML radice) che puoi personalizzare. Imposta `lang` e `dir` per accessibilità/SEO:
374
+ Crea un componente per permettere agli utenti di cambiare lingua:
321
375
 
322
- ```tsx fileName="src/routes/__root.tsx" {4,15}
323
- import { Outlet, createRootRoute } from "@tanstack/react-router";
324
- import { IntlayerProvider } from "react-intlayer";
325
- import { getHTMLTextDir } from "intlayer";
376
+ ```tsx fileName="src/components/locale-switcher.tsx" codeFormat="typescript"
377
+ import { useLocation } from "@tanstack/react-router";
378
+ import {
379
+ getHTMLTextDir,
380
+ getLocaleName,
381
+ getLocalizedUrl,
382
+ Locales,
383
+ } from "intlayer";
384
+ import { useIntlayer, useLocale } from "react-intlayer";
385
+
386
+ export default function LocaleSwitcher() {
387
+ const { pathname, searchStr } = useLocation();
388
+ const content = useIntlayer("locale-switcher");
389
+
390
+ const { availableLocales, locale, setLocale } = useLocale({
391
+ onLocaleChange: (newLocale) => {
392
+ const pathWithLocale = getLocalizedUrl(pathname + searchStr, newLocale);
393
+ location.replace(pathWithLocale);
394
+ },
395
+ });
326
396
 
327
- function Document({
328
- locale,
329
- children,
330
- }: {
331
- locale: string;
332
- children: React.ReactNode;
333
- }) {
334
397
  return (
335
- <html lang={locale} dir={getHTMLTextDir(locale)}>
336
- <head>
337
- <meta charSet="utf-8" />
338
- <meta name="viewport" content="width=device-width, initial-scale=1" />
339
- {/* ... */}
340
- </head>
341
- <body>{children}</body>
342
- </html>
398
+ <select
399
+ aria-label={content.label.toString()}
400
+ onChange={(e) => setLocale(e.target.value)}
401
+ value={locale}
402
+ >
403
+ {availableLocales.map((localeItem) => (
404
+ <option
405
+ dir={getHTMLTextDir(localeItem)}
406
+ key={localeItem}
407
+ lang={localeItem}
408
+ value={localeItem}
409
+ >
410
+ {/* Esempio: Français (Francese) */}
411
+ {getLocaleName(localeItem, locale)} (
412
+ {getLocaleName(localeItem, Locales.ENGLISH)})
413
+ </option>
414
+ ))}
415
+ </select>
343
416
  );
344
417
  }
345
-
346
- export const Route = createRootRoute({
347
- component: () => (
348
- <IntlayerProvider>
349
- {/* Se calcoli la locale sul server, passala a Document; altrimenti il client correggerà dopo l'idratazione */}
350
- <Document locale={document?.documentElement?.lang || "en"}>
351
- <Outlet />
352
- </Document>
353
- </IntlayerProvider>
354
- ),
355
- });
356
418
  ```
357
419
 
358
- Per la correzione lato client, puoi anche mantenere il tuo piccolo hook:
420
+ > Per saperne di più sull'hook `useLocale`, consulta la [documentazione](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/packages/react-intlayer/useLocale.md).
421
+
422
+ ### Passo 10: Aggiungere la Gestione degli Attributi HTML (Opzionale)
359
423
 
360
- ```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx"
424
+ Crea un hook per gestire gli attributi lang e dir dell'HTML:
425
+
426
+ ```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx" codeFormat="typescript"
427
+ // src/hooks/useI18nHTMLAttributes.tsx
428
+ import { getHTMLTextDir } from "intlayer";
361
429
  import { useEffect } from "react";
362
430
  import { useLocale } from "react-intlayer";
363
- import { getHTMLTextDir } from "intlayer";
364
431
 
365
432
  export const useI18nHTMLAttributes = () => {
366
433
  const { locale } = useLocale();
434
+
367
435
  useEffect(() => {
368
436
  document.documentElement.lang = locale;
369
437
  document.documentElement.dir = getHTMLTextDir(locale);
@@ -371,87 +439,185 @@ export const useI18nHTMLAttributes = () => {
371
439
  };
372
440
  ```
373
441
 
374
- ---
442
+ Quindi usalo nel tuo componente root:
375
443
 
376
- ## (Opzionale) Passo 10: Componente Link localizzato
444
+ ```tsx fileName="src/routes/{-$locale}/index.tsx" codeFormat="typescript"
445
+ import { createFileRoute, Navigate, Outlet } from "@tanstack/react-router";
446
+ import { configuration } from "intlayer";
447
+ import { IntlayerProvider, useLocale } from "react-intlayer";
377
448
 
378
- TanStack Router fornisce un `<Link/>`, ma se mai avessi bisogno di un semplice `<a>` che aggiunge automaticamente il prefisso alle URL interne:
449
+ import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes"; // importa il hook
379
450
 
380
- ```tsx fileName="src/components/Link.tsx"
381
- import { getLocalizedUrl } from "intlayer";
382
- import {
383
- forwardRef,
384
- type AnchorHTMLAttributes,
385
- type DetailedHTMLProps,
386
- } from "react";
387
- import { useLocale } from "react-intlayer";
451
+ export const Route = createFileRoute("/{-$locale}")({
452
+ component: LayoutComponent,
453
+ });
388
454
 
389
- export interface LinkProps
390
- extends DetailedHTMLProps<
391
- AnchorHTMLAttributes<HTMLAnchorElement>,
392
- HTMLAnchorElement
393
- > {}
394
-
395
- const isExternal = (href?: string) => /^https?:\/\//.test(href ?? "");
396
-
397
- export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
398
- ({ href, children, ...props }, ref) => {
399
- const { locale } = useLocale();
400
- const hrefI18n =
401
- href && !isExternal(href) ? getLocalizedUrl(href, locale) : href;
402
- return (
403
- <a href={hrefI18n} ref={ref} {...props}>
404
- {children}
405
- </a>
406
- );
407
- }
408
- );
409
- Link.displayName = "Link";
455
+ function LayoutComponent() {
456
+ useI18nHTMLAttributes(); // aggiungi questa riga
457
+
458
+ const { locale } = Route.useParams();
459
+
460
+ return (
461
+ <IntlayerProvider locale={locale}>
462
+ <Outlet />
463
+ </IntlayerProvider>
464
+ );
465
+ }
410
466
  ```
411
467
 
412
- > Se usi il Pattern A (basepath), il `<Link to="/about" />` di TanStack risolve già in `/fr/about` tramite `basepath`, quindi un link personalizzato è opzionale.
468
+ ### Passo 11: Compila ed Esegui la Tua Applicazione
413
469
 
414
- ---
470
+ Compila i dizionari di contenuto ed esegui la tua applicazione:
415
471
 
416
- ## TypeScript
472
+ ```bash packageManager="npm"
473
+ # Compila i dizionari di Intlayer
474
+ npm run intlayer:build
417
475
 
418
- Includi i tipi generati da Intlayer:
476
+ # Avvia il server di sviluppo
477
+ npm run dev
478
+ ```
479
+
480
+ ```bash packageManager="pnpm"
481
+ # Compila i dizionari di Intlayer
482
+ pnpm intlayer:build
483
+
484
+ # Avvia il server di sviluppo
485
+ pnpm dev
486
+ ```
487
+
488
+ ```bash packageManager="yarn"
489
+ # Compila i dizionari di Intlayer
490
+ yarn intlayer:build
491
+
492
+ # Avvia il server di sviluppo
493
+ yarn dev
494
+ ```
495
+
496
+ ### Passo 12: Configura TypeScript (Opzionale)
497
+
498
+ Intlayer utilizza l'augmentazione dei moduli per sfruttare i vantaggi di TypeScript e rendere il tuo codice più robusto.
499
+
500
+ Assicurati che la tua configurazione di TypeScript includa i tipi generati automaticamente:
419
501
 
420
502
  ```json5 fileName="tsconfig.json"
421
503
  {
422
- "include": ["src", ".intlayer/**/*.ts"],
504
+ compilerOptions: {
505
+ // ... le tue configurazioni TypeScript esistenti
506
+ },
507
+ include: [
508
+ // ... i tuoi include esistenti
509
+ ".intlayer/**/*.ts", // Includi i tipi generati automaticamente
510
+ ],
423
511
  }
424
512
  ```
425
513
 
426
- ---
514
+ ### Configurazione Git
427
515
 
428
- ## Git
516
+ Si consiglia di ignorare i file generati da Intlayer. Questo ti permette di evitare di committarli nel tuo repository Git.
429
517
 
430
- Ignora gli artefatti generati da Intlayer:
518
+ Per farlo, puoi aggiungere le seguenti istruzioni al tuo file `.gitignore`:
431
519
 
432
- ```gitignore
520
+ ```plaintext fileName=".gitignore"
521
+ # Ignora i file generati da Intlayer
433
522
  .intlayer
434
523
  ```
435
524
 
436
525
  ---
437
526
 
527
+ ### Passo 13: Crea un Reindirizzamento (Opzionale)
528
+
529
+ ```typescript fileName="src/routes/{-$locale}/rotue.tsx" codeFormat="typescript"
530
+ function LayoutComponent() {
531
+ useI18nHTMLAttributes();
532
+
533
+ const { locale } = Route.useParams();
534
+ const { locale: selectedLocale } = useLocale();
535
+ const { defaultLocale } = configuration.internationalization;
536
+ const { prefixDefault } = configuration.middleware;
537
+
538
+ // Reindirizza alla lingua predefinita se non è presente alcuna lingua nell'URL quando prefixDefault è true
539
+ if (selectedLocale === defaultLocale && !locale && prefixDefault) {
540
+ return <Navigate replace to={defaultLocale} />;
541
+ }
542
+
543
+ // Reindirizza alla lingua selezionata se la lingua nell'URL non corrisponde a quella selezionata
544
+ if (selectedLocale !== defaultLocale && !locale) {
545
+ return <Navigate replace to={selectedLocale} />;
546
+ }
547
+
548
+ return (
549
+ <IntlayerProvider locale={locale}>
550
+ <Outlet />
551
+ </IntlayerProvider>
552
+ );
553
+ }
554
+ ```
555
+
556
+ ## Distribuzione in Produzione
557
+
558
+ Quando distribuisci la tua applicazione:
559
+
560
+ 1. **Compila la tua applicazione:**
561
+
562
+ ```bash
563
+ npm run build
564
+ ```
565
+
566
+ 2. **Compila i dizionari di Intlayer:**
567
+
568
+ ```bash
569
+ npm run intlayer:build
570
+ ```
571
+
572
+ 3. **Sposta `vite-intlayer` nelle dipendenze** se usi il middleware in produzione:
573
+ ```bash
574
+ npm install vite-intlayer --save
575
+ ```
576
+
577
+ La tua applicazione supporterà ora:
578
+
579
+ - **Struttura URL**: `/en`, `/en/about`, `/tr`, `/tr/about`
580
+ - **Rilevamento automatico della lingua** basato sulle preferenze del browser
581
+ - **Routing consapevole della lingua** con Tanstack Start
582
+ - **Supporto TypeScript** con tipi generati automaticamente
583
+ - **Rendering lato server** con gestione corretta della lingua
584
+
438
585
  ## Estensione VS Code
439
586
 
440
- - **Estensione Intlayer per VS Code** completamento automatico, errori, anteprime inline, azioni rapide.
441
- Marketplace: `intlayer.intlayer-vs-code-extension`
587
+ Per migliorare la tua esperienza di sviluppo con Intlayer, puoi installare l'**Estensione Intlayer per VS Code** ufficiale.
588
+
589
+ [Installa dal Marketplace di VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
590
+
591
+ Questa estensione offre:
592
+
593
+ - **Completamento automatico** per le chiavi di traduzione.
594
+ - **Rilevamento errori in tempo reale** per traduzioni mancanti.
595
+ - **Anteprime inline** dei contenuti tradotti.
596
+ - **Azioni rapide** per creare e aggiornare facilmente le traduzioni.
597
+
598
+ Per maggiori dettagli su come utilizzare l'estensione, consulta la [documentazione dell'Estensione Intlayer per VS Code](https://intlayer.org/doc/vs-code-extension).
442
599
 
443
600
  ---
444
601
 
445
- ## Approfondimenti
602
+ ## Vai oltre
446
603
 
447
- - Editor Visuale
448
- - Modalità CMS
449
- - Rilevamento della lingua al confine / adattatori
604
+ Per andare oltre, puoi implementare l'[editor visuale](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/intlayer_visual_editor.md) oppure esternalizzare i tuoi contenuti utilizzando il [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/intlayer_CMS.md).
450
605
 
451
606
  ---
452
607
 
453
- ## Cronologia Documentazione
608
+ ## Riferimenti alla Documentazione
609
+
610
+ - [Documentazione Intlayer](https://intlayer.org)
611
+ - [Documentazione Tanstack Start](https://reactrouter.com/)
612
+ - [Hook useIntlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/packages/react-intlayer/useIntlayer.md)
613
+ - [Hook useLocale](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/packages/react-intlayer/useLocale.md)
614
+ - [Dichiarazione dei Contenuti](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/dictionary/get_started.md)
615
+ - [Configurazione](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/configuration.md)
616
+
617
+ Questa guida completa fornisce tutto il necessario per integrare Intlayer con Tanstack Start per un'applicazione completamente internazionalizzata con routing consapevole della localizzazione e supporto TypeScript.
618
+
619
+ ## Cronologia della Documentazione
454
620
 
455
- | Versione | Data | Modifiche |
456
- | -------- | ---------- | ------------------------------------- |
457
- | 1.0.0 | 2025-08-11 | Aggiunta l'adattamento TanStack Start |
621
+ | Versione | Data | Modifiche |
622
+ | -------- | ---------- | --------------------------- |
623
+ | 5.8.1 | 2025-09-09 | Aggiunto per Tanstack Start |