@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,440 @@
1
1
  ---
2
- createdAt: 2025-08-11
3
- updatedAt: 2025-08-11
4
- title: Começando com Intlayer no TanStack Start (React)
5
- description: Adicione i18n ao seu app TanStack Start usando Intlayer-dicionários a nível de componente, URLs localizadas e metadados otimizados para SEO.
2
+ createdAt: 2025-09-09
3
+ updatedAt: 2025-09-09
4
+ title: Começando com Intlayer no Tanstack Start
5
+ description: Aprenda como adicionar internacionalização (i18n) à sua aplicação Tanstack Start usando Intlayer. Siga este guia completo para tornar seu app multilíngue com roteamento sensível ao locale.
6
6
  keywords:
7
7
  - Internacionalização
8
8
  - Documentação
9
9
  - Intlayer
10
- - TanStack Start
11
- - TanStack Router
10
+ - Tanstack Start
12
11
  - React
13
12
  - i18n
14
- - JavaScript
13
+ - TypeScript
14
+ - Roteamento por 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
- # Começando a Internacionalizar (i18n) com Intlayer e TanStack Start (React)
24
+ # Começando a Internacionalizar (i18n) com Intlayer e Tanstack Start
22
25
 
23
- ## O que é Intlayer?
26
+ Este guia demonstra como integrar o **Intlayer** para uma internacionalização perfeita em projetos Tanstack Start com roteamento sensível ao locale, suporte a TypeScript e práticas modernas de desenvolvimento.
24
27
 
25
- **Intlayer** é um kit de ferramentas i18n open-source para apps React. Ele oferece:
28
+ ## O que é o Intlayer?
26
29
 
27
- - **Dicionários locais por componente** com segurança em TypeScript.
28
- - **Metadados e rotas dinâmicas** (prontas para SEO).
29
- - **Troca de localidade em tempo de execução** (e auxiliares para detectar/persistir localidades).
30
- - **Plugin Vite** para transformações em tempo de build + experiência de desenvolvimento (DX).
30
+ **Intlayer** é uma biblioteca inovadora e open-source de internacionalização (i18n) projetada para simplificar o suporte multilíngue em aplicações web modernas.
31
31
 
32
- Este guia mostra como integrar o Intlayer em um projeto **TanStack Start** (que usa Vite por baixo dos panos e TanStack Router para roteamento/SSR).
32
+ Com o Intlayer, você pode:
33
+
34
+ - **Gerenciar traduções facilmente** usando dicionários declarativos no nível do componente.
35
+ - **Localizar dinamicamente metadados**, rotas e conteúdo.
36
+ - **Garantir suporte a TypeScript** com tipos gerados automaticamente, melhorando o autocompletar e a detecção de erros.
37
+ - **Beneficiar-se de recursos avançados**, como detecção e troca dinâmica de locale.
38
+ - **Habilitar roteamento sensível ao locale** com o sistema de roteamento baseado em arquivos do Tanstack Start.
33
39
 
34
40
  ---
35
41
 
36
- ## Passo 1: Instalar Dependências
42
+ ## Guia Passo a Passo para Configurar o Intlayer em uma Aplicação Tanstack Start
37
43
 
