@intlayer/docs 5.8.1-canary.0 → 6.0.0-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/blog/ar/rag_powered_documentation_assistant.md +282 -0
  2. package/blog/de/rag_powered_documentation_assistant.md +282 -0
  3. package/blog/en/rag_powered_documentation_assistant.md +289 -0
  4. package/blog/en-GB/rag_powered_documentation_assistant.md +284 -0
  5. package/blog/es/rag_powered_documentation_assistant.md +308 -0
  6. package/blog/fr/rag_powered_documentation_assistant.md +308 -0
  7. package/blog/hi/rag_powered_documentation_assistant.md +284 -0
  8. package/blog/it/rag_powered_documentation_assistant.md +284 -0
  9. package/blog/ja/rag_powered_documentation_assistant.md +284 -0
  10. package/blog/ko/rag_powered_documentation_assistant.md +283 -0
  11. package/blog/pt/rag_powered_documentation_assistant.md +284 -0
  12. package/blog/ru/rag_powered_documentation_assistant.md +284 -0
  13. package/blog/tr/index.md +69 -0
  14. package/blog/tr/internationalization_and_SEO.md +273 -0
  15. package/blog/tr/intlayer_with_i18next.md +162 -0
  16. package/blog/tr/intlayer_with_next-i18next.md +367 -0
  17. package/blog/tr/intlayer_with_next-intl.md +392 -0
  18. package/blog/tr/intlayer_with_react-i18next.md +346 -0
  19. package/blog/tr/intlayer_with_react-intl.md +345 -0
  20. package/blog/tr/list_i18n_technologies/CMS/drupal.md +143 -0
  21. package/blog/tr/list_i18n_technologies/CMS/wix.md +167 -0
  22. package/blog/tr/list_i18n_technologies/CMS/wordpress.md +188 -0
  23. package/blog/tr/list_i18n_technologies/frameworks/angular.md +125 -0
  24. package/blog/tr/list_i18n_technologies/frameworks/flutter.md +150 -0
  25. package/blog/tr/list_i18n_technologies/frameworks/react-native.md +217 -0
  26. package/blog/tr/list_i18n_technologies/frameworks/react.md +155 -0
  27. package/blog/tr/list_i18n_technologies/frameworks/svelte.md +129 -0
  28. package/blog/tr/list_i18n_technologies/frameworks/vue.md +130 -0
  29. package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +170 -0
  30. package/blog/tr/rag_powered_documentation_assistant.md +284 -0
  31. package/blog/tr/react-i18next_vs_react-intl_vs_intlayer.md +162 -0
  32. package/blog/tr/vue-i18n_vs_intlayer.md +276 -0
  33. package/blog/tr/what_is_internationalization.md +166 -0
  34. package/blog/zh/rag_powered_documentation_assistant.md +284 -0
  35. package/dist/cjs/generated/blog.entry.cjs +212 -0
  36. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  37. package/dist/cjs/generated/docs.entry.cjs +660 -132
  38. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  39. package/dist/cjs/generated/frequentQuestions.entry.cjs +84 -0
  40. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  41. package/dist/cjs/generated/legal.entry.cjs +6 -0
  42. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  43. package/dist/esm/generated/blog.entry.mjs +212 -0
  44. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  45. package/dist/esm/generated/docs.entry.mjs +660 -132
  46. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  47. package/dist/esm/generated/frequentQuestions.entry.mjs +84 -0
  48. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  49. package/dist/esm/generated/legal.entry.mjs +6 -0
  50. package/dist/esm/generated/legal.entry.mjs.map +1 -1
  51. package/dist/types/generated/blog.entry.d.ts +1 -0
  52. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  53. package/dist/types/generated/docs.entry.d.ts +5 -2
  54. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  55. package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
  56. package/dist/types/generated/legal.entry.d.ts.map +1 -1
  57. package/docs/ar/autoFill.md +41 -40
  58. package/docs/ar/configuration.md +202 -199
  59. package/docs/ar/dictionary/content_file.md +1059 -0
  60. package/docs/ar/intlayer_CMS.md +4 -4
  61. package/docs/ar/intlayer_with_nestjs.md +271 -0
  62. package/docs/ar/intlayer_with_nextjs_page_router.md +1 -1
  63. package/docs/ar/intlayer_with_react_router_v7.md +533 -0
  64. package/docs/ar/intlayer_with_tanstack.md +465 -299
  65. package/docs/ar/intlayer_with_vite+preact.md +7 -7
  66. package/docs/ar/intlayer_with_vite+react.md +7 -7
  67. package/docs/ar/intlayer_with_vite+vue.md +9 -9
  68. package/docs/ar/packages/vite-intlayer/index.md +3 -3
  69. package/docs/ar/readme.md +261 -0
  70. package/docs/ar/testing.md +199 -0
  71. package/docs/de/autoFill.md +42 -19
  72. package/docs/de/configuration.md +155 -147
  73. package/docs/de/dictionary/content_file.md +1059 -0
  74. package/docs/de/intlayer_CMS.md +4 -5
  75. package/docs/de/intlayer_with_nestjs.md +270 -0
  76. package/docs/de/intlayer_with_nextjs_page_router.md +1 -1
  77. package/docs/de/intlayer_with_react_router_v7.md +537 -0
  78. package/docs/de/intlayer_with_tanstack.md +469 -302
  79. package/docs/de/intlayer_with_vite+preact.md +7 -7
  80. package/docs/de/intlayer_with_vite+react.md +7 -7
  81. package/docs/de/intlayer_with_vite+vue.md +9 -9
  82. package/docs/de/packages/vite-intlayer/index.md +3 -3
  83. package/docs/de/readme.md +261 -0
  84. package/docs/de/testing.md +200 -0
  85. package/docs/en/CI_CD.md +4 -6
  86. package/docs/en/autoFill.md +25 -5
  87. package/docs/en/configuration.md +45 -54
  88. package/docs/en/dictionary/content_file.md +1054 -0
  89. package/docs/en/intlayer_CMS.md +8 -7
  90. package/docs/en/intlayer_cli.md +112 -5
  91. package/docs/en/intlayer_with_nestjs.md +268 -0
  92. package/docs/en/intlayer_with_nextjs_page_router.md +1 -1
  93. package/docs/en/intlayer_with_react_router_v7.md +531 -0
  94. package/docs/en/intlayer_with_tanstack.md +463 -294
  95. package/docs/en/intlayer_with_vite+preact.md +8 -8
  96. package/docs/en/intlayer_with_vite+react.md +8 -8
  97. package/docs/en/intlayer_with_vite+vue.md +8 -8
  98. package/docs/en/packages/intlayer/getLocalizedUrl.md +102 -25
  99. package/docs/en/packages/vite-intlayer/index.md +3 -3
  100. package/docs/en/readme.md +261 -0
  101. package/docs/en/testing.md +200 -0
  102. package/docs/en-GB/autoFill.md +29 -6
  103. package/docs/en-GB/configuration.md +79 -71
  104. package/docs/en-GB/dictionary/content_file.md +1084 -0
  105. package/docs/en-GB/intlayer_CMS.md +4 -5
  106. package/docs/en-GB/intlayer_with_nestjs.md +268 -0
  107. package/docs/en-GB/intlayer_with_nextjs_page_router.md +1 -1
  108. package/docs/en-GB/intlayer_with_react_router_v7.md +533 -0
  109. package/docs/en-GB/intlayer_with_tanstack.md +466 -299
  110. package/docs/en-GB/intlayer_with_vite+preact.md +7 -7
  111. package/docs/en-GB/intlayer_with_vite+react.md +7 -7
  112. package/docs/en-GB/intlayer_with_vite+vue.md +9 -9
  113. package/docs/en-GB/packages/vite-intlayer/index.md +3 -3
  114. package/docs/en-GB/readme.md +261 -0
  115. package/docs/en-GB/testing.md +200 -0
  116. package/docs/es/autoFill.md +45 -23
  117. package/docs/es/configuration.md +171 -167
  118. package/docs/es/dictionary/content_file.md +1088 -0
  119. package/docs/es/intlayer_CMS.md +4 -5
  120. package/docs/es/intlayer_with_nestjs.md +268 -0
  121. package/docs/es/intlayer_with_nextjs_page_router.md +1 -1
  122. package/docs/es/intlayer_with_react_router_v7.md +533 -0
  123. package/docs/es/intlayer_with_tanstack.md +469 -280
  124. package/docs/es/intlayer_with_vite+preact.md +7 -7
  125. package/docs/es/intlayer_with_vite+react.md +7 -7
  126. package/docs/es/intlayer_with_vite+vue.md +9 -9
  127. package/docs/es/packages/vite-intlayer/index.md +3 -3
  128. package/docs/es/readme.md +261 -0
  129. package/docs/es/testing.md +200 -0
  130. package/docs/fr/autoFill.md +47 -24
  131. package/docs/fr/configuration.md +213 -198
  132. package/docs/fr/dictionary/content_file.md +1054 -0
  133. package/docs/fr/intlayer_CMS.md +4 -5
  134. package/docs/fr/intlayer_with_nestjs.md +268 -0
  135. package/docs/fr/intlayer_with_nextjs_page_router.md +1 -1
  136. package/docs/fr/intlayer_with_react_router_v7.md +549 -0
  137. package/docs/fr/intlayer_with_tanstack.md +465 -279
  138. package/docs/fr/intlayer_with_vite+preact.md +7 -7
  139. package/docs/fr/intlayer_with_vite+react.md +7 -7
  140. package/docs/fr/intlayer_with_vite+vue.md +9 -9
  141. package/docs/fr/packages/vite-intlayer/index.md +3 -3
  142. package/docs/fr/readme.md +261 -0
  143. package/docs/fr/testing.md +200 -0
  144. package/docs/hi/autoFill.md +47 -25
  145. package/docs/hi/configuration.md +194 -189
  146. package/docs/hi/dictionary/content_file.md +1056 -0
  147. package/docs/hi/intlayer_CMS.md +4 -5
  148. package/docs/hi/intlayer_with_nestjs.md +269 -0
  149. package/docs/hi/intlayer_with_nextjs_page_router.md +1 -1
  150. package/docs/hi/intlayer_with_react_router_v7.md +533 -0
  151. package/docs/hi/intlayer_with_tanstack.md +467 -282
  152. package/docs/hi/intlayer_with_vite+preact.md +7 -7
  153. package/docs/hi/intlayer_with_vite+react.md +7 -7
  154. package/docs/hi/intlayer_with_vite+vue.md +9 -9
  155. package/docs/hi/packages/vite-intlayer/index.md +3 -3
  156. package/docs/hi/readme.md +261 -0
  157. package/docs/hi/testing.md +200 -0
  158. package/docs/it/autoFill.md +46 -24
  159. package/docs/it/configuration.md +169 -161
  160. package/docs/it/dictionary/content_file.md +1061 -0
  161. package/docs/it/intlayer_CMS.md +4 -5
  162. package/docs/it/intlayer_with_nestjs.md +268 -0
  163. package/docs/it/intlayer_with_nextjs_page_router.md +1 -1
  164. package/docs/it/intlayer_with_react_router_v7.md +535 -0
  165. package/docs/it/intlayer_with_tanstack.md +467 -301
  166. package/docs/it/intlayer_with_vite+preact.md +7 -7
  167. package/docs/it/intlayer_with_vite+react.md +7 -7
  168. package/docs/it/intlayer_with_vite+vue.md +9 -9
  169. package/docs/it/packages/vite-intlayer/index.md +3 -3
  170. package/docs/it/readme.md +261 -0
  171. package/docs/it/testing.md +200 -0
  172. package/docs/ja/autoFill.md +45 -23
  173. package/docs/ja/configuration.md +243 -204
  174. package/docs/ja/dictionary/content_file.md +1064 -0
  175. package/docs/ja/intlayer_CMS.md +4 -5
  176. package/docs/ja/intlayer_with_nestjs.md +268 -0
  177. package/docs/ja/intlayer_with_nextjs_page_router.md +1 -1
  178. package/docs/ja/intlayer_with_react_router_v7.md +534 -0
  179. package/docs/ja/intlayer_with_tanstack.md +467 -303
  180. package/docs/ja/intlayer_with_vite+preact.md +7 -7
  181. package/docs/ja/intlayer_with_vite+react.md +7 -7
  182. package/docs/ja/intlayer_with_vite+vue.md +9 -9
  183. package/docs/ja/packages/vite-intlayer/index.md +3 -3
  184. package/docs/ja/readme.md +263 -0
  185. package/docs/ja/testing.md +200 -0
  186. package/docs/ko/autoFill.md +39 -16
  187. package/docs/ko/configuration.md +217 -197
  188. package/docs/ko/dictionary/content_file.md +1060 -0
  189. package/docs/ko/intlayer_CMS.md +4 -5
  190. package/docs/ko/intlayer_with_nestjs.md +268 -0
  191. package/docs/ko/intlayer_with_nextjs_page_router.md +1 -1
  192. package/docs/ko/intlayer_with_react_router_v7.md +540 -0
  193. package/docs/ko/intlayer_with_tanstack.md +466 -302
  194. package/docs/ko/intlayer_with_vite+preact.md +7 -7
  195. package/docs/ko/intlayer_with_vite+react.md +7 -7
  196. package/docs/ko/intlayer_with_vite+vue.md +9 -9
  197. package/docs/ko/packages/vite-intlayer/index.md +3 -3
  198. package/docs/ko/readme.md +261 -0
  199. package/docs/ko/testing.md +200 -0
  200. package/docs/pt/autoFill.md +39 -15
  201. package/docs/pt/configuration.md +165 -147
  202. package/docs/pt/dictionary/content_file.md +1062 -0
  203. package/docs/pt/intlayer_CMS.md +4 -5
  204. package/docs/pt/intlayer_with_nestjs.md +271 -0
  205. package/docs/pt/intlayer_with_nextjs_page_router.md +1 -1
  206. package/docs/pt/intlayer_with_react_router_v7.md +535 -0
  207. package/docs/pt/intlayer_with_tanstack.md +469 -300
  208. package/docs/pt/intlayer_with_vite+preact.md +7 -7
  209. package/docs/pt/intlayer_with_vite+react.md +7 -7
  210. package/docs/pt/intlayer_with_vite+vue.md +9 -9
  211. package/docs/pt/packages/vite-intlayer/index.md +3 -3
  212. package/docs/pt/readme.md +261 -0
  213. package/docs/pt/testing.md +200 -0
  214. package/docs/ru/autoFill.md +52 -30
  215. package/docs/ru/configuration.md +164 -117
  216. package/docs/ru/dictionary/content_file.md +1064 -0
  217. package/docs/ru/intlayer_CMS.md +4 -4
  218. package/docs/ru/intlayer_with_nestjs.md +270 -0
  219. package/docs/ru/intlayer_with_nextjs_page_router.md +1 -1
  220. package/docs/ru/intlayer_with_react_router_v7.md +534 -0
  221. package/docs/ru/intlayer_with_tanstack.md +470 -305
  222. package/docs/ru/intlayer_with_vite+preact.md +7 -7
  223. package/docs/ru/intlayer_with_vite+react.md +7 -7
  224. package/docs/ru/intlayer_with_vite+vue.md +9 -9
  225. package/docs/ru/packages/vite-intlayer/index.md +3 -3
  226. package/docs/ru/readme.md +261 -0
  227. package/docs/ru/testing.md +202 -0
  228. package/docs/tr/CI_CD.md +198 -0
  229. package/docs/tr/autoFill.md +201 -0
  230. package/docs/tr/configuration.md +585 -0
  231. package/docs/tr/dictionary/condition.md +243 -0
  232. package/docs/tr/dictionary/content_file.md +1055 -0
  233. package/docs/tr/dictionary/enumeration.md +251 -0
  234. package/docs/tr/dictionary/file.md +228 -0
  235. package/docs/tr/dictionary/function_fetching.md +218 -0
  236. package/docs/tr/dictionary/gender.md +279 -0
  237. package/docs/tr/dictionary/insertion.md +191 -0
  238. package/docs/tr/dictionary/markdown.md +385 -0
  239. package/docs/tr/dictionary/nesting.md +279 -0
  240. package/docs/tr/dictionary/translation.md +315 -0
  241. package/docs/tr/formatters.md +618 -0
  242. package/docs/tr/how_works_intlayer.md +254 -0
  243. package/docs/tr/index.md +168 -0
  244. package/docs/tr/interest_of_intlayer.md +288 -0
  245. package/docs/tr/intlayer_CMS.md +347 -0
  246. package/docs/tr/intlayer_cli.md +570 -0
  247. package/docs/tr/intlayer_visual_editor.md +269 -0
  248. package/docs/tr/intlayer_with_angular.md +694 -0
  249. package/docs/tr/intlayer_with_create_react_app.md +1218 -0
  250. package/docs/tr/intlayer_with_express.md +415 -0
  251. package/docs/tr/intlayer_with_lynx+react.md +511 -0
  252. package/docs/tr/intlayer_with_nestjs.md +268 -0
  253. package/docs/tr/intlayer_with_nextjs_14.md +1029 -0
  254. package/docs/tr/intlayer_with_nextjs_15.md +1506 -0
  255. package/docs/tr/intlayer_with_nextjs_page_router.md +1484 -0
  256. package/docs/tr/intlayer_with_nuxt.md +773 -0
  257. package/docs/tr/intlayer_with_react_native+expo.md +660 -0
  258. package/docs/tr/intlayer_with_react_router_v7.md +531 -0
  259. package/docs/tr/intlayer_with_tanstack.md +452 -0
  260. package/docs/tr/intlayer_with_vite+preact.md +1673 -0
  261. package/docs/tr/intlayer_with_vite+react.md +1632 -0
  262. package/docs/tr/intlayer_with_vite+solid.md +288 -0
  263. package/docs/tr/intlayer_with_vite+svelte.md +288 -0
  264. package/docs/tr/intlayer_with_vite+vue.md +1042 -0
  265. package/docs/tr/introduction.md +209 -0
  266. package/docs/tr/locale_mapper.md +244 -0
  267. package/docs/tr/mcp_server.md +207 -0
  268. package/docs/tr/packages/@intlayer/api/index.md +58 -0
  269. package/docs/tr/packages/@intlayer/chokidar/index.md +57 -0
  270. package/docs/tr/packages/@intlayer/cli/index.md +47 -0
  271. package/docs/tr/packages/@intlayer/config/index.md +142 -0
  272. package/docs/tr/packages/@intlayer/core/index.md +51 -0
  273. package/docs/tr/packages/@intlayer/design-system/index.md +47 -0
  274. package/docs/tr/packages/@intlayer/dictionary-entry/index.md +53 -0
  275. package/docs/tr/packages/@intlayer/editor/index.md +47 -0
  276. package/docs/tr/packages/@intlayer/editor-react/index.md +47 -0
  277. package/docs/tr/packages/@intlayer/webpack/index.md +61 -0
  278. package/docs/tr/packages/angular-intlayer/index.md +59 -0
  279. package/docs/tr/packages/express-intlayer/index.md +258 -0
  280. package/docs/tr/packages/express-intlayer/t.md +459 -0
  281. package/docs/tr/packages/intlayer/getConfiguration.md +151 -0
  282. package/docs/tr/packages/intlayer/getEnumeration.md +165 -0
  283. package/docs/tr/packages/intlayer/getHTMLTextDir.md +127 -0
  284. package/docs/tr/packages/intlayer/getLocaleLang.md +87 -0
  285. package/docs/tr/packages/intlayer/getLocaleName.md +124 -0
  286. package/docs/tr/packages/intlayer/getLocalizedUrl.md +324 -0
  287. package/docs/tr/packages/intlayer/getMultilingualUrls.md +225 -0
  288. package/docs/tr/packages/intlayer/getPathWithoutLocale.md +81 -0
  289. package/docs/tr/packages/intlayer/getTranslation.md +196 -0
  290. package/docs/tr/packages/intlayer/getTranslationContent.md +195 -0
  291. package/docs/tr/packages/intlayer/index.md +505 -0
  292. package/docs/tr/packages/intlayer-cli/index.md +71 -0
  293. package/docs/tr/packages/intlayer-editor/index.md +139 -0
  294. package/docs/tr/packages/lynx-intlayer/index.md +85 -0
  295. package/docs/tr/packages/next-intlayer/index.md +154 -0
  296. package/docs/tr/packages/next-intlayer/t.md +354 -0
  297. package/docs/tr/packages/next-intlayer/useDictionary.md +270 -0
  298. package/docs/tr/packages/next-intlayer/useIntlayer.md +265 -0
  299. package/docs/tr/packages/next-intlayer/useLocale.md +133 -0
  300. package/docs/tr/packages/nuxt-intlayer/index.md +59 -0
  301. package/docs/tr/packages/preact-intlayer/index.md +55 -0
  302. package/docs/tr/packages/react-intlayer/index.md +148 -0
  303. package/docs/tr/packages/react-intlayer/t.md +304 -0
  304. package/docs/tr/packages/react-intlayer/useDictionary.md +554 -0
  305. package/docs/tr/packages/react-intlayer/useI18n.md +478 -0
  306. package/docs/tr/packages/react-intlayer/useIntlayer.md +253 -0
  307. package/docs/tr/packages/react-intlayer/useLocale.md +212 -0
  308. package/docs/tr/packages/react-native-intlayer/index.md +85 -0
  309. package/docs/tr/packages/react-scripts-intlayer/index.md +82 -0
  310. package/docs/tr/packages/solid-intlayer/index.md +56 -0
  311. package/docs/tr/packages/svelte-intlayer/index.md +55 -0
  312. package/docs/tr/packages/vite-intlayer/index.md +82 -0
  313. package/docs/tr/packages/vue-intlayer/index.md +59 -0
  314. package/docs/tr/per_locale_file.md +321 -0
  315. package/docs/tr/readme.md +261 -0
  316. package/docs/tr/roadmap.md +338 -0
  317. package/docs/tr/testing.md +200 -0
  318. package/docs/tr/vs_code_extension.md +154 -0
  319. package/docs/zh/autoFill.md +40 -18
  320. package/docs/zh/configuration.md +245 -226
  321. package/docs/zh/dictionary/content_file.md +1064 -0
  322. package/docs/zh/intlayer_CMS.md +4 -5
  323. package/docs/zh/intlayer_with_nestjs.md +268 -0
  324. package/docs/zh/intlayer_with_nextjs_page_router.md +1 -1
  325. package/docs/zh/intlayer_with_react_router_v7.md +535 -0
  326. package/docs/zh/intlayer_with_tanstack.md +468 -278
  327. package/docs/zh/intlayer_with_vite+preact.md +7 -7
  328. package/docs/zh/intlayer_with_vite+react.md +7 -7
  329. package/docs/zh/intlayer_with_vite+vue.md +7 -7
  330. package/docs/zh/packages/vite-intlayer/index.md +3 -3
  331. package/docs/zh/readme.md +261 -0
  332. package/docs/zh/testing.md +198 -0
  333. package/frequent_questions/tr/SSR_Next_no_[locale].md +105 -0
  334. package/frequent_questions/tr/array_as_content_declaration.md +72 -0
  335. package/frequent_questions/tr/build_dictionaries.md +59 -0
  336. package/frequent_questions/tr/build_error_CI_CD.md +75 -0
  337. package/frequent_questions/tr/customized_locale_list.md +65 -0
  338. package/frequent_questions/tr/domain_routing.md +114 -0
  339. package/frequent_questions/tr/esbuild_error.md +30 -0
  340. package/frequent_questions/tr/get_locale_cookie.md +142 -0
  341. package/frequent_questions/tr/intlayer_command_undefined.md +156 -0
  342. package/frequent_questions/tr/locale_incorect_in_url.md +74 -0
  343. package/frequent_questions/tr/static_rendering.md +45 -0
  344. package/frequent_questions/tr/translated_path_url.md +56 -0
  345. package/frequent_questions/tr/unknown_command.md +98 -0
  346. package/legal/tr/privacy_notice.md +83 -0
  347. package/legal/tr/terms_of_service.md +55 -0
  348. package/package.json +13 -13
  349. package/src/generated/blog.entry.ts +212 -0
  350. package/src/generated/docs.entry.ts +663 -135
  351. package/src/generated/frequentQuestions.entry.ts +85 -1
  352. package/src/generated/legal.entry.ts +7 -1
  353. package/docs/ar/dictionary/content_extention_customization.md +0 -100
  354. package/docs/ar/dictionary/get_started.md +0 -527
  355. package/docs/de/dictionary/content_extention_customization.md +0 -100
  356. package/docs/de/dictionary/get_started.md +0 -531
  357. package/docs/en/dictionary/content_extention_customization.md +0 -102
  358. package/docs/en/dictionary/get_started.md +0 -529
  359. package/docs/en-GB/dictionary/content_extention_customization.md +0 -100
  360. package/docs/en-GB/dictionary/get_started.md +0 -591
  361. package/docs/es/dictionary/content_extention_customization.md +0 -100
  362. package/docs/es/dictionary/get_started.md +0 -527
  363. package/docs/fr/dictionary/content_extention_customization.md +0 -100
  364. package/docs/fr/dictionary/get_started.md +0 -527
  365. package/docs/hi/dictionary/content_extention_customization.md +0 -100
  366. package/docs/hi/dictionary/get_started.md +0 -527
  367. package/docs/it/dictionary/content_extention_customization.md +0 -113
  368. package/docs/it/dictionary/get_started.md +0 -573
  369. package/docs/ja/dictionary/content_extention_customization.md +0 -113
  370. package/docs/ja/dictionary/get_started.md +0 -576
  371. package/docs/ko/dictionary/content_extention_customization.md +0 -100
  372. package/docs/ko/dictionary/get_started.md +0 -530
  373. package/docs/pt/dictionary/content_extention_customization.md +0 -100
  374. package/docs/pt/dictionary/get_started.md +0 -532
  375. package/docs/ru/dictionary/content_extention_customization.md +0 -100
  376. package/docs/ru/dictionary/get_started.md +0 -575
  377. package/docs/zh/dictionary/content_extention_customization.md +0 -117
  378. package/docs/zh/dictionary/get_started.md +0 -533