38
- ```bash
39
- # npm
40
- npm i intlayer react-intlayer
41
- npm i -D vite-intlayer
44
+ ### Passo 1: Criar o Projeto
42
45
 
43
- # pnpm
44
- pnpm add intlayer react-intlayer
45
- pnpm add -D vite-intlayer
46
+ Comece criando um novo projeto TanStack Start seguindo o guia [Start new project](https://tanstack.com/start/latest/docs/framework/react/quick-start) no site do TanStack Start.
47
+
48
+ ### Passo 2: Instalar os Pacotes do Intlayer
46
49
 
47
- # yarn
48
- yarn add intlayer react-intlayer
49
- yarn add -D vite-intlayer
50
+ Instale os pacotes necessários usando seu gerenciador de pacotes preferido:
51
+
52
+ ```bash packageManager="npm"
53
+ npm install intlayer react-intlayer
54
+ npm install vite-intlayer --save-dev
50
55
  ```
51
56
 
52
- - **intlayer**: núcleo (configuração, dicionários, CLI/transformações).
53
- - **react-intlayer**: `<IntlayerProvider>` + hooks para React.
54
- - **vite-intlayer**: plugin Vite, além de middleware opcional para detecção/redirecionamento de localidade (funciona em dev e SSR/preview; mover para `dependencies` para SSR em produção).
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
+ O pacote principal que fornece ferramentas de internacionalização para gerenciamento de configuração, tradução, [declaração de conteúdo](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/dictionary/get_started.md), transpiração e [comandos CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/intlayer_cli.md).
67
+
68
+ - **react-intlayer**
69
+ O pacote que integra o Intlayer com aplicações React. Ele fornece provedores de contexto e hooks para internacionalização em React.
70
+
71
+ - **vite-intlayer**
72
+ Inclui o plugin Vite para integrar o Intlayer com o [empacotador Vite](https://vite.dev/guide/why.html#why-bundle-for-production), além de middleware para detectar o locale preferido do usuário, gerenciar cookies e lidar com redirecionamento de URL.
57
73
 
58
- ## Passo 2: Configurar o Intlayer
74
+ ### Passo 3: Configuração do seu projeto
59
75
 
60
- Crie o arquivo `intlayer.config.ts` na raiz do seu projeto:
76
+ Crie um arquivo de configuração para configurar os idiomas da sua aplicação:
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
+ // Seus outros idiomas
91
+ ],
69
92
  },
70
- // Você também pode ajustar: contentDir, contentFileExtensions, opções de middleware, etc.
71
93
  };
72
94
 
73
95
  export default config;
74
96
  ```
75
97
 
76
- As variantes CommonJS/ESM são idênticas ao seu documento original caso prefira `cjs`/`mjs`.
98
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
99
+ import { Locales } from "intlayer";
77
100
 
78
- > Referência completa da configuração: veja a documentação de configuração do 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
+ // Seus outros idiomas
110
+ ],
111
+ },
112
+ };
79
113
 
80
- ---
114
+ export default config;
115
+ ```
81
116
 
82
- ## Passo 3: Adicionar o Plugin Vite (e middleware opcional)
117
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
118
+ const { Locales } = require("intlayer");
83
119
 
84
- **TanStack Start usa Vite**, então adicione o(s) plugin(s) do Intlayer no seu `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
+ // Seus outros idiomas
129
+ ],
130
+ },
131
+ };
132
+
133
+ module.exports = config;
134
+ ```
85
135
 
86
- ```ts fileName="vite.config.ts"
136
+ > Através deste arquivo de configuração, você pode configurar URLs localizadas, redirecionamento de middleware, nomes de cookies, a localização e extensão das suas declarações de conteúdo, desabilitar logs do Intlayer no console, e muito mais. Para uma lista completa dos parâmetros disponíveis, consulte a [documentação de configuração](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/configuration.md).
137
+
138
+ ### Passo 4: Integre o Intlayer na sua Configuração do Vite
139
+
140
+ Adicione o plugin intlayer na sua configuração:
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
- // Opcional, mas recomendado para detecção de localidade, cookies e redirecionamentos:
96
- intLayerMiddlewarePlugin(),
153
+ intlayerMiddlewarePlugin(),
97
154
  ],
98
155
  });