@@ -1,370 +1,439 @@
1
1
  ---
2
- createdAt: 2025-08-11
3
- updatedAt: 2025-08-11
4
- title: Erste Schritte mit Intlayer in TanStack Start (React)
5
- description: Fügen Sie Ihrer TanStack Start-App mit Intlayer i18n hinzu komponentenlokale Wörterbücher, lokalisierte URLs und SEO-freundliche Metadaten.
2
+ createdAt: 2025-09-09
3
+ updatedAt: 2025-09-09
4
+ title: Erste Schritte mit Intlayer in Tanstack Start
5
+ description: Erfahren Sie, wie Sie Internationalisierung (i18n) zu Ihrer Tanstack Start-Anwendung mit Intlayer hinzufügen. Folgen Sie diesem umfassenden Leitfaden, um Ihre App mehrsprachig mit lokalisierungsbewusstem Routing zu machen.
6
6
  keywords:
7
7
  - Internationalisierung
8
8
  - Dokumentation
9
9
  - Intlayer
10
- - TanStack Start
11
- - TanStack Router
10
+ - Tanstack Start
12
11
  - React
13
12
  - i18n
14
- - JavaScript
13
+ - TypeScript
14
+ - Lokalisierungsrouting
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
- # Erste Schritte mit der Internationalisierung (i18n) mit Intlayer und TanStack Start (React)
24
+ # Erste Schritte mit der Internationalisierung (i18n) mit Intlayer und Tanstack Start
25
+
26
+ Diese Anleitung zeigt, wie Sie **Intlayer** für nahtlose Internationalisierung in Tanstack Start-Projekten mit lokalisierungsbewusstem Routing, TypeScript-Unterstützung und modernen Entwicklungspraktiken integrieren.
22
27
 
23
28
  ## Was ist Intlayer?
24
29
 
25
- **Intlayer** ist ein Open-Source-i18n-Toolkit für React-Apps. Es bietet Ihnen:
30
+ **Intlayer** ist eine innovative, Open-Source-Internationalisierungsbibliothek (i18n), die entwickelt wurde, um die mehrsprachige Unterstützung in modernen Webanwendungen zu vereinfachen.
26
31
 
27
- - **Komponentenlokale Wörterbücher** mit TypeScript-Sicherheit.
28
- - **Dynamische Metadaten & Routen** (SEO-bereit).
29
- - **Laufzeit-Sprachumschaltung** (und Hilfsmittel zum Erkennen/Speichern von Sprachen).
30
- - **Vite-Plugin** für Build-Zeit-Transformationen + Entwicklererlebnis (DX).
32
+ Mit Intlayer können Sie:
31
33
 
32
- Diese Anleitung zeigt, wie man Intlayer in ein **TanStack Start**-Projekt integriert (das unter der Haube Vite und TanStack Router für Routing/SSR verwendet).
34
+ - **Übersetzungen einfach verwalten** durch deklarative Wörterbücher auf Komponentenebene.
35
+ - **Metadaten, Routen und Inhalte dynamisch lokalisieren**.
36
+ - **TypeScript-Unterstützung sicherstellen** mit automatisch generierten Typen, die die Autovervollständigung und Fehlererkennung verbessern.
37
+ - **Von fortschrittlichen Funktionen profitieren**, wie dynamischer Spracherkennung und -umschaltung.
38
+ - **Lokalisierungsbewusstes Routing aktivieren** mit dem dateibasierten Routing-System von Tanstack Start.
33
39
 