99
156
  ```
100
157
 
101
- > Se você fizer deploy SSR, mova `vite-intlayer` para `dependencies` para que o middleware funcione em produção.
158
+ > O plugin `intlayerPlugin()` do Vite é usado para integrar o Intlayer com o Vite. Ele garante a construção dos arquivos de declaração de conteúdo e os monitora no modo de desenvolvimento. Define as variáveis de ambiente do Intlayer dentro da aplicação Vite. Além disso, fornece aliases para otimizar o desempenho.
102
159
 
103
- ---
160
+ ### Passo 5: Crie Componentes de Layout
161
+
162
+ Configure seu layout raiz e layouts específicos por localidade:
163
+
164
+ #### Layout Raiz
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: Declare Seu Conteúdo
104
190
 
105
- ## Passo 4: Declare Seu Conteúdo
191
+ Crie e gerencie suas declarações de conteúdo para armazenar traduções:
106
192
 
107
- Coloque seus dicionários em qualquer lugar dentro de `./src` (padrão `contentDir`). Exemplo:
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
- pt: "Logo Vite",
118
- en: "Vite logo",
119
- fr: "Logo Vite",
120
- es: "Logo Vite",
121
- }),
122
- reactLogo: t({
123
- pt: "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
+ pt: "Início",
211
+ }),
212
+ },
213
+ meta: {
214
+ description: t({
215
+ en: "This is an example of using Intlayer with TanStack Router",
216
+ es: "Este es un ejemplo de uso de Intlayer con TanStack Router",
217
+ fr: "Ceci est un exemple d'utilisation d'Intlayer avec TanStack Router",
218
+ pt: "Este é um exemplo de uso do Intlayer com TanStack Router",
219
+ }),
220
+ },
128
221
  title: t({
129
- pt: "TanStack Start + React",
130
- en: "TanStack Start + React",
131
- fr: "TanStack Start + React",
132
- es: "TanStack Start + React",
133
- }),
134
- count: t({
135
- pt: "a contagem é ",
136
- en: "count is ",
137
- fr: "le compte est ",
138
- es: "el recuento es ",
139
- }),
140
- edit: t<ReactNode>({
141
- pt: (
142
- <>
143
- Edite <code>src/routes/index.tsx</code> e salve para testar 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
- pt: "Clique nos logos para saber mais",
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",
222
+ en: "Welcome to Intlayer + TanStack Router",
223
+ es: "Bienvenido a Intlayer + TanStack Router",
224
+ fr: "Bienvenue à Intlayer + TanStack Router",
225
+ pt: "Bem-vindo ao Intlayer + TanStack Router",
168
226
  }),
169
227
  },
228
+ key: "app",
170
229
  } satisfies Dictionary;
171
230
 
172
231
  export default appContent;
173
232
  ```
174
233
 
175
- As variantes JSON/ESM/CJS funcionam da mesma forma que no seu documento original.
234
+ > Suas declarações de conteúdo podem ser definidas em qualquer lugar da sua aplicação assim que forem incluídas no diretório `contentDir` (por padrão, `./app`). E devem corresponder à extensão do arquivo de declaração de conteúdo (por padrão, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
176
235
 
177
- > Conteúdo TSX? Não esqueça de `import React from "react"` se sua configuração precisar disso.
236
+ > Para mais detalhes, consulte a [documentação de declaração de conteúdo](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/dictionary/get_started.md).
178
237
 
179
- ---
238
+ ### Passo 7: Criar Componentes e Hooks Sensíveis ao Locale
180
239
 
181
- ## Passo 5: Envolver TanStack Start com Intlayer
240
+ Crie um componente `LocalizedLink` para navegação sensível ao locale:
182
241
 
183
- Com TanStack Start, sua **rota raiz** é o lugar certo para configurar os providers.
242
+ ```tsx fileName="src/components/localized-link.tsx" codeFormat="typescript"
243
+ // src/components/localized-link.tsx
244
+ // eslint-disable-next-line no-restricted-imports
245
+ import { Link, type LinkProps } from "@tanstack/react-router";
246
+ import { getLocalizedUrl } from "intlayer";
247
+ import { useLocale } from "react-intlayer";
184
248
 
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
- // Exemplo de uso de um dicionário no nível superior:
195
- const content = useIntlayer("app");
249
+ type LocalizedLinkProps = {
250
+ to: string;
251
+ } & Omit<LinkProps, "to">;
196
252
 
197
- return (
198
- <div>
199
- <nav className="flex gap-3 p-3">
200
- <RouterLink to="/">Início</RouterLink>
201
- <RouterLink to="/about">Sobre</RouterLink>
202
- </nav>
203
- <main className="p-6">
204
- <h1>{content.title}</h1>
205
- <Outlet />
206
- </main>
207
- </div>
208
- );
209
- }
253
+ export function LocalizedLink(props: LocalizedLinkProps) {
254
+ const { locale } = useLocale();
210
255
 
211
- export const Route = createRootRoute({
212
- component: () => (
213
- <IntlayerProvider>
214
- <AppShell />
215
- </IntlayerProvider>
216
- ),
217
- });
218
- ```
256
+ const isExternal = (to: string) => {
257
+ return /^(https?:)?\/\//.test(to);
258
+ };
219
259
 
220
- Então use seu conteúdo nas páginas:
260
+ const to = isExternal(props.to)
261
+ ? props.to
262
+ : getLocalizedUrl(props.to, locale);
221
263
 
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
- });
264
+ return <Link {...props} to={to as LinkProps["to"]} />;
265
+ }
245
266
  ```
246
267
 
247
- > Atributos de string (`alt`, `title`, `aria-label`, …) precisam de `.value`:
248
- >
249
- > ```jsx
250
- > <img alt={c.reactLogo.value} />
251
- > ```
268
+ Crie um hook `useLocalizedNavigate` para navegação programática:
252
269
 
253
- ---
270
+ ```tsx fileName="src/hooks/useLocalizedNavigate.tsx" codeFormat="typescript"
271
+ // src/hooks/useLocalizedNavigate.tsx
272
+ // eslint-disable-next-line no-restricted-imports
273
+ import { NavigateOptions, useNavigate } from "@tanstack/react-router";
274
+ import { getLocalizedUrl } from "intlayer";
275
+ import { useLocale } from "react-intlayer";
254
276
 
255
- ## (Opcional) Passo 6: Troca de Idioma (Cliente)
277
+ type LocalizedNavigateOptions = {
278
+ to: string;
279
+ } & Omit<NavigateOptions, "to">;
256
280
 
257
- ```tsx fileName="src/components/LocaleSwitcher.tsx"
258
- import { Locales } from "intlayer";
259
- import { useLocale } from "react-intlayer";
281
+ export const useLocalizedNavigate = () => {
282
+ const navigate = useNavigate();
283
+ const { locale } = useLocale();
260
284
 
261
- export function LocaleSwitcher() {
262
- const { setLocale } = useLocale();
263
- return (
264
- <div className="flex gap-2">
265
- <button onClick={() => setLocale(Locales.ENGLISH)}>Inglês</button>
266
- <button onClick={() => setLocale(Locales.FRENCH)}>Francês</button>
267
- <button onClick={() => setLocale(Locales.SPANISH)}>Espanhol</button>
268
- </div>
269
- );
270
- }
285
+ const isExternal = (to: string) => {
286
+ return /^(https?:)?\/\//.test(to);
287
+ };
288
+
289
+ const localizedNavigate = (options: LocalizedNavigateOptions) => {
290
+ const to = isExternal(options.to)
291
+ ? options.to
292
+ : getLocalizedUrl(options.to, locale);
293
+
294
+ navigate({ ...options, to: to as NavigateOptions["to"] });
295
+ };
296
+
297
+ return localizedNavigate;
298
+ };
271
299
  ```
272
300
 
273
- ---
301
+ ### Passo 8: Utilize o Intlayer em Suas Páginas
274
302
 
275
- ## (Opcional) Passo 7: Roteamento Localizado (URLs amigáveis para SEO)
303
+ Acesse seus dicionários de conteúdo em toda a sua aplicação:
276
304
 
277
- Você tem **dois bons padrões** com TanStack Start. Escolha um.
305
+ #### Página de Redirecionamento Raiz
278
306
 