34
40
  ---
35
41
 
36
- ## Schritt 1: Abhängigkeiten installieren
42
+ ## Schritt-für-Schritt-Anleitung zur Einrichtung von Intlayer in einer Tanstack Start-Anwendung
37
43
 
38
- ```bash
39
- # npm
40
- npm i intlayer react-intlayer
41
- npm i -D vite-intlayer
44
+ ### Schritt 1: Projekt erstellen
42
45
 
43
- # pnpm
44
- pnpm add intlayer react-intlayer
45
- pnpm add -D vite-intlayer
46
+ Beginnen Sie mit der Erstellung eines neuen TanStack Start-Projekts, indem Sie der Anleitung [Neues Projekt starten](https://tanstack.com/start/latest/docs/framework/react/quick-start) auf der TanStack Start-Website folgen.
47
+
48
+ ### Schritt 2: Intlayer-Pakete installieren
46
49
 
47
- # yarn
48
- yarn add intlayer react-intlayer
49
- yarn add -D vite-intlayer
50
+ Installieren Sie die erforderlichen Pakete mit Ihrem bevorzugten Paketmanager:
51
+
52
+ ```bash packageManager="npm"
53
+ npm install intlayer react-intlayer
54
+ npm install vite-intlayer --save-dev
50
55
  ```
51
56
 
52
- - **intlayer**: Kern (Konfiguration, Wörterbücher, CLI/Transformationen).
53
- - **react-intlayer**: `<IntlayerProvider>` + Hooks für React.
54
- - **vite-intlayer**: Vite-Plugin, plus optionales Middleware für Spracherkennung/-weiterleitungen (funktioniert in Entwicklung & SSR/Vorschau; für Produktions-SSR in `dependencies` verschieben).
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
+ Das Kernpaket, das Internationalisierungswerkzeuge für Konfigurationsmanagement, Übersetzung, [Inhaltsdeklaration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/dictionary/get_started.md), Transpilierung und [CLI-Befehle](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/intlayer_cli.md) bereitstellt.
67
+
68
+ - **react-intlayer**
69
+
70
+ Das Paket, das Intlayer in React-Anwendungen integriert. Es stellt Kontext-Provider und Hooks für die Internationalisierung in React bereit.
57
71
 
58
- ## Schritt 2: Intlayer konfigurieren
72
+ - **vite-intlayer**
59
73
 
60
- Erstellen Sie `intlayer.config.ts` im Stammverzeichnis Ihres Projekts:
74
+ Beinhaltet das Vite-Plugin zur Integration von Intlayer mit dem [Vite-Bundler](https://vite.dev/guide/why.html#why-bundle-for-production) sowie Middleware zur Erkennung der bevorzugten Sprache des Nutzers, Verwaltung von Cookies und Handhabung von URL-Weiterleitungen.
61
75
 
62
- ```ts fileName="intlayer.config.ts"
63
- import { Locales, type IntlayerConfig } from "intlayer";
76
+ ### Schritt 3: Konfiguration Ihres Projekts
77
+
78
+ Erstellen Sie eine Konfigurationsdatei, um die Sprachen Ihrer Anwendung zu konfigurieren:
79
+
80
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
81
+ import type { IntlayerConfig } from "intlayer";
82
+
83
+ import { Locales } from "intlayer";
64
84
 
65
85
  const config: IntlayerConfig = {
66
86
  internationalization: {
67
- locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
68
87
  defaultLocale: Locales.ENGLISH,
88
+ locales: [
89
+ Locales.ENGLISH,
90
+ Locales.FRENCH,
91
+ Locales.SPANISH,
92
+ // Ihre weiteren Sprachversionen
93
+ ],
69
94
  },
70
- // Sie können auch anpassen: contentDir, contentFileExtensions, Middleware-Optionen usw.
71
95
  };
72
96
 
73
97
  export default config;
74
98
  ```
75
99
 
76
- CommonJS/ESM-Varianten sind identisch zu Ihrem Originaldokument, falls Sie `cjs`/`mjs` bevorzugen.
100
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
101
+ import { Locales } from "intlayer";
77
102
 
78
- > Vollständige Konfigurationsreferenz: siehe Intlayers Konfigurationsdokumentation.
103
+ /** @type {import('intlayer').IntlayerConfig} */
104
+ const config = {
105
+ internationalization: {
106
+ defaultLocale: Locales.ENGLISH,
107
+ locales: [
108
+ Locales.ENGLISH,
109
+ Locales.FRENCH,
110
+ Locales.SPANISH,
111
+ // Ihre weiteren Sprachen
112
+ ],
113
+ },
114
+ };
79
115
 
80
- ---
116
+ export default config;
117
+ ```
81
118
 