279
- Crie uma pasta de segmento dinâmico `src/routes/$locale/` para que suas URLs sejam `/:locale/...`. No layout `$locale`, valide o `params.locale`, defina `<IntlayerProvider locale=...>`, e renderize um `<Outlet />`. Essa abordagem é direta, mas você montará o restante das suas rotas abaixo de `$locale`, e precisará de uma árvore extra sem prefixo se você _não_ quiser o prefixo da localidade padrão.
307
+ ```tsx fileName="src/routes/page.tsx" codeFormat="typescript"
308
+ // src/routes/page.tsx
309
+ import { useLocale } from "react-intlayer";
310
+ import { Navigate } from "react-router";
280
311
 
281
- ---
312
+ export default function Page() {
313
+ const { locale } = useLocale();
282
314
 
283
- ## (Opcional) Passo 8: Atualizar a URL ao trocar de idioma
315
+ return <Navigate replace to={locale} />;
316
+ }
317
+ ```
284
318
 
285
- Com o Padrão A (basepath), trocar de idioma significa **navegar para um basepath diferente**:
319
+ #### Página Inicial Localizada
286
320
 
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";
321
+ ```tsx fileName="src/routes/{-$locale}/index.tsx" codeFormat="typescript"
322
+ import { createFileRoute } from "@tanstack/react-router";
323
+ import { getIntlayer } from "intlayer";
324
+ import { useIntlayer } from "react-intlayer";
291
325
 
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 o histórico
303
- setLocale(next);
304
- };
326
+ import LocaleSwitcher from "@/components/locale-switcher";
327
+ import { LocalizedLink } from "@/components/localized-link";
328
+ import { useLocalizedNavigate } from "@/hooks/useLocalizedNavigate";
329
+
330
+ export const Route = createFileRoute("/{-$locale}/")({
331
+ component: RouteComponent,
332
+ head: ({ params }) => {
333
+ const { locale } = params;
334
+ const metaContent = getIntlayer("app", locale);
335
+
336
+ return {
337
+ meta: [
338
+ { title: metaContent.title },
339
+ { content: metaContent.meta.description, name: "description" },
340
+ ],
341
+ };
342
+ },
343
+ });
344
+
345
+ function RouteComponent() {
346
+ const content = useIntlayer("app");
347
+ const navigate = useLocalizedNavigate();
305
348
 
306
349
  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>
350
+ <div className="grid place-items-center h-screen">
351
+ <div className="flex flex-col gap-4 items-center text-center">
352
+ {content.title}
353
+ <LocaleSwitcher />
354
+ <div className="flex gap-4">
355
+ <a href="/">Índice</a>
356
+ <LocalizedLink to="/">{content.links.home}</LocalizedLink>
357
+ <LocalizedLink to="/about">{content.links.about}</LocalizedLink>
358
+ </div>
359
+ <div className="flex gap-4">
360
+ <button onClick={() => navigate({ to: "/" })}>
361
+ {content.links.home}
362
+ </button>
363
+ <button onClick={() => navigate({ to: "/about" })}>
364
+ {content.links.about}
365
+ </button>
366
+ </div>
367
+ </div>
311
368
  </div>
312
369
  );
313
370
  }
314
371
  ```
315
372
 
316
- ---
373
+ > Para saber mais sobre o hook `useIntlayer`, consulte a [documentação](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/react-intlayer/useIntlayer.md).
317
374
 
318
- ## (Opcional) Passo 9: `<html lang>` e `dir` (Documento TanStack Start)
375
+ ### Passo 9: Criar um Componente de Troca de Idioma
319
376
 