82
- ## Schritt 3: Fügen Sie das Vite-Plugin (und optional Middleware) hinzu
119
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
120
+ const { Locales } = require("intlayer");
83
121
 
84
- **TanStack Start verwendet Vite**, also fügen Sie Intlayers Plugin(s) zu Ihrer `vite.config.ts` hinzu:
122
+ /** @type {import('intlayer').IntlayerConfig} */
123
+ const config = {
124
+ internationalization: {
125
+ defaultLocale: Locales.ENGLISH,
126
+ locales: [
127
+ Locales.ENGLISH,
128
+ Locales.FRENCH,
129
+ Locales.SPANISH,
130
+ // Ihre weiteren Sprachen
131
+ ],
132
+ },
133
+ };
85
134
 
86
- ```ts fileName="vite.config.ts"
135
+ module.exports = config;
136
+ ```
137
+
138
+ > Durch diese Konfigurationsdatei können Sie lokalisierte URLs, Middleware-Weiterleitungen, Cookie-Namen, den Speicherort und die Erweiterung Ihrer Inhaltsdeklarationen einrichten, Intlayer-Protokolle in der Konsole deaktivieren und vieles mehr. Für eine vollständige Liste der verfügbaren Parameter konsultieren Sie bitte die [Konfigurationsdokumentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/configuration.md).
139
+
140
+ ### Schritt 4: Integrieren Sie Intlayer in Ihre Vite-Konfiguration
141
+
142
+ Fügen Sie das Intlayer-Plugin in Ihre Konfiguration ein:
143
+
144
+ ```typescript fileName="vite.config.ts" codeFormat="typescript"
145
+ import { reactRouter } from "@react-router/dev/vite";
87
146
  import { defineConfig } from "vite";
88
- import react from "@vitejs/plugin-react-swc";
89
- import { intlayerPlugin, intLayerMiddlewarePlugin } from "vite-intlayer";
147
+ import { intlayerMiddlewarePlugin, intlayerPlugin } from "vite-intlayer";
148
+ import tsconfigPaths from "vite-tsconfig-paths";
90
149
 
91
150
  export default defineConfig({
92
151
  plugins: [
93
- react(),
152
+ reactRouter(),
153
+ tsconfigPaths(),
94
154
  intlayerPlugin(),
95
- // Optional, aber empfohlen für die Erkennung der Sprache, Cookies & Weiterleitungen:
96
- intLayerMiddlewarePlugin(),
155
+ intlayerMiddlewarePlugin(),
97
156
  ],
98
157
  });
99
158
  ```
100
159
 
101
- > Wenn Sie SSR bereitstellen, verschieben Sie `vite-intlayer` zu den `dependencies`, damit die Middleware in der Produktion ausgeführt wird.
160
+ > Das `intlayerPlugin()` Vite-Plugin wird verwendet, um Intlayer in Vite zu integrieren. Es sorgt für den Aufbau der Inhaltsdeklarationsdateien und überwacht diese im Entwicklungsmodus. Es definiert Intlayer-Umgebungsvariablen innerhalb der Vite-Anwendung. Zusätzlich stellt es Aliase bereit, um die Leistung zu optimieren.
102
161
 
103
- ---
162
+ ### Schritt 5: Erstellen Sie Layout-Komponenten
104
163
 
105
- ## Schritt 4: Deklarieren Sie Ihre Inhalte
164
+ Richten Sie Ihr Root-Layout und lokalisierte Layouts ein:
106
165
 
107
- Platzieren Sie Ihre Wörterbücher irgendwo unter `./src` (Standard `contentDir`). Beispiel:
166
+ #### Root-Layout
108
167
 
109
- ```tsx fileName="src/app.content.tsx"
110
- import { t, type Dictionary } from "intlayer";
111
- import type { ReactNode } from "react";
168
+ ```tsx fileName="src/routes/{-$locale}/route.tsx" codeFormat="typescript"
169
+ // src/routes/{-$locale}/route.tsx
170
+ import { createFileRoute, Navigate, Outlet } from "@tanstack/react-router";
171
+ import { configuration } from "intlayer";
172
+ import { IntlayerProvider, useLocale } from "react-intlayer";
173
+
174
+ import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes";
175
+
176
+ export const Route = createFileRoute("/{-$locale}")({
177
+ component: LayoutComponent,
178
+ });
179
+
180
+ function LayoutComponent() {
181
+ const { locale } = Route.useParams();
182
+
183
+ return (
184
+ <IntlayerProvider locale={locale}>
185
+ <Outlet />
186
+ </IntlayerProvider>
187
+ );
188
+ }
189
+ ```
190
+
191
+ ### Schritt 6: Deklarieren Sie Ihre Inhalte
192
+
193
+ Erstellen und verwalten Sie Ihre Inhaltsdeklarationen, um Übersetzungen zu speichern:
194
+
195
+ ```tsx fileName="src/contents/page.content.ts" contentDeclarationFormat="typescript"
196
+ import type { Dictionary } from "intlayer";
197
+
198
+ import { t } from "intlayer";
112
199
 
113
200
  const appContent = {
114
- key: "app",
115
201
  content: {
116
- viteLogo: t({
117
- de: "Vite-Logo",
118
- en: "Vite logo",
119
- fr: "Logo Vite",
120
- es: "Logo Vite",
121
- }),
122
- reactLogo: t({
123
- de: "React-Logo",
124
- en: "React logo",
125
- fr: "Logo React",
126
- es: "Logo React",
127
- }),
202
+ links: {
203
+ about: t({
204
+ en: "About",
205
+ es: "Acerca de",
206
+ fr: "À propos",
207
+ }),
208
+ home: t({
209
+ en: "Startseite",
210
+ es: "Inicio",
211
+ fr: "Accueil",
212
+ }),
213
+ },
214
+ meta: {
215
+ description: t({
216
+ en: "Dies ist ein Beispiel für die Verwendung von Intlayer mit TanStack Router",
217
+ es: "Este es un ejemplo de uso de Intlayer con TanStack Router",
218
+ fr: "Ceci est un exemple d'utilisation d'Intlayer avec TanStack Router",
219
+ }),
220
+ },
128
221
  title: t({
129
- de: "TanStack Start + React",
130
- en: "TanStack Start + React",
131
- fr: "TanStack Start + React",
132
- es: "TanStack Start + React",
133
- }),
134
- count: t({
135
- de: "Zähler ist ",
136
- en: "count is ",
137
- fr: "le compte est ",
138
- es: "el recuento es ",
139
- }),
140
- edit: t<ReactNode>({
141
- de: (
142
- <>
143
- Bearbeite <code>src/routes/index.tsx</code> und speichere, um HMR zu
144
- testen
145
- </>
146
- ),
147
- en: (
148
- <>
149
- Edit <code>src/routes/index.tsx</code> and save to test HMR
150
- </>
151
- ),
152
- fr: (
153
- <>
154
- Éditez <code>src/routes/index.tsx</code> et enregistrez pour tester
155
- HMR
156
- </>
157
- ),
158
- es: (
159
- <>
160
- Edita <code>src/routes/index.tsx</code> y guarda para probar HMR
161
- </>
162
- ),
163
- }),
164
- readTheDocs: t({
165
- de: "Klicken Sie auf die Logos, um mehr zu erfahren",
166
- en: "Click the logos to learn more",
167
- fr: "Cliquez sur les logos pour en savoir plus",
168
- es: "Haz clic en los logotipos para saber más",
222
+ en: "Willkommen bei Intlayer + TanStack Router",
223
+ es: "Bienvenido a Intlayer + TanStack Router",
224
+ fr: "Bienvenue à Intlayer + TanStack Router",
169
225
  }),
170
226
  },
227
+ key: "app",
171
228
  } satisfies Dictionary;
172
229
 
173
230
  export default appContent;
174
231
  ```
175
232
 
176
- JSON/ESM/CJS-Varianten funktionieren genauso wie in Ihrem Originaldokument.
233
+ > Ihre Inhaltsdeklarationen können überall in Ihrer Anwendung definiert werden, sobald sie in das Verzeichnis `contentDir` aufgenommen werden (standardmäßig `./app`). Und sie müssen der Dateierweiterung für Inhaltsdeklarationen entsprechen (standardmäßig `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
177
234
 
178
- > TSX-Inhalt? Vergessen Sie nicht `import React from "react"`, falls Ihr Setup dies benötigt.
235
+ > Für weitere Details siehe die [Dokumentation zur Inhaltsdeklaration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/dictionary/get_started.md).
179
236
 