320
- TanStack Start expõe um **Document** (estrutura raiz HTML) que você pode personalizar. Defina `lang` e `dir` para acessibilidade/SEO:
377
+ Crie um componente para permitir que os usuários mudem de idioma:
321
378
 
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";
379
+ ```tsx fileName="src/components/locale-switcher.tsx" codeFormat="typescript"
380
+ import { useLocation } from "@tanstack/react-router";
381
+ import {
382
+ getHTMLTextDir,
383
+ getLocaleName,
384
+ getLocalizedUrl,
385
+ Locales,
386
+ } from "intlayer";
387
+ import { useIntlayer, useLocale } from "react-intlayer";
388
+
389
+ export default function LocaleSwitcher() {
390
+ const { pathname, searchStr } = useLocation();
391
+ const content = useIntlayer("locale-switcher");
392
+
393
+ const { availableLocales, locale, setLocale } = useLocale({
394
+ onLocaleChange: (newLocale) => {
395
+ const pathWithLocale = getLocalizedUrl(pathname + searchStr, newLocale);
396
+ location.replace(pathWithLocale);
397
+ },
398
+ });
326
399
 
327
- function Document({
328
- locale,
329
- children,
330
- }: {
331
- locale: string;
332
- children: React.ReactNode;
333
- }) {
334
400
  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>
401
+ <select
402
+ aria-label={content.label.toString()}
403
+ onChange={(e) => setLocale(e.target.value)}
404
+ value={locale}
405
+ >
406
+ {availableLocales.map((localeItem) => (
407
+ <option
408
+ dir={getHTMLTextDir(localeItem)}
409
+ key={localeItem}
410
+ lang={localeItem}
411
+ value={localeItem}
412
+ >
413
+ {/* Exemplo: Français (Francês) */}
414
+ {getLocaleName(localeItem, locale)} (
415
+ {getLocaleName(localeItem, Locales.ENGLISH)})
416
+ </option>
417
+ ))}
418
+ </select>
343
419
  );
344
420
  }
345
-
346
- export const Route = createRootRoute({
347
- component: () => (
348
- <IntlayerProvider>
349
- {/* Se você calcular o locale no servidor, passe-o para o Document; caso contrário, o cliente corrigirá após a hidratação */}
350
- <Document locale={document?.documentElement?.lang || "en"}>
351
- <Outlet />
352
- </Document>
353
- </IntlayerProvider>
354
- ),
355
- });
356
421
  ```
357
422
 
358
- Para correção no lado do cliente, você também pode manter seu pequeno hook:
423
+ > Para saber mais sobre o hook `useLocale`, consulte a [documentação](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/react-intlayer/useLocale.md).
424
+
425
+ ### Passo 10: Adicionar Gerenciamento de Atributos HTML (Opcional)
359
426
 
360
- ```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx"
427
+ Crie um hook para gerenciar os atributos lang e dir do HTML:
428
+
429
+ ```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx" codeFormat="typescript"
430
+ // src/hooks/useI18nHTMLAttributes.tsx
431
+ import { getHTMLTextDir } from "intlayer";
361
432
  import { useEffect } from "react";
362
433
  import { useLocale } from "react-intlayer";
363
- import { getHTMLTextDir } from "intlayer";
364
434
 