180
- ---
237
+ ### Schritt 7: Erstellen Sie lokalisierungsbewusste Komponenten und Hooks
181
238
 
182
- ## Schritt 5: TanStack Start mit Intlayer umschließen
239
+ Erstellen Sie eine `LocalizedLink`-Komponente für lokalisierungsbewusste Navigation:
183
240
 
184
- Bei TanStack Start ist Ihre **Root-Route** der richtige Ort, um Provider zu setzen.
241
+ ```tsx fileName="src/components/localized-link.tsx" codeFormat="typescript"
242
+ // src/components/localized-link.tsx
243
+ // eslint-disable-next-line no-restricted-imports
244
+ import { Link, type LinkProps } from "@tanstack/react-router";
245
+ import { getLocalizedUrl } from "intlayer";
246
+ import { useLocale } from "reactintlayer";
185
247
 
186
- ```tsx fileName="src/routes/__root.tsx"
187
- import {
188
- Outlet,
189
- createRootRoute,
190
- Link as RouterLink,
191
- } from "@tanstack/react-router";
192
- import { IntlayerProvider, useIntlayer } from "react-intlayer";
193
-
194
- function AppShell() {
195
- // Beispiel für die Verwendung eines Wörterbuchs auf oberster Ebene:
196
- const content = useIntlayer("app");
248
+ type LocalizedLinkProps = {
249
+ to: string;
250
+ } & Omit<LinkProps, "to">;
197
251
 
198
- return (
199
- <div>
200
- <nav className="flex gap-3 p-3">
201
- <RouterLink to="/">Startseite</RouterLink>
202
- <RouterLink to="/about">Über</RouterLink>
203
- </nav>
204
- <main className="p-6">
205
- <h1>{content.title}</h1>
206
- <Outlet />
207
- </main>
208
- </div>
209
- );
210
- }
252
+ export function LocalizedLink(props: LocalizedLinkProps) {
253
+ const { locale } = useLocale();
211
254
 
212
- export const Route = createRootRoute({
213
- component: () => (
214
- <IntlayerProvider>
215
- <AppShell />
216
- </IntlayerProvider>
217
- ),
218
- });
219
- ```
255
+ const isExternal = (to: string) => {
256
+ return /^(https?:)?\/\//.test(to);
257
+ };
220
258
 
221
- Dann verwenden Sie Ihre Inhalte in Seiten:
259
+ const to = isExternal(props.to)
260
+ ? props.to
261
+ : getLocalizedUrl(props.to, locale);
222
262
 
223
- ```tsx fileName="src/routes/index.tsx"
224
- import { createFileRoute } from "@tanstack/react-router";
225
- import { useIntlayer } from "react-intlayer";
226
- import reactLogo from "../assets/react.svg";
227
-
228
- export const Route = createFileRoute("/")({
229
- component: () => {
230
- const content = useIntlayer("app");
231
- return (
232
- <>
233
- <button>{content.count}0</button>
234
- <p>{content.edit}</p>
235
- <img
236
- src={reactLogo}
237
- alt={content.reactLogo.value}
238
- width={48}
239
- height={48}
240
- />
241
- <p className="opacity-70">{content.readTheDocs}</p>
242
- </>
243
- );
244
- },
245
- });
263
+ return <Link {...props} to={to as LinkProps["to"]} />;
264
+ }
246
265
  ```
247
266
 
248
- > String-Attribute (`alt`, `title`, `aria-label`, …) benötigen `.value`:
249
- >
250
- > ```jsx
251
- > <img alt={c.reactLogo.value} />
252
- > ```
267
+ Erstellen Sie einen `useLocalizedNavigate` Hook für die programmatische Navigation:
253
268
 
254
- ---
269
+ ```tsx fileName="src/hooks/useLocalizedNavigate.tsx" codeFormat="typescript"
270
+ // src/hooks/useLocalizedNavigate.tsx
271
+ // eslint-disable-next-line no-restricted-imports
272
+ import { NavigateOptions, useNavigate } from "@tanstack/react-router";
273
+ import { getLocalizedUrl } from "intlayer";
274
+ import { useLocale } from "react-intlayer";
255
275
 
256
- ## (Optional) Schritt 6: Sprachumschaltung (Client)
276
+ type LocalizedNavigateOptions = {
277
+ to: string;
278
+ } & Omit<NavigateOptions, "to">;
257
279
 
258
- ```tsx fileName="src/components/LocaleSwitcher.tsx"
259
- import { Locales } from "intlayer";
260
- import { useLocale } from "react-intlayer";
280
+ export const useLocalizedNavigate = () => {
281
+ const navigate = useNavigate();
282
+ const { locale } = useLocale();
261
283
 
262
- export function LocaleSwitcher() {
263
- const { setLocale } = useLocale();
264
- return (
265
- <div className="flex gap-2">
266
- <button onClick={() => setLocale(Locales.ENGLISH)}>Englisch</button>
267
- <button onClick={() => setLocale(Locales.FRENCH)}>Französisch</button>
268
- <button onClick={() => setLocale(Locales.SPANISH)}>Spanisch</button>
269
- </div>
270
- );
271
- }
284
+ const isExternal = (to: string) => {
285
+ return /^(https?:)?\/\//.test(to);
286
+ };
287
+
288
+ const localizedNavigate = (options: LocalizedNavigateOptions) => {
289
+ const to = isExternal(options.to)
290
+ ? options.to
291
+ : getLocalizedUrl(options.to, locale);
292
+
293
+ navigate({ ...options, to: to as NavigateOptions["to"] });
294
+ };
295
+
296
+ return localizedNavigate;
297
+ };
272
298
  ```
273
299
 
274
- ---
300
+ ### Schritt 8: Intlayer in Ihren Seiten verwenden
275
301
 
276
- ## (Optional) Schritt 7: Lokalisierte Routenführung (SEO-freundliche URLs)
302
+ Greifen Sie in Ihrer gesamten Anwendung auf Ihre Inhaltswörterbücher zu:
277
303
 
278
- Sie haben **zwei gute Muster** mit TanStack Start. Wählen Sie eines aus.
304
+ #### Root-Weiterleitungsseite
279
305
 
280
- Erstellen Sie einen dynamischen Segmentordner `src/routes/$locale/`, sodass Ihre URLs `/:locale/...` sind. Validieren Sie im `$locale`-Layout den `params.locale`, setzen Sie `<IntlayerProvider locale=...>` und rendern Sie ein `<Outlet />`. Dieser Ansatz ist unkompliziert, aber Sie werden den Rest Ihrer Routen unterhalb von `$locale` mounten, und Sie benötigen einen zusätzlichen nicht-präfixierten Baum, wenn Sie _nicht_ möchten, dass die Standardsprache mit einem Präfix versehen wird.
306
+ ```tsx fileName="src/routes/page.tsx" codeFormat="typescript"
307
+ // src/routes/page.tsx
308
+ import { useLocale } from "react-intlayer";
309
+ import { Navigate } from "react-router";
281
310
 
282
- ---
311
+ export default function Page() {
312
+ const { locale } = useLocale();
283
313
 
284
- ## (Optional) Schritt 8: URL beim Wechseln der Sprache aktualisieren
314
+ return <Navigate replace to={locale} />;
315
+ }
316
+ ```
285
317
 
286
- Mit Muster A (Basis-Pfad) bedeutet das Wechseln der Sprache, **zu einem anderen Basis-Pfad zu navigieren**:
318
+ #### Lokalisierte Startseite
287
319
 
288
- ```tsx fileName="src/components/LocaleSwitcherNavigate.tsx"
289
- import { useRouter } from "@tanstack/react-router";
290
- import { Locales, getLocalizedUrl } from "intlayer";
291
- import { useLocale } from "react-intlayer";
320
+ ```tsx fileName="src/routes/{-$locale}/index.tsx" codeFormat="typescript"
321
+ import { createFileRoute } from "@tanstack/react-router";
322
+ import { getIntlayer } from "intlayer";
323
+ import { useIntlayer } from "react-intlayer";
292
324
 