365
435
  export const useI18nHTMLAttributes = () => {
366
436
  const { locale } = useLocale();
437
+
367
438
  useEffect(() => {
368
439
  document.documentElement.lang = locale;
369
440
  document.documentElement.dir = getHTMLTextDir(locale);
@@ -371,87 +442,185 @@ export const useI18nHTMLAttributes = () => {
371
442
  };
372
443
  ```
373
444
 
374
- ---
445
+ Então use-o no seu componente raiz:
375
446
 
376
- ## (Opcional) Passo 10: Componente Link localizado
447
+ ```tsx fileName="src/routes/{-$locale}/index.tsx" codeFormat="typescript"
448
+ import { createFileRoute, Navigate, Outlet } from "@tanstack/react-router";
449
+ import { configuration } from "intlayer";
450
+ import { IntlayerProvider, useLocale } from "react-intlayer";
377
451
 
378
- O TanStack Router fornece um `<Link/>`, mas se você precisar de uma `<a>` simples que prefixe automaticamente URLs internas:
452
+ import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes"; // importar o hook
379
453
 
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";
454
+ export const Route = createFileRoute("/{-$locale}")({
455
+ component: LayoutComponent,
456
+ });
388
457
 
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";
458
+ function LayoutComponent() {
459
+ useI18nHTMLAttributes(); // adicione esta linha
460
+
461
+ const { locale } = Route.useParams();
462
+
463
+ return (
464
+ <IntlayerProvider locale={locale}>
465
+ <Outlet />
466
+ </IntlayerProvider>
467
+ );
468
+ }
410
469
  ```
411
470
 
412
- > Se você usar o Padrão A (basepath), o `<Link to="/about" />` do TanStack já resolve para `/fr/about` via `basepath`, então um link personalizado é opcional.
471
+ ### Passo 11: Construir e Executar Sua Aplicação
413
472
 
414
- ---
473
+ Construa os dicionários de conteúdo e execute sua aplicação:
415
474
 
416
- ## TypeScript
475
+ ```bash packageManager="npm"
476
+ # Construir os dicionários do Intlayer
477
+ npm run intlayer:build
417
478
 
418
- Inclua os tipos gerados pelo Intlayer:
479
+ # Iniciar o servidor de desenvolvimento
480
+ npm run dev
481
+ ```
482
+
483
+ ```bash packageManager="pnpm"
484
+ # Construir os dicionários do Intlayer
485
+ pnpm intlayer:build
486
+
487
+ # Iniciar o servidor de desenvolvimento
488
+ pnpm dev
489
+ ```
490
+
491
+ ```bash packageManager="yarn"
492
+ # Construir os dicionários do Intlayer
493
+ yarn intlayer:build
494
+
495
+ # Iniciar o servidor de desenvolvimento
496
+ yarn dev
497
+ ```
498
+
499
+ ### Passo 12: Configurar o TypeScript (Opcional)
500
+
501
+ Intlayer usa a ampliação de módulos para obter os benefícios do TypeScript e tornar sua base de código mais robusta.
502
+
503
+ Certifique-se de que sua configuração do TypeScript inclua os tipos gerados automaticamente:
419
504
 
420
505
  ```json5 fileName="tsconfig.json"
421
506
  {
422
- "include": ["src", ".intlayer/**/*.ts"],
507
+ compilerOptions: {
508
+ // ... suas configurações existentes do TypeScript
509
+ },
510
+ include: [
511
+ // ... seus includes existentes
512
+ ".intlayer/**/*.ts", // Inclua os tipos gerados automaticamente
513
+ ],
423
514
  }
424
515
  ```
425
516
 
426
- ---
517
+ ### Configuração do Git
427
518
 
428
- ## Git
519
+ É recomendado ignorar os arquivos gerados pelo Intlayer. Isso permite que você evite comitar esses arquivos no seu repositório Git.
429
520
 
430
- Ignore os artefatos gerados pelo Intlayer:
521
+ Para isso, você pode adicionar as seguintes instruções no seu arquivo `.gitignore`:
431
522
 
432
- ```gitignore
523
+ ```plaintext fileName=".gitignore"
524
+ # Ignorar os arquivos gerados pelo Intlayer
433
525
  .intlayer
434
526
  ```
435
527
 
436
528
  ---
437
529
 
530
+ ### Passo 13: Criar Redirecionamento (Opcional)
531
+
532
+ ```typescript fileName="src/routes/{-$locale}/rotue.tsx" codeFormat="typescript"
533
+ function LayoutComponent() {
534
+ useI18nHTMLAttributes();
535
+
536
+ const { locale } = Route.useParams();
537
+ const { locale: selectedLocale } = useLocale();
538
+ const { defaultLocale } = configuration.internationalization;
539
+ const { prefixDefault } = configuration.middleware;
540
+
541
+ // Redireciona para o locale padrão se nenhum locale estiver presente na URL quando prefixDefault for verdadeiro
542
+ if (selectedLocale === defaultLocale && !locale && prefixDefault) {
543
+ return <Navigate replace to={defaultLocale} />;
544
+ }
545
+
546
+ // Redireciona para o locale selecionado se o locale na URL não corresponder ao locale selecionado
547
+ if (selectedLocale !== defaultLocale && !locale) {
548
+ return <Navigate replace to={selectedLocale} />;
549
+ }
550
+
551
+ return (
552
+ <IntlayerProvider locale={locale}>
553
+ <Outlet />
554
+ </IntlayerProvider>
555
+ );
556
+ }
557
+ ```
558
+
559
+ ## Implantação em Produção
560
+
561
+ Ao implantar sua aplicação:
562
+
563
+ 1. **Compile sua aplicação:**
564
+
565
+ ```bash
566
+ npm run build
567
+ ```
568
+
569
+ 2. **Compile os dicionários do Intlayer:**
570
+
571
+ ```bash
572
+ npm run intlayer:build
573
+ ```
574
+
575
+ 3. **Mova `vite-intlayer` para as dependências** se estiver usando middleware em produção:
576
+ ```bash
577
+ npm install vite-intlayer --save
578
+ ```
579
+
580
+ Sua aplicação agora suportará:
581
+
582
+ - **Estrutura de URL**: `/en`, `/en/about`, `/tr`, `/tr/about`
583
+ - **Detecção automática de localidade** baseada nas preferências do navegador
584
+ - **Roteamento consciente da localidade** com Tanstack Start
585
+ - **Suporte a TypeScript** com tipos gerados automaticamente
586
+ - **Renderização no servidor** com tratamento adequado da localidade
587
+
438
588
  ## Extensão VS Code
439
589
 
440
- - **Extensão Intlayer para VS Code** autocompletar, erros, pré-visualizações inline, ações rápidas.
441
- Marketplace: `intlayer.intlayer-vs-code-extension`
590
+ Para melhorar sua experiência de desenvolvimento com o Intlayer, você pode instalar a extensão oficial **Intlayer VS Code Extension**.
591
+
592
+ [Instalar no VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
593
+
594
+ Esta extensão oferece:
595
+
596
+ - **Autocompletar** para chaves de tradução.
597
+ - **Detecção de erros em tempo real** para traduções ausentes.
598
+ - **Visualizações inline** do conteúdo traduzido.
599
+ - **Ações rápidas** para criar e atualizar traduções facilmente.
600
+
601
+ Para mais detalhes sobre como usar a extensão, consulte a [documentação da extensão Intlayer para VS Code](https://intlayer.org/doc/vs-code-extension).
442
602
 
443
603
  ---
444
604
 
445
605
  ## Ir Além
446
606
 
447
- - Editor Visual
448
- - Modo CMS
449
- - Detecção de localidade na edge / adaptadores
607
+ Para ir mais longe, você pode implementar o [editor visual](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/intlayer_visual_editor.md) ou externalizar seu conteúdo usando o [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/intlayer_CMS.md).
450
608
 
451
609
  ---
452
610
 
611
+ ## Referências da Documentação
612
+
613
+ - [Documentação do Intlayer](https://intlayer.org)
614
+ - [Documentação do Tanstack Start](https://reactrouter.com/)
615
+ - [Hook useIntlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/react-intlayer/useIntlayer.md)
616
+ - [Hook useLocale](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/react-intlayer/useLocale.md)
617
+ - [Declaração de Conteúdo](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/dictionary/get_started.md)
618
+ - [Configuração](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/configuration.md)
619
+
620
+ Este guia abrangente fornece tudo o que você precisa para integrar o Intlayer com o Tanstack Start para uma aplicação totalmente internacionalizada com roteamento sensível ao idioma e suporte a TypeScript.
621
+
453
622
  ## Histórico da Documentação
454
623
 
455
- | Versão | Data | Alterações |
456
- | ------ | ---------- | -------------------------------------- |
457
- | 1.0.0 | 2025-08-11 | Adaptação do TanStack Start adicionada |
624
+ | Versão | Data | Alterações |
625
+ | ------ | ---------- | ------------------------------ |
626
+ | 5.8.1 | 2025-09-09 | Adicionado para Tanstack Start |