293
- export function LocaleSwitcherNavigate() {
294
- const router = useRouter();
295
- const { locale, setLocale } = useLocale();
296
-
297
- const change = async (next: Locales) => {
298
- if (next === locale) return;
299
- const nextPath = getLocalizedUrl(
300
- window.location.pathname + window.location.search,
301
- next
302
- );
303
- await router.navigate({ to: nextPath }); // bewahrt die Historie
304
- setLocale(next);
305
- };
325
+ import LocaleSwitcher from "@/components/locale-switcher";
326
+ import { LocalizedLink } from "@/components/localized-link";
327
+ import { useLocalizedNavigate } from "@/hooks/useLocalizedNavigate";
328
+
329
+ export const Route = createFileRoute("/{-$locale}/")({
330
+ component: RouteComponent,
331
+ head: ({ params }) => {
332
+ const { locale } = params;
333
+ const metaContent = getIntlayer("app", locale);
334
+
335
+ return {
336
+ meta: [
337
+ { title: metaContent.title },
338
+ { content: metaContent.meta.description, name: "description" },
339
+ ],
340
+ };
341
+ },
342
+ });
343
+
344
+ function RouteComponent() {
345
+ const content = useIntlayer("app");
346
+ const navigate = useLocalizedNavigate();
306
347
 
307
348
  return (
308
- <div className="flex gap-2">
309
- <button onClick={() => change(Locales.ENGLISH)}>English</button>
310
- <button onClick={() => change(Locales.FRENCH)}>Français</button>
311
- <button onClick={() => change(Locales.SPANISH)}>Español</button>
349
+ <div className="grid place-items-center h-screen">
350
+ <div className="flex flex-col gap-4 items-center text-center">
351
+ {content.title}
352
+ <LocaleSwitcher />
353
+ <div className="flex gap-4">
354
+ <a href="/">Index</a>
355
+ <LocalizedLink to="/">{content.links.home}</LocalizedLink>
356
+ <LocalizedLink to="/about">{content.links.about}</LocalizedLink>
357
+ </div>
358
+ <div className="flex gap-4">
359
+ <button onClick={() => navigate({ to: "/" })}>
360
+ {content.links.home}
361
+ </button>
362
+ <button onClick={() => navigate({ to: "/about" })}>
363
+ {content.links.about}
364
+ </button>
365
+ </div>
366
+ </div>
312
367
  </div>
313
368
  );
314
369
  }
315
370
  ```
316
371
 
317
- ---
372
+ > Um mehr über den `useIntlayer` Hook zu erfahren, siehe die [Dokumentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/packages/react-intlayer/useIntlayer.md).
318
373
 
319
- ## (Optional) Schritt 9: `<html lang>` und `dir` (TanStack Start Dokument)
374
+ ### Schritt 9: Erstellen einer Sprachumschalter-Komponente
320
375
 
321
- TanStack Start stellt ein **Document** (HTML-Wurzel-Shell) bereit, das Sie anpassen können. Setzen Sie `lang` und `dir` für Barrierefreiheit/SEO:
376
+ Erstellen Sie eine Komponente, die es Benutzern ermöglicht, die Sprache zu wechseln:
322
377
 
323
- ```tsx fileName="src/routes/__root.tsx" {4,15}
324
- import { Outlet, createRootRoute } from "@tanstack/react-router";
325
- import { IntlayerProvider } from "react-intlayer";
326
- import { getHTMLTextDir } from "intlayer";
378
+ ```tsx fileName="src/components/locale-switcher.tsx" codeFormat="typescript"
379
+ import { useLocation } from "@tanstack/react-router";
380
+ import {
381
+ getHTMLTextDir,
382
+ getLocaleName,
383
+ getLocalizedUrl,
384
+ Locales,
385
+ } from "intlayer";
386
+ import { useIntlayer, useLocale } from "react-intlayer";
387
+
388
+ export default function LocaleSwitcher() {
389
+ const { pathname, searchStr } = useLocation();
390
+ const content = useIntlayer("locale-switcher");
391
+
392
+ const { availableLocales, locale, setLocale } = useLocale({
393
+ onLocaleChange: (newLocale) => {
394
+ const pathWithLocale = getLocalizedUrl(pathname + searchStr, newLocale);
395
+ location.replace(pathWithLocale);
396
+ },
397
+ });
327
398
 
328
- function Document({
329
- locale,
330
- children,
331
- }: {
332
- locale: string;
333
- children: React.ReactNode;
334
- }) {
335
399
  return (
336
- <html lang={locale} dir={getHTMLTextDir(locale)}>
337
- <head>
338
- <meta charSet="utf-8" />
339
- <meta name="viewport" content="width=device-width, initial-scale=1" />
340
- {/* ... */}
341
- </head>
342
- <body>{children}</body>
343
- </html>
400
+ <select
401
+ aria-label={content.label.toString()}
402
+ onChange={(e) => setLocale(e.target.value)}
403
+ value={locale}
404
+ >
405
+ {availableLocales.map((localeItem) => (
406
+ <option
407
+ dir={getHTMLTextDir(localeItem)}
408
+ key={localeItem}
409
+ lang={localeItem}
410
+ value={localeItem}
411
+ >
412
+ {/* Beispiel: Français (Französisch) */}
413
+ {getLocaleName(localeItem, locale)} (
414
+ {getLocaleName(localeItem, Locales.ENGLISH)})
415
+ </option>
416
+ ))}
417
+ </select>
344
418
  );
345
419
  }
346
-
347
- export const Route = createRootRoute({
348
- component: () => (
349
- <IntlayerProvider>
350
- {/* Wenn Sie die Locale auf dem Server berechnen, übergeben Sie sie an Document; andernfalls korrigiert der Client dies nach der Hydrierung */}
351
- <Document locale={document?.documentElement?.lang || "en"}>
352
- <Outlet />
353
- </Document>
354
- </IntlayerProvider>
355
- ),
356
- });
357
420
  ```
358
421
 
359
- Für eine clientseitige Korrektur können Sie auch Ihren kleinen Hook beibehalten:
422
+ > Um mehr über den `useLocale` Hook zu erfahren, siehe die [Dokumentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/packages/react-intlayer/useLocale.md).
360
423
 
361
- ```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx"
362
- import { useEffect } from "react";
363
- import { useLocale } from "react-intlayer";
424
+ ### Schritt 10: HTML-Attribute-Verwaltung hinzufügen (Optional)
425
+
426
+ Erstellen Sie einen Hook zur Verwaltung der HTML-Attribute lang und dir:
427
+
428
+ ```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx" codeFormat="typescript"
429
+ // src/hooks/useI18nHTMLAttributes.tsx
364
430
  import { getHTMLTextDir } from "intlayer";
431
+ import { useEffect } from "react";
432
+ import { useLocale } from "intlayer";
365
433
 
366
434
  export const useI18nHTMLAttributes = () => {
367
435
  const { locale } = useLocale();
436
+
368
437
  useEffect(() => {
369
438
  document.documentElement.lang = locale;
370
439
  document.documentElement.dir = getHTMLTextDir(locale);
@@ -372,87 +441,185 @@ export const useI18nHTMLAttributes = () => {
372
441
  };
373
442
  ```
374
443
 
375
- ---
444
+ Dann verwenden Sie es in Ihrer Root-Komponente:
376
445
 
377
- ## (Optional) Schritt 10: Lokalisierte Link-Komponente
446
+ ```tsx fileName="src/routes/{-$locale}/index.tsx" codeFormat="typescript"
447
+ import { createFileRoute, Navigate, Outlet } from "@tanstack/react-router";
448
+ import { configuration } from "intlayer";
449
+ import { IntlayerProvider, useLocale } from "intlayer";
378
450
 
379
- TanStack Router stellt ein `<Link/>` bereit, aber falls Sie jemals einen einfachen `<a>`-Tag benötigen, der interne URLs automatisch mit einem Präfix versieht:
451
+ import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes"; // importiere den Hook
380
452
 
381
- ```tsx fileName="src/components/Link.tsx"
382
- import { getLocalizedUrl } from "intlayer";
383
- import {
384
- forwardRef,
385
- type AnchorHTMLAttributes,
386
- type DetailedHTMLProps,
387
- } from "react";
388
- import { useLocale } from "react-intlayer";
453
+ export const Route = createFileRoute("/{-$locale}")({
454
+ component: LayoutComponent,
455
+ });
389
456
 
390
- export interface LinkProps
391
- extends DetailedHTMLProps<
392
- AnchorHTMLAttributes<HTMLAnchorElement>,
393
- HTMLAnchorElement
394
- > {}
395
-
396
- const isExternal = (href?: string) => /^https?:\/\//.test(href ?? "");
397
-
398
- export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
399
- ({ href, children, ...props }, ref) => {
400
- const { locale } = useLocale();
401
- const hrefI18n =
402
- href && !isExternal(href) ? getLocalizedUrl(href, locale) : href;
403
- return (
404
- <a href={hrefI18n} ref={ref} {...props}>
405
- {children}
406
- </a>
407
- );
408
- }
409
- );
410
- Link.displayName = "Link";
457
+ function LayoutComponent() {
458
+ useI18nHTMLAttributes(); // diese Zeile hinzufügen
459
+
460
+ const { locale } = Route.useParams();
461
+
462
+ return (
463
+ <IntlayerProvider locale={locale}>
464
+ <Outlet />
465
+ </IntlayerProvider>
466
+ );
467
+ }
411
468
  ```
412
469
 
413
- > Wenn Sie Muster A (basepath) verwenden, löst TanStacks `<Link to="/about" />` bereits über `basepath` zu `/fr/about` auf, daher ist ein benutzerdefinierter Link optional.
470
+ ### Schritt 11: Erstellen und Ausführen Ihrer Anwendung
414
471
 
415
- ---
472
+ Erstellen Sie die Inhaltswörterbücher und starten Sie Ihre Anwendung:
416
473
 
417
- ## TypeScript
474
+ ```bash packageManager="npm"
475
+ # Intlayer-Wörterbücher erstellen
476
+ npm run intlayer:build
418
477
 
419
- Fügen Sie die von Intlayer generierten Typen ein:
478
+ # Entwicklungsserver starten
479
+ npm run dev
480
+ ```
481
+
482
+ ```bash packageManager="pnpm"
483
+ # Intlayer-Wörterbücher erstellen
484
+ pnpm intlayer:build
485
+
486
+ # Entwicklungsserver starten
487
+ pnpm dev
488
+ ```
489
+
490
+ ```bash packageManager="yarn"
491
+ # Intlayer-Wörterbücher erstellen
492
+ yarn intlayer:build
493
+
494
+ # Entwicklungsserver starten
495
+ yarn dev
496
+ ```
497
+
498
+ ### Schritt 12: TypeScript konfigurieren (optional)
499
+
500
+ Intlayer verwendet Modulaugmentation, um die Vorteile von TypeScript zu nutzen und Ihren Code stabiler zu machen.
501
+
502
+ Stellen Sie sicher, dass Ihre TypeScript-Konfiguration die automatisch generierten Typen einschließt:
420
503
 
421
504
  ```json5 fileName="tsconfig.json"
422
505
  {
423
- "include": ["src", ".intlayer/**/*.ts"],
506
+ compilerOptions: {
507
+ // ... Ihre bestehenden TypeScript-Konfigurationen
508
+ },
509
+ include: [
510
+ // ... Ihre bestehenden Includes
511
+ ".intlayer/**/*.ts", // Einschluss der automatisch generierten Typen
512
+ ],
424
513
  }
425
514
  ```
426
515
 
427
- ---
516
+ ### Git-Konfiguration
428
517
 
429
- ## Git
518
+ Es wird empfohlen, die von Intlayer generierten Dateien zu ignorieren. So vermeiden Sie, dass diese Dateien in Ihr Git-Repository committet werden.
430
519
 
431
- Ignorieren Sie die von Intlayer generierten Artefakte:
520
+ Fügen Sie dazu folgende Anweisungen in Ihre `.gitignore`-Datei ein:
432
521
 
433
- ```gitignore
522
+ ```plaintext fileName=".gitignore"
523
+ # Ignoriere die von Intlayer generierten Dateien
434
524
  .intlayer
435
525
  ```
436
526
 
437
527
  ---
438
528
 
529
+ ### Schritt 13: Weiterleitung erstellen (Optional)
530
+
531
+ ```typescript fileName="src/routes/{-$locale}/rotue.tsx" codeFormat="typescript"
532
+ function LayoutComponent() {
533
+ useI18nHTMLAttributes();
534
+
535
+ const { locale } = Route.useParams();
536
+ const { locale: selectedLocale } = useLocale();
537
+ const { defaultLocale } = configuration.internationalization;
538
+ const { prefixDefault } = configuration.middleware;
539
+
540
+ // Weiterleitung zur Standardsprache, wenn keine Sprache in der URL vorhanden ist und prefixDefault wahr ist
541
+ if (selectedLocale === defaultLocale && !locale && prefixDefault) {
542
+ return <Navigate replace to={defaultLocale} />;
543
+ }
544
+
545
+ // Weiterleitung zur ausgewählten Sprache, wenn die Sprache in der URL nicht mit der ausgewählten Sprache übereinstimmt
546
+ if (selectedLocale !== defaultLocale && !locale) {
547
+ return <Navigate replace to={selectedLocale} />;
548
+ }
549
+
550
+ return (
551
+ <IntlayerProvider locale={locale}>
552
+ <Outlet />
553
+ </IntlayerProvider>
554
+ );
555
+ }
556
+ ```
557
+
558
+ ## Produktionsbereitstellung
559
+
560
+ Beim Bereitstellen Ihrer Anwendung:
561
+
562
+ 1. **Bauen Sie Ihre Anwendung:**
563
+
564
+ ```bash
565
+ npm run build
566
+ ```
567
+
568
+ 2. **Bauen Sie die Intlayer-Wörterbücher:**
569
+
570
+ ```bash
571
+ npm run intlayer:build
572
+ ```
573
+
574
+ 3. **Verschieben Sie `vite-intlayer` in die Abhängigkeiten**, wenn Sie Middleware in der Produktion verwenden:
575
+ ```bash
576
+ npm install vite-intlayer --save
577
+ ```
578
+
579
+ Ihre Anwendung unterstützt nun:
580
+
581
+ - **URL-Struktur**: `/en`, `/en/about`, `/tr`, `/tr/about`
582
+ - **Automatische Spracherkennung** basierend auf den Browsereinstellungen
583
+ - **Sprachbewusstes Routing** mit Tanstack Start
584
+ - **TypeScript-Unterstützung** mit automatisch generierten Typen
585
+ - **Server-seitiges Rendering** mit korrekter Sprachbehandlung
586
+
439
587
  ## VS Code Erweiterung
440
588
 
441
- - **Intlayer VS Code Erweiterung** → Autovervollständigung, Fehler, Inline-Vorschauen, Schnellaktionen.
442
- Marketplace: `intlayer.intlayer-vs-code-extension`
589
+ Um Ihre Entwicklungserfahrung mit Intlayer zu verbessern, können Sie die offizielle **Intlayer VS Code Erweiterung** installieren.
590
+
591
+ [Installation aus dem VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
592
+
593
+ Diese Erweiterung bietet:
594
+
595
+ - **Autovervollständigung** für Übersetzungsschlüssel.
596
+ - **Echtzeit-Fehlererkennung** für fehlende Übersetzungen.
597
+ - **Inline-Vorschauen** des übersetzten Inhalts.
598
+ - **Schnellaktionen**, um Übersetzungen einfach zu erstellen und zu aktualisieren.
599
+
600
+ Für weitere Details zur Verwendung der Erweiterung lesen Sie bitte die [Intlayer VS Code Erweiterungsdokumentation](https://intlayer.org/doc/vs-code-extension).
443
601
 
444
602
  ---
445
603
 
446
- ## Weiterführende Themen
604
+ ## Weiterführende Schritte
447
605
 
448
- - Visueller Editor
449
- - CMS-Modus
450
- - Lokalerkennung am Edge / Adapter
606
+ Um weiterzugehen, können Sie den [visuellen Editor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/intlayer_visual_editor.md) implementieren oder Ihre Inhalte mit dem [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/intlayer_CMS.md) auslagern.
451
607
 
452
608
  ---
453
609
 
610
+ ## Dokumentationsverweise
611
+
612
+ - [Intlayer Dokumentation](https://intlayer.org)
613
+ - [Tanstack Start Dokumentation](https://reactrouter.com/)
614
+ - [useIntlayer Hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/packages/react-intlayer/useIntlayer.md)
615
+ - [useLocale Hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/packages/react-intlayer/useLocale.md)
616
+ - [Inhaltsdeklaration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/dictionary/get_started.md)
617
+ - [Konfiguration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/configuration.md)
618
+
619
+ Dieser umfassende Leitfaden bietet alles, was Sie benötigen, um Intlayer mit Tanstack Start für eine vollständig internationalisierte Anwendung mit lokalisierungsbewusstem Routing und TypeScript-Unterstützung zu integrieren.
620
+
454
621
  ## Dokumentationshistorie
455
622
 
456
- | Version | Datum | Änderungen |
457
- | ------- | ---------- | ------------------------------------ |
458
- | 1.0.0 | 2025-08-11 | TanStack Start-Anpassung hinzugefügt |
623
+ | Version | Datum | Änderungen |
624
+ | ------- | ---------- | ------------------------------ |
625
+ | 5.8.1 | 2025-09-09 | Für Tanstack Start hinzugefügt |