@intlayer/docs 7.0.7 → 7.0.8-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 (726) hide show
  1. package/blog/ar/i18n_using_next-i18next.md +1068 -0
  2. package/blog/ar/i18n_using_next-intl.md +768 -0
  3. package/blog/ar/intlayer_with_react-intl.md +0 -4
  4. package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +5 -4
  5. package/blog/de/i18n_using_next-i18next.md +1107 -0
  6. package/blog/de/i18n_using_next-intl.md +760 -0
  7. package/blog/de/intlayer_with_react-intl.md +0 -4
  8. package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  9. package/blog/en/i18n_using_next-i18next.md +1073 -0
  10. package/blog/en/i18n_using_next-intl.md +757 -0
  11. package/blog/en/intlayer_with_i18next.md +71 -8
  12. package/blog/en/intlayer_with_next-i18next.md +71 -8
  13. package/blog/en/intlayer_with_next-intl.md +71 -8
  14. package/blog/en/intlayer_with_react-i18next.md +69 -8
  15. package/blog/en/intlayer_with_react-intl.md +68 -9
  16. package/blog/en/intlayer_with_vue-i18n.md +68 -7
  17. package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
  18. package/blog/en/vue-i18n_vs_intlayer.md +2 -0
  19. package/blog/en-GB/i18n_using_next-i18next.md +1074 -0
  20. package/blog/en-GB/i18n_using_next-intl.md +757 -0
  21. package/blog/en-GB/intlayer_with_i18next.md +15 -6
  22. package/blog/en-GB/intlayer_with_next-i18next.md +16 -6
  23. package/blog/en-GB/intlayer_with_next-intl.md +16 -6
  24. package/blog/en-GB/intlayer_with_react-i18next.md +16 -7
  25. package/blog/en-GB/intlayer_with_react-intl.md +14 -9
  26. package/blog/en-GB/intlayer_with_vue-i18n.md +16 -7
  27. package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  28. package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
  29. package/blog/en-GB/vue-i18n_vs_intlayer.md +2 -0
  30. package/blog/es/i18n_using_next-i18next.md +1066 -0
  31. package/blog/es/i18n_using_next-intl.md +757 -0
  32. package/blog/es/intlayer_with_react-intl.md +0 -4
  33. package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  34. package/blog/fr/i18n_using_next-i18next.md +1078 -0
  35. package/blog/fr/i18n_using_next-intl.md +759 -0
  36. package/blog/fr/intlayer_with_react-intl.md +0 -4
  37. package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  38. package/blog/hi/i18n_using_next-i18next.md +1068 -0
  39. package/blog/hi/i18n_using_next-intl.md +758 -0
  40. package/blog/hi/intlayer_with_react-intl.md +0 -4
  41. package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  42. package/blog/id/i18n_using_next-i18next.md +1078 -0
  43. package/blog/id/i18n_using_next-intl.md +757 -0
  44. package/blog/id/index.md +69 -0
  45. package/blog/id/internationalization_and_SEO.md +364 -0
  46. package/blog/id/intlayer_with_react-intl.md +0 -4
  47. package/blog/id/list_i18n_technologies/CMS/drupal.md +143 -0
  48. package/blog/id/list_i18n_technologies/CMS/wix.md +167 -0
  49. package/blog/id/list_i18n_technologies/CMS/wordpress.md +188 -0
  50. package/blog/id/list_i18n_technologies/frameworks/angular.md +125 -0
  51. package/blog/id/list_i18n_technologies/frameworks/flutter.md +150 -0
  52. package/blog/id/list_i18n_technologies/frameworks/react-native.md +217 -0
  53. package/blog/id/list_i18n_technologies/frameworks/react.md +155 -0
  54. package/blog/id/list_i18n_technologies/frameworks/svelte.md +131 -0
  55. package/blog/id/list_i18n_technologies/frameworks/vue.md +130 -0
  56. package/blog/id/next-i18next_vs_next-intl_vs_intlayer.md +1500 -0
  57. package/blog/id/nextjs-multilingual-seo-comparison.md +361 -0
  58. package/blog/id/rag_powered_documentation_assistant.md +288 -0
  59. package/blog/id/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
  60. package/blog/id/vue-i18n_vs_intlayer.md +278 -0
  61. package/blog/id/what_is_internationalization.md +166 -0
  62. package/blog/it/i18n_using_next-i18next.md +1078 -0
  63. package/blog/it/i18n_using_next-intl.md +758 -0
  64. package/blog/it/intlayer_with_react-intl.md +0 -4
  65. package/blog/it/react-i18next_vs_react-intl_vs_intlayer.md +4 -0
  66. package/blog/it/vue-i18n_vs_intlayer.md +2 -0
  67. package/blog/ja/i18n_using_next-i18next.md +1078 -0
  68. package/blog/ja/i18n_using_next-intl.md +758 -0
  69. package/blog/ja/intlayer_with_react-intl.md +0 -4
  70. package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  71. package/blog/ko/i18n_using_next-i18next.md +1075 -0
  72. package/blog/ko/i18n_using_next-intl.md +759 -0
  73. package/blog/ko/intlayer_with_react-intl.md +0 -4
  74. package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  75. package/blog/pl/i18n_using_next-i18next.md +1078 -0
  76. package/blog/pl/i18n_using_next-intl.md +758 -0
  77. package/blog/pl/index.md +69 -0
  78. package/blog/pl/internationalization_and_SEO.md +363 -0
  79. package/blog/pl/intlayer_with_react-intl.md +0 -4
  80. package/blog/pl/list_i18n_technologies/CMS/drupal.md +143 -0
  81. package/blog/pl/list_i18n_technologies/CMS/wix.md +167 -0
  82. package/blog/pl/list_i18n_technologies/CMS/wordpress.md +196 -0
  83. package/blog/pl/list_i18n_technologies/frameworks/angular.md +125 -0
  84. package/blog/pl/list_i18n_technologies/frameworks/flutter.md +151 -0
  85. package/blog/pl/list_i18n_technologies/frameworks/react-native.md +217 -0
  86. package/blog/pl/list_i18n_technologies/frameworks/react.md +155 -0
  87. package/blog/pl/list_i18n_technologies/frameworks/svelte.md +131 -0
  88. package/blog/pl/list_i18n_technologies/frameworks/vue.md +130 -0
  89. package/blog/pl/next-i18next_vs_next-intl_vs_intlayer.md +1501 -0
  90. package/blog/pl/nextjs-multilingual-seo-comparison.md +362 -0
  91. package/blog/pl/rag_powered_documentation_assistant.md +288 -0
  92. package/blog/pl/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
  93. package/blog/pl/vue-i18n_vs_intlayer.md +278 -0
  94. package/blog/pl/what_is_internationalization.md +167 -0
  95. package/blog/pt/i18n_using_next-i18next.md +1067 -0
  96. package/blog/pt/i18n_using_next-intl.md +760 -0
  97. package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  98. package/blog/ru/i18n_using_next-i18next.md +1106 -0
  99. package/blog/ru/i18n_using_next-intl.md +759 -0
  100. package/blog/ru/intlayer_with_react-intl.md +0 -4
  101. package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  102. package/blog/tr/i18n_using_next-i18next.md +1078 -0
  103. package/blog/tr/i18n_using_next-intl.md +760 -0
  104. package/blog/tr/intlayer_with_react-intl.md +0 -4
  105. package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  106. package/blog/tr/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
  107. package/blog/tr/vue-i18n_vs_intlayer.md +2 -0
  108. package/blog/vi/i18n_using_next-i18next.md +1080 -0
  109. package/blog/vi/i18n_using_next-intl.md +758 -0
  110. package/blog/vi/index.md +69 -0
  111. package/blog/vi/internationalization_and_SEO.md +363 -0
  112. package/blog/vi/intlayer_with_react-intl.md +0 -4
  113. package/blog/vi/list_i18n_technologies/CMS/drupal.md +143 -0
  114. package/blog/vi/list_i18n_technologies/CMS/wix.md +167 -0
  115. package/blog/vi/list_i18n_technologies/CMS/wordpress.md +188 -0
  116. package/blog/vi/list_i18n_technologies/frameworks/angular.md +125 -0
  117. package/blog/vi/list_i18n_technologies/frameworks/flutter.md +150 -0
  118. package/blog/vi/list_i18n_technologies/frameworks/react-native.md +217 -0
  119. package/blog/vi/list_i18n_technologies/frameworks/react.md +155 -0
  120. package/blog/vi/list_i18n_technologies/frameworks/svelte.md +131 -0
  121. package/blog/vi/list_i18n_technologies/frameworks/vue.md +130 -0
  122. package/blog/vi/next-i18next_vs_next-intl_vs_intlayer.md +1520 -0
  123. package/blog/vi/nextjs-multilingual-seo-comparison.md +362 -0
  124. package/blog/vi/rag_powered_documentation_assistant.md +288 -0
  125. package/blog/vi/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
  126. package/blog/vi/vue-i18n_vs_intlayer.md +278 -0
  127. package/blog/vi/what_is_internationalization.md +168 -0
  128. package/blog/zh/i18n_using_next-i18next.md +1105 -0
  129. package/blog/zh/i18n_using_next-intl.md +758 -0
  130. package/blog/zh/intlayer_with_react-intl.md +0 -4
  131. package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  132. package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
  133. package/dist/cjs/common.cjs +0 -4
  134. package/dist/cjs/common.cjs.map +1 -1
  135. package/dist/cjs/generated/blog.entry.cjs +38 -6
  136. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  137. package/dist/cjs/generated/docs.entry.cjs +0 -6
  138. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  139. package/dist/cjs/generated/frequentQuestions.entry.cjs +0 -6
  140. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  141. package/dist/cjs/generated/legal.entry.cjs +0 -6
  142. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  143. package/dist/esm/generated/blog.entry.mjs +38 -0
  144. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  145. package/dist/types/generated/blog.entry.d.ts +2 -0
  146. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  147. package/docs/ar/component_i18n.md +1 -1
  148. package/docs/ar/configuration.md +6 -0
  149. package/docs/ar/intlayer_cli.md +8 -3
  150. package/docs/ar/intlayer_with_next-i18next.md +619 -0
  151. package/docs/ar/intlayer_with_next-intl.md +446 -0
  152. package/docs/ar/intlayer_with_nextjs_16.md +21 -0
  153. package/docs/ar/intlayer_with_tanstack.md +4 -0
  154. package/docs/ar/intlayer_with_vite+react.md +4 -0
  155. package/docs/de/component_i18n.md +1 -1
  156. package/docs/de/configuration.md +6 -0
  157. package/docs/de/intlayer_cli.md +8 -3
  158. package/docs/de/intlayer_with_next-i18next.md +627 -0
  159. package/docs/de/intlayer_with_next-intl.md +451 -0
  160. package/docs/de/intlayer_with_nextjs_16.md +21 -0
  161. package/docs/de/intlayer_with_tanstack.md +4 -0
  162. package/docs/de/intlayer_with_vite+react.md +4 -0
  163. package/docs/en/component_i18n.md +1 -1
  164. package/docs/en/intlayer_cli.md +8 -1
  165. package/docs/en/intlayer_with_astro.md +10 -2
  166. package/docs/en/intlayer_with_create_react_app.md +8 -0
  167. package/docs/en/intlayer_with_lynx+react.md +8 -0
  168. package/docs/en/intlayer_with_nestjs.md +10 -0
  169. package/docs/en/intlayer_with_nextjs_14.md +10 -2
  170. package/docs/en/intlayer_with_nextjs_15.md +21 -4
  171. package/docs/en/intlayer_with_nextjs_16.md +17 -0
  172. package/docs/en/intlayer_with_nuxt.md +8 -0
  173. package/docs/en/intlayer_with_react_native+expo.md +10 -2
  174. package/docs/en/intlayer_with_react_router_v7.md +8 -0
  175. package/docs/en/intlayer_with_tanstack.md +10 -0
  176. package/docs/en/intlayer_with_vite+preact.md +10 -2
  177. package/docs/en/intlayer_with_vite+react.md +21 -4
  178. package/docs/en/intlayer_with_vite+vue.md +10 -2
  179. package/docs/en-GB/component_i18n.md +1 -1
  180. package/docs/en-GB/configuration.md +6 -0
  181. package/docs/en-GB/intlayer_cli.md +8 -3
  182. package/docs/en-GB/intlayer_with_angular.md +4 -4
  183. package/docs/en-GB/intlayer_with_express.md +4 -4
  184. package/docs/en-GB/intlayer_with_lynx+react.md +12 -12
  185. package/{blog/en/_intlayer_with_next-i18next.md → docs/en-GB/intlayer_with_next-i18next.md} +241 -42
  186. package/{blog/en/_intlayer_with_next-intl.md → docs/en-GB/intlayer_with_next-intl.md} +144 -29
  187. package/docs/en-GB/intlayer_with_nextjs_16.md +21 -0
  188. package/docs/en-GB/intlayer_with_tanstack.md +5 -1
  189. package/docs/en-GB/intlayer_with_vite+react.md +4 -0
  190. package/docs/en-GB/packages/next-intlayer/t.md +2 -2
  191. package/docs/es/component_i18n.md +1 -1
  192. package/docs/es/configuration.md +6 -0
  193. package/docs/es/intlayer_cli.md +8 -3
  194. package/docs/es/intlayer_with_next-i18next.md +628 -0
  195. package/docs/es/intlayer_with_next-intl.md +446 -0
  196. package/docs/es/intlayer_with_nextjs_16.md +21 -0
  197. package/docs/es/intlayer_with_tanstack.md +4 -0
  198. package/docs/es/intlayer_with_vite+react.md +4 -0
  199. package/docs/fr/configuration.md +6 -0
  200. package/docs/fr/intlayer_cli.md +8 -3
  201. package/docs/fr/intlayer_with_next-i18next.md +628 -0
  202. package/docs/fr/intlayer_with_next-intl.md +446 -0
  203. package/docs/fr/intlayer_with_nextjs_16.md +23 -2
  204. package/docs/fr/intlayer_with_tanstack.md +4 -0
  205. package/docs/fr/intlayer_with_vite+react.md +4 -0
  206. package/docs/hi/component_i18n.md +1 -1
  207. package/docs/hi/configuration.md +6 -0
  208. package/docs/hi/intlayer_cli.md +8 -0
  209. package/docs/hi/intlayer_with_next-i18next.md +628 -0
  210. package/docs/hi/intlayer_with_next-intl.md +446 -0
  211. package/docs/hi/intlayer_with_nextjs_16.md +21 -0
  212. package/docs/hi/intlayer_with_tanstack.md +4 -0
  213. package/docs/hi/intlayer_with_vite+react.md +4 -0
  214. package/docs/id/CI_CD.md +198 -0
  215. package/docs/id/autoFill.md +284 -0
  216. package/docs/id/component_i18n.md +186 -0
  217. package/docs/id/configuration.md +710 -0
  218. package/docs/id/dictionary/condition.md +231 -0
  219. package/docs/id/dictionary/content_file.md +1092 -0
  220. package/docs/id/dictionary/enumeration.md +245 -0
  221. package/docs/id/dictionary/file.md +237 -0
  222. package/docs/id/dictionary/function_fetching.md +214 -0
  223. package/docs/id/dictionary/gender.md +273 -0
  224. package/docs/id/dictionary/insertion.md +192 -0
  225. package/docs/id/dictionary/markdown.md +381 -0
  226. package/docs/id/dictionary/nesting.md +273 -0
  227. package/docs/id/dictionary/translation.md +310 -0
  228. package/docs/id/formatters.md +596 -0
  229. package/docs/id/how_works_intlayer.md +256 -0
  230. package/docs/id/index.md +176 -0
  231. package/docs/id/interest_of_intlayer.md +293 -0
  232. package/docs/id/intlayer_CMS.md +549 -0
  233. package/docs/id/intlayer_cli.md +850 -0
  234. package/docs/id/intlayer_visual_editor.md +288 -0
  235. package/docs/id/intlayer_with_angular.md +694 -0
  236. package/docs/id/intlayer_with_astro.md +252 -0
  237. package/docs/id/intlayer_with_create_react_app.md +1233 -0
  238. package/docs/id/intlayer_with_express.md +411 -0
  239. package/docs/id/intlayer_with_lynx+react.md +518 -0
  240. package/docs/id/intlayer_with_nestjs.md +272 -0
  241. package/docs/id/intlayer_with_next-i18next.md +628 -0
  242. package/docs/id/intlayer_with_next-intl.md +446 -0
  243. package/docs/id/intlayer_with_nextjs_14.md +1617 -0
  244. package/docs/id/intlayer_with_nextjs_15.md +1698 -0
  245. package/docs/id/intlayer_with_nextjs_16.md +21 -0
  246. package/docs/id/intlayer_with_nextjs_page_router.md +1478 -0
  247. package/docs/id/intlayer_with_nuxt.md +808 -0
  248. package/docs/id/intlayer_with_react_native+expo.md +699 -0
  249. package/docs/id/intlayer_with_react_router_v7.md +496 -0
  250. package/docs/id/intlayer_with_tanstack.md +564 -0
  251. package/docs/id/intlayer_with_vite+preact.md +1737 -0
  252. package/docs/id/intlayer_with_vite+react.md +1413 -0
  253. package/docs/id/intlayer_with_vite+solid.md +289 -0
  254. package/docs/id/intlayer_with_vite+svelte.md +289 -0
  255. package/docs/id/intlayer_with_vite+vue.md +1088 -0
  256. package/docs/id/introduction.md +218 -0
  257. package/docs/id/locale_mapper.md +242 -0
  258. package/docs/id/mcp_server.md +211 -0
  259. package/docs/id/packages/express-intlayer/t.md +458 -0
  260. package/docs/id/packages/intlayer/getConfiguration.md +145 -0
  261. package/docs/id/packages/intlayer/getEnumeration.md +159 -0
  262. package/docs/id/packages/intlayer/getHTMLTextDir.md +122 -0
  263. package/docs/id/packages/intlayer/getLocaleLang.md +81 -0
  264. package/docs/id/packages/intlayer/getLocaleName.md +119 -0
  265. package/docs/id/packages/intlayer/getLocalizedUrl.md +309 -0
  266. package/docs/id/packages/intlayer/getMultilingualUrls.md +223 -0
  267. package/docs/id/packages/intlayer/getPathWithoutLocale.md +75 -0
  268. package/docs/id/packages/intlayer/getTranslation.md +190 -0
  269. package/docs/id/packages/intlayer/getTranslationContent.md +188 -0
  270. package/docs/id/packages/next-intlayer/t.md +352 -0
  271. package/docs/id/packages/next-intlayer/useDictionary.md +271 -0
  272. package/docs/id/packages/next-intlayer/useIntlayer.md +264 -0
  273. package/docs/id/packages/next-intlayer/useLocale.md +166 -0
  274. package/docs/id/packages/react-intlayer/t.md +303 -0
  275. package/docs/id/packages/react-intlayer/useDictionary.md +287 -0
  276. package/docs/id/packages/react-intlayer/useI18n.md +267 -0
  277. package/docs/id/packages/react-intlayer/useIntlayer.md +254 -0
  278. package/docs/id/packages/react-intlayer/useLocale.md +210 -0
  279. package/docs/id/per_locale_file.md +323 -0
  280. package/docs/id/readme.md +261 -0
  281. package/docs/id/releases/v6.md +305 -0
  282. package/docs/id/roadmap.md +362 -0
  283. package/docs/id/testing.md +202 -0
  284. package/docs/id/vs_code_extension.md +126 -0
  285. package/docs/it/component_i18n.md +1 -1
  286. package/docs/it/configuration.md +6 -0
  287. package/docs/it/intlayer_cli.md +8 -3
  288. package/docs/it/intlayer_with_next-i18next.md +628 -0
  289. package/docs/it/intlayer_with_next-intl.md +446 -0
  290. package/docs/it/intlayer_with_nextjs_16.md +21 -0
  291. package/docs/it/intlayer_with_tanstack.md +4 -0
  292. package/docs/it/intlayer_with_vite+react.md +4 -0
  293. package/docs/ja/component_i18n.md +1 -1
  294. package/docs/ja/configuration.md +6 -0
  295. package/docs/ja/intlayer_cli.md +8 -3
  296. package/docs/ja/intlayer_with_next-i18next.md +627 -0
  297. package/docs/ja/intlayer_with_next-intl.md +446 -0
  298. package/docs/ja/intlayer_with_nextjs_16.md +21 -0
  299. package/docs/ja/intlayer_with_tanstack.md +4 -0
  300. package/docs/ja/intlayer_with_vite+react.md +4 -0
  301. package/docs/ko/configuration.md +6 -0
  302. package/docs/ko/intlayer_cli.md +8 -3
  303. package/docs/ko/intlayer_with_next-i18next.md +627 -0
  304. package/docs/ko/intlayer_with_next-intl.md +446 -0
  305. package/docs/ko/intlayer_with_nextjs_16.md +21 -0
  306. package/docs/ko/intlayer_with_tanstack.md +4 -0
  307. package/docs/ko/intlayer_with_vite+react.md +4 -0
  308. package/docs/pl/CI_CD.md +198 -0
  309. package/docs/pl/autoFill.md +284 -0
  310. package/docs/pl/component_i18n.md +186 -0
  311. package/docs/pl/configuration.md +710 -0
  312. package/docs/pl/dictionary/condition.md +232 -0
  313. package/docs/pl/dictionary/content_file.md +1130 -0
  314. package/docs/pl/dictionary/enumeration.md +245 -0
  315. package/docs/pl/dictionary/file.md +234 -0
  316. package/docs/pl/dictionary/function_fetching.md +214 -0
  317. package/docs/pl/dictionary/gender.md +276 -0
  318. package/docs/pl/dictionary/insertion.md +188 -0
  319. package/docs/pl/dictionary/markdown.md +408 -0
  320. package/docs/pl/dictionary/nesting.md +273 -0
  321. package/docs/pl/dictionary/translation.md +310 -0
  322. package/docs/pl/formatters.md +596 -0
  323. package/docs/pl/how_works_intlayer.md +256 -0
  324. package/docs/pl/index.md +176 -0
  325. package/docs/pl/interest_of_intlayer.md +291 -0
  326. package/docs/pl/intlayer_CMS.md +549 -0
  327. package/docs/pl/intlayer_cli.md +857 -0
  328. package/docs/pl/intlayer_visual_editor.md +288 -0
  329. package/docs/pl/intlayer_with_angular.md +690 -0
  330. package/docs/pl/intlayer_with_astro.md +280 -0
  331. package/docs/pl/intlayer_with_create_react_app.md +1235 -0
  332. package/docs/pl/intlayer_with_express.md +411 -0
  333. package/docs/pl/intlayer_with_lynx+react.md +518 -0
  334. package/docs/pl/intlayer_with_nestjs.md +272 -0
  335. package/docs/pl/intlayer_with_next-i18next.md +628 -0
  336. package/docs/pl/intlayer_with_next-intl.md +446 -0
  337. package/docs/pl/intlayer_with_nextjs_14.md +1594 -0
  338. package/docs/pl/intlayer_with_nextjs_15.md +1701 -0
  339. package/docs/pl/intlayer_with_nextjs_16.md +21 -0
  340. package/docs/pl/intlayer_with_nextjs_page_router.md +1513 -0
  341. package/docs/pl/intlayer_with_nuxt.md +885 -0
  342. package/docs/pl/intlayer_with_react_native+expo.md +698 -0
  343. package/docs/pl/intlayer_with_react_router_v7.md +503 -0
  344. package/docs/pl/intlayer_with_tanstack.md +562 -0
  345. package/docs/pl/intlayer_with_vite+preact.md +1736 -0
  346. package/docs/pl/intlayer_with_vite+react.md +1438 -0
  347. package/docs/pl/intlayer_with_vite+solid.md +290 -0
  348. package/docs/pl/intlayer_with_vite+svelte.md +289 -0
  349. package/docs/pl/intlayer_with_vite+vue.md +1116 -0
  350. package/docs/pl/introduction.md +209 -0
  351. package/docs/pl/locale_mapper.md +242 -0
  352. package/docs/pl/mcp_server.md +211 -0
  353. package/docs/pl/packages/express-intlayer/t.md +458 -0
  354. package/docs/pl/packages/intlayer/getConfiguration.md +146 -0
  355. package/docs/pl/packages/intlayer/getEnumeration.md +160 -0
  356. package/docs/pl/packages/intlayer/getHTMLTextDir.md +121 -0
  357. package/docs/pl/packages/intlayer/getLocaleLang.md +81 -0
  358. package/docs/pl/packages/intlayer/getLocaleName.md +118 -0
  359. package/docs/pl/packages/intlayer/getLocalizedUrl.md +300 -0
  360. package/docs/pl/packages/intlayer/getMultilingualUrls.md +221 -0
  361. package/docs/pl/packages/intlayer/getPathWithoutLocale.md +75 -0
  362. package/docs/pl/packages/intlayer/getTranslation.md +190 -0
  363. package/docs/pl/packages/intlayer/getTranslationContent.md +189 -0
  364. package/docs/pl/packages/next-intlayer/t.md +353 -0
  365. package/docs/pl/packages/next-intlayer/useDictionary.md +270 -0
  366. package/docs/pl/packages/next-intlayer/useIntlayer.md +263 -0
  367. package/docs/pl/packages/next-intlayer/useLocale.md +166 -0
  368. package/docs/pl/packages/react-intlayer/t.md +303 -0
  369. package/docs/pl/packages/react-intlayer/useDictionary.md +289 -0
  370. package/docs/pl/packages/react-intlayer/useI18n.md +249 -0
  371. package/docs/pl/packages/react-intlayer/useIntlayer.md +256 -0
  372. package/docs/pl/packages/react-intlayer/useLocale.md +210 -0
  373. package/docs/pl/per_locale_file.md +321 -0
  374. package/docs/pl/readme.md +261 -0
  375. package/docs/pl/releases/v6.md +305 -0
  376. package/docs/pl/roadmap.md +362 -0
  377. package/docs/pl/testing.md +202 -0
  378. package/docs/pl/vs_code_extension.md +126 -0
  379. package/docs/pt/component_i18n.md +1 -1
  380. package/docs/pt/configuration.md +6 -0
  381. package/docs/pt/intlayer_cli.md +8 -3
  382. package/docs/pt/intlayer_with_next-i18next.md +627 -0
  383. package/docs/pt/intlayer_with_next-intl.md +446 -0
  384. package/docs/pt/intlayer_with_nextjs_16.md +21 -0
  385. package/docs/pt/intlayer_with_tanstack.md +4 -0
  386. package/docs/pt/intlayer_with_vite+react.md +4 -0
  387. package/docs/ru/component_i18n.md +1 -1
  388. package/docs/ru/configuration.md +6 -0
  389. package/docs/ru/intlayer_cli.md +301 -22
  390. package/docs/ru/intlayer_with_next-i18next.md +629 -0
  391. package/docs/ru/intlayer_with_next-intl.md +448 -0
  392. package/docs/ru/intlayer_with_nextjs_16.md +21 -0
  393. package/docs/ru/intlayer_with_tanstack.md +4 -0
  394. package/docs/ru/intlayer_with_vite+react.md +4 -0
  395. package/docs/tr/component_i18n.md +1 -1
  396. package/docs/tr/configuration.md +6 -0
  397. package/docs/tr/intlayer_cli.md +8 -0
  398. package/docs/tr/intlayer_with_next-i18next.md +627 -0
  399. package/docs/tr/intlayer_with_next-intl.md +446 -0
  400. package/docs/tr/intlayer_with_nextjs_16.md +21 -0
  401. package/docs/tr/intlayer_with_tanstack.md +4 -0
  402. package/docs/tr/intlayer_with_vite+react.md +4 -0
  403. package/docs/vi/CI_CD.md +198 -0
  404. package/docs/vi/autoFill.md +284 -0
  405. package/docs/vi/component_i18n.md +186 -0
  406. package/docs/vi/configuration.md +710 -0
  407. package/docs/vi/dictionary/condition.md +237 -0
  408. package/docs/vi/dictionary/content_file.md +1115 -0
  409. package/docs/vi/dictionary/enumeration.md +255 -0
  410. package/docs/vi/dictionary/file.md +234 -0
  411. package/docs/vi/dictionary/function_fetching.md +212 -0
  412. package/docs/vi/dictionary/gender.md +275 -0
  413. package/docs/vi/dictionary/insertion.md +191 -0
  414. package/docs/vi/dictionary/markdown.md +381 -0
  415. package/docs/vi/dictionary/nesting.md +273 -0
  416. package/docs/vi/dictionary/translation.md +309 -0
  417. package/docs/vi/formatters.md +595 -0
  418. package/docs/vi/how_works_intlayer.md +256 -0
  419. package/docs/vi/index.md +174 -0
  420. package/docs/vi/interest_of_intlayer.md +292 -0
  421. package/docs/vi/intlayer_CMS.md +549 -0
  422. package/docs/vi/intlayer_cli.md +850 -0
  423. package/docs/vi/intlayer_visual_editor.md +288 -0
  424. package/docs/vi/intlayer_with_angular.md +692 -0
  425. package/docs/vi/intlayer_with_astro.md +252 -0
  426. package/docs/vi/intlayer_with_create_react_app.md +1230 -0
  427. package/docs/vi/intlayer_with_express.md +409 -0
  428. package/docs/vi/intlayer_with_lynx+react.md +520 -0
  429. package/docs/vi/intlayer_with_nestjs.md +272 -0
  430. package/docs/vi/intlayer_with_next-i18next.md +628 -0
  431. package/docs/vi/intlayer_with_next-intl.md +446 -0
  432. package/docs/vi/intlayer_with_nextjs_14.md +1584 -0
  433. package/docs/vi/intlayer_with_nextjs_15.md +1738 -0
  434. package/docs/vi/intlayer_with_nextjs_16.md +21 -0
  435. package/docs/vi/intlayer_with_nextjs_page_router.md +1504 -0
  436. package/docs/vi/intlayer_with_nuxt.md +821 -0
  437. package/docs/vi/intlayer_with_react_native+expo.md +700 -0
  438. package/docs/vi/intlayer_with_react_router_v7.md +498 -0
  439. package/docs/vi/intlayer_with_tanstack.md +562 -0
  440. package/docs/vi/intlayer_with_vite+preact.md +1722 -0
  441. package/docs/vi/intlayer_with_vite+react.md +1407 -0
  442. package/docs/vi/intlayer_with_vite+solid.md +287 -0
  443. package/docs/vi/intlayer_with_vite+svelte.md +289 -0
  444. package/docs/vi/intlayer_with_vite+vue.md +1071 -0
  445. package/docs/vi/introduction.md +215 -0
  446. package/docs/vi/locale_mapper.md +242 -0
  447. package/docs/vi/mcp_server.md +211 -0
  448. package/docs/vi/packages/express-intlayer/t.md +457 -0
  449. package/docs/vi/packages/intlayer/getConfiguration.md +145 -0
  450. package/docs/vi/packages/intlayer/getEnumeration.md +162 -0
  451. package/docs/vi/packages/intlayer/getHTMLTextDir.md +121 -0
  452. package/docs/vi/packages/intlayer/getLocaleLang.md +81 -0
  453. package/docs/vi/packages/intlayer/getLocaleName.md +129 -0
  454. package/docs/vi/packages/intlayer/getLocalizedUrl.md +309 -0
  455. package/docs/vi/packages/intlayer/getMultilingualUrls.md +221 -0
  456. package/docs/vi/packages/intlayer/getPathWithoutLocale.md +75 -0
  457. package/docs/vi/packages/intlayer/getTranslation.md +201 -0
  458. package/docs/vi/packages/intlayer/getTranslationContent.md +188 -0
  459. package/docs/vi/packages/next-intlayer/t.md +352 -0
  460. package/docs/vi/packages/next-intlayer/useDictionary.md +273 -0
  461. package/docs/vi/packages/next-intlayer/useIntlayer.md +264 -0
  462. package/docs/vi/packages/next-intlayer/useLocale.md +166 -0
  463. package/docs/vi/packages/react-intlayer/t.md +304 -0
  464. package/docs/vi/packages/react-intlayer/useDictionary.md +288 -0
  465. package/docs/vi/packages/react-intlayer/useI18n.md +295 -0
  466. package/docs/vi/packages/react-intlayer/useIntlayer.md +256 -0
  467. package/docs/vi/packages/react-intlayer/useLocale.md +210 -0
  468. package/docs/vi/per_locale_file.md +326 -0
  469. package/docs/vi/readme.md +261 -0
  470. package/docs/vi/releases/v6.md +305 -0
  471. package/docs/vi/roadmap.md +346 -0
  472. package/docs/vi/testing.md +202 -0
  473. package/docs/vi/vs_code_extension.md +126 -0
  474. package/docs/zh/configuration.md +6 -0
  475. package/docs/zh/intlayer_cli.md +8 -3
  476. package/docs/zh/intlayer_with_next-i18next.md +628 -0
  477. package/docs/zh/intlayer_with_next-intl.md +448 -0
  478. package/docs/zh/intlayer_with_nextjs_16.md +21 -0
  479. package/docs/zh/intlayer_with_tanstack.md +4 -0
  480. package/docs/zh/intlayer_with_vite+react.md +4 -0
  481. package/frequent_questions/ar/SSR_Next_no_[locale].md +1 -2
  482. package/frequent_questions/ar/array_as_content_declaration.md +1 -2
  483. package/frequent_questions/ar/build_dictionaries.md +1 -2
  484. package/frequent_questions/ar/build_error_CI_CD.md +1 -2
  485. package/frequent_questions/ar/bun_set_up.md +1 -2
  486. package/frequent_questions/ar/customized_locale_list.md +1 -2
  487. package/frequent_questions/ar/domain_routing.md +1 -2
  488. package/frequent_questions/ar/esbuild_error.md +1 -2
  489. package/frequent_questions/ar/get_locale_cookie.md +1 -2
  490. package/frequent_questions/ar/intlayer_command_undefined.md +1 -2
  491. package/frequent_questions/ar/locale_incorect_in_url.md +1 -2
  492. package/frequent_questions/ar/static_rendering.md +1 -3
  493. package/frequent_questions/ar/translated_path_url.md +1 -2
  494. package/frequent_questions/ar/unknown_command.md +1 -2
  495. package/frequent_questions/de/SSR_Next_no_[locale].md +1 -2
  496. package/frequent_questions/de/array_as_content_declaration.md +1 -2
  497. package/frequent_questions/de/build_dictionaries.md +1 -2
  498. package/frequent_questions/de/build_error_CI_CD.md +1 -2
  499. package/frequent_questions/de/bun_set_up.md +1 -2
  500. package/frequent_questions/de/customized_locale_list.md +1 -2
  501. package/frequent_questions/de/domain_routing.md +1 -2
  502. package/frequent_questions/de/esbuild_error.md +1 -2
  503. package/frequent_questions/de/get_locale_cookie.md +1 -2
  504. package/frequent_questions/de/intlayer_command_undefined.md +1 -2
  505. package/frequent_questions/de/locale_incorect_in_url.md +1 -2
  506. package/frequent_questions/de/static_rendering.md +1 -3
  507. package/frequent_questions/de/translated_path_url.md +1 -2
  508. package/frequent_questions/de/unknown_command.md +1 -2
  509. package/frequent_questions/en/SSR_Next_no_[locale].md +1 -2
  510. package/frequent_questions/en/array_as_content_declaration.md +1 -2
  511. package/frequent_questions/en/build_dictionaries.md +1 -2
  512. package/frequent_questions/en/build_error_CI_CD.md +1 -2
  513. package/frequent_questions/en/bun_set_up.md +1 -2
  514. package/frequent_questions/en/customized_locale_list.md +1 -2
  515. package/frequent_questions/en/domain_routing.md +1 -2
  516. package/frequent_questions/en/esbuild_error.md +1 -2
  517. package/frequent_questions/en/get_locale_cookie.md +1 -2
  518. package/frequent_questions/en/intlayer_command_undefined.md +1 -2
  519. package/frequent_questions/en/locale_incorect_in_url.md +1 -2
  520. package/frequent_questions/en/static_rendering.md +1 -3
  521. package/frequent_questions/en/translated_path_url.md +1 -2
  522. package/frequent_questions/en/unknown_command.md +1 -2
  523. package/frequent_questions/en-GB/SSR_Next_no_[locale].md +1 -2
  524. package/frequent_questions/en-GB/array_as_content_declaration.md +1 -2
  525. package/frequent_questions/en-GB/build_dictionaries.md +1 -2
  526. package/frequent_questions/en-GB/build_error_CI_CD.md +1 -2
  527. package/frequent_questions/en-GB/bun_set_up.md +1 -2
  528. package/frequent_questions/en-GB/customized_locale_list.md +1 -2
  529. package/frequent_questions/en-GB/domain_routing.md +1 -2
  530. package/frequent_questions/en-GB/esbuild_error.md +1 -2
  531. package/frequent_questions/en-GB/get_locale_cookie.md +1 -2
  532. package/frequent_questions/en-GB/intlayer_command_undefined.md +1 -2
  533. package/frequent_questions/en-GB/locale_incorect_in_url.md +1 -2
  534. package/frequent_questions/en-GB/static_rendering.md +1 -3
  535. package/frequent_questions/en-GB/translated_path_url.md +1 -2
  536. package/frequent_questions/en-GB/unknown_command.md +1 -2
  537. package/frequent_questions/es/SSR_Next_no_[locale].md +1 -2
  538. package/frequent_questions/es/array_as_content_declaration.md +1 -2
  539. package/frequent_questions/es/build_dictionaries.md +1 -2
  540. package/frequent_questions/es/build_error_CI_CD.md +1 -2
  541. package/frequent_questions/es/bun_set_up.md +1 -2
  542. package/frequent_questions/es/customized_locale_list.md +1 -2
  543. package/frequent_questions/es/domain_routing.md +1 -2
  544. package/frequent_questions/es/esbuild_error.md +1 -2
  545. package/frequent_questions/es/get_locale_cookie.md +1 -2
  546. package/frequent_questions/es/intlayer_command_undefined.md +1 -2
  547. package/frequent_questions/es/locale_incorect_in_url.md +1 -2
  548. package/frequent_questions/es/static_rendering.md +1 -3
  549. package/frequent_questions/es/translated_path_url.md +1 -2
  550. package/frequent_questions/es/unknown_command.md +1 -2
  551. package/frequent_questions/fr/SSR_Next_no_[locale].md +1 -2
  552. package/frequent_questions/fr/array_as_content_declaration.md +1 -2
  553. package/frequent_questions/fr/build_dictionaries.md +1 -2
  554. package/frequent_questions/fr/build_error_CI_CD.md +1 -2
  555. package/frequent_questions/fr/bun_set_up.md +1 -2
  556. package/frequent_questions/fr/customized_locale_list.md +1 -2
  557. package/frequent_questions/fr/domain_routing.md +1 -2
  558. package/frequent_questions/fr/esbuild_error.md +1 -2
  559. package/frequent_questions/fr/get_locale_cookie.md +1 -2
  560. package/frequent_questions/fr/intlayer_command_undefined.md +1 -2
  561. package/frequent_questions/fr/locale_incorect_in_url.md +1 -2
  562. package/frequent_questions/fr/static_rendering.md +1 -3
  563. package/frequent_questions/fr/translated_path_url.md +1 -2
  564. package/frequent_questions/fr/unknown_command.md +1 -2
  565. package/frequent_questions/hi/SSR_Next_no_[locale].md +1 -2
  566. package/frequent_questions/hi/array_as_content_declaration.md +1 -2
  567. package/frequent_questions/hi/build_dictionaries.md +1 -2
  568. package/frequent_questions/hi/build_error_CI_CD.md +1 -2
  569. package/frequent_questions/hi/bun_set_up.md +1 -2
  570. package/frequent_questions/hi/customized_locale_list.md +1 -2
  571. package/frequent_questions/hi/domain_routing.md +1 -2
  572. package/frequent_questions/hi/esbuild_error.md +1 -2
  573. package/frequent_questions/hi/get_locale_cookie.md +1 -2
  574. package/frequent_questions/hi/intlayer_command_undefined.md +1 -2
  575. package/frequent_questions/hi/locale_incorect_in_url.md +1 -2
  576. package/frequent_questions/hi/static_rendering.md +1 -3
  577. package/frequent_questions/hi/translated_path_url.md +1 -2
  578. package/frequent_questions/hi/unknown_command.md +1 -2
  579. package/frequent_questions/id/SSR_Next_no_[locale].md +104 -0
  580. package/frequent_questions/id/array_as_content_declaration.md +71 -0
  581. package/frequent_questions/id/build_dictionaries.md +58 -0
  582. package/frequent_questions/id/build_error_CI_CD.md +74 -0
  583. package/frequent_questions/id/bun_set_up.md +53 -0
  584. package/frequent_questions/id/customized_locale_list.md +64 -0
  585. package/frequent_questions/id/domain_routing.md +113 -0
  586. package/frequent_questions/id/esbuild_error.md +29 -0
  587. package/frequent_questions/id/get_locale_cookie.md +142 -0
  588. package/frequent_questions/id/intlayer_command_undefined.md +155 -0
  589. package/frequent_questions/id/locale_incorect_in_url.md +73 -0
  590. package/frequent_questions/id/static_rendering.md +44 -0
  591. package/frequent_questions/id/translated_path_url.md +55 -0
  592. package/frequent_questions/id/unknown_command.md +97 -0
  593. package/frequent_questions/it/SSR_Next_no_[locale].md +1 -2
  594. package/frequent_questions/it/array_as_content_declaration.md +1 -2
  595. package/frequent_questions/it/build_dictionaries.md +1 -2
  596. package/frequent_questions/it/build_error_CI_CD.md +1 -2
  597. package/frequent_questions/it/bun_set_up.md +1 -2
  598. package/frequent_questions/it/customized_locale_list.md +1 -2
  599. package/frequent_questions/it/domain_routing.md +1 -2
  600. package/frequent_questions/it/esbuild_error.md +1 -2
  601. package/frequent_questions/it/get_locale_cookie.md +1 -2
  602. package/frequent_questions/it/intlayer_command_undefined.md +1 -2
  603. package/frequent_questions/it/locale_incorect_in_url.md +1 -2
  604. package/frequent_questions/it/static_rendering.md +1 -3
  605. package/frequent_questions/it/translated_path_url.md +1 -2
  606. package/frequent_questions/it/unknown_command.md +1 -2
  607. package/frequent_questions/ja/SSR_Next_no_[locale].md +1 -2
  608. package/frequent_questions/ja/array_as_content_declaration.md +1 -2
  609. package/frequent_questions/ja/build_dictionaries.md +1 -2
  610. package/frequent_questions/ja/build_error_CI_CD.md +1 -2
  611. package/frequent_questions/ja/bun_set_up.md +1 -2
  612. package/frequent_questions/ja/customized_locale_list.md +1 -2
  613. package/frequent_questions/ja/domain_routing.md +1 -2
  614. package/frequent_questions/ja/esbuild_error.md +1 -2
  615. package/frequent_questions/ja/get_locale_cookie.md +1 -2
  616. package/frequent_questions/ja/intlayer_command_undefined.md +1 -2
  617. package/frequent_questions/ja/locale_incorect_in_url.md +1 -2
  618. package/frequent_questions/ja/static_rendering.md +1 -3
  619. package/frequent_questions/ja/translated_path_url.md +1 -2
  620. package/frequent_questions/ja/unknown_command.md +1 -2
  621. package/frequent_questions/ko/SSR_Next_no_[locale].md +1 -2
  622. package/frequent_questions/ko/array_as_content_declaration.md +1 -2
  623. package/frequent_questions/ko/build_dictionaries.md +1 -2
  624. package/frequent_questions/ko/build_error_CI_CD.md +1 -2
  625. package/frequent_questions/ko/bun_set_up.md +1 -2
  626. package/frequent_questions/ko/customized_locale_list.md +1 -2
  627. package/frequent_questions/ko/domain_routing.md +1 -2
  628. package/frequent_questions/ko/esbuild_error.md +1 -2
  629. package/frequent_questions/ko/get_locale_cookie.md +1 -2
  630. package/frequent_questions/ko/intlayer_command_undefined.md +1 -2
  631. package/frequent_questions/ko/locale_incorect_in_url.md +1 -2
  632. package/frequent_questions/ko/static_rendering.md +1 -3
  633. package/frequent_questions/ko/translated_path_url.md +1 -2
  634. package/frequent_questions/ko/unknown_command.md +1 -2
  635. package/frequent_questions/pl/SSR_Next_no_[locale].md +104 -0
  636. package/frequent_questions/pl/array_as_content_declaration.md +71 -0
  637. package/frequent_questions/pl/build_dictionaries.md +58 -0
  638. package/frequent_questions/pl/build_error_CI_CD.md +74 -0
  639. package/frequent_questions/pl/bun_set_up.md +54 -0
  640. package/frequent_questions/pl/customized_locale_list.md +64 -0
  641. package/frequent_questions/pl/domain_routing.md +113 -0
  642. package/frequent_questions/pl/esbuild_error.md +29 -0
  643. package/frequent_questions/pl/get_locale_cookie.md +142 -0
  644. package/frequent_questions/pl/intlayer_command_undefined.md +155 -0
  645. package/frequent_questions/pl/locale_incorect_in_url.md +73 -0
  646. package/frequent_questions/pl/static_rendering.md +44 -0
  647. package/frequent_questions/pl/translated_path_url.md +55 -0
  648. package/frequent_questions/pl/unknown_command.md +97 -0
  649. package/frequent_questions/pt/SSR_Next_no_[locale].md +1 -2
  650. package/frequent_questions/pt/array_as_content_declaration.md +1 -2
  651. package/frequent_questions/pt/build_dictionaries.md +1 -2
  652. package/frequent_questions/pt/build_error_CI_CD.md +1 -2
  653. package/frequent_questions/pt/bun_set_up.md +1 -2
  654. package/frequent_questions/pt/customized_locale_list.md +1 -2
  655. package/frequent_questions/pt/domain_routing.md +1 -2
  656. package/frequent_questions/pt/esbuild_error.md +1 -2
  657. package/frequent_questions/pt/get_locale_cookie.md +1 -2
  658. package/frequent_questions/pt/intlayer_command_undefined.md +1 -2
  659. package/frequent_questions/pt/locale_incorect_in_url.md +1 -2
  660. package/frequent_questions/pt/static_rendering.md +1 -3
  661. package/frequent_questions/pt/translated_path_url.md +1 -2
  662. package/frequent_questions/pt/unknown_command.md +1 -2
  663. package/frequent_questions/ru/SSR_Next_no_[locale].md +1 -2
  664. package/frequent_questions/ru/array_as_content_declaration.md +1 -2
  665. package/frequent_questions/ru/build_dictionaries.md +1 -2
  666. package/frequent_questions/ru/build_error_CI_CD.md +1 -2
  667. package/frequent_questions/ru/bun_set_up.md +1 -2
  668. package/frequent_questions/ru/customized_locale_list.md +1 -2
  669. package/frequent_questions/ru/domain_routing.md +1 -2
  670. package/frequent_questions/ru/esbuild_error.md +1 -2
  671. package/frequent_questions/ru/get_locale_cookie.md +1 -2
  672. package/frequent_questions/ru/intlayer_command_undefined.md +1 -2
  673. package/frequent_questions/ru/locale_incorect_in_url.md +1 -2
  674. package/frequent_questions/ru/static_rendering.md +1 -2
  675. package/frequent_questions/ru/translated_path_url.md +1 -2
  676. package/frequent_questions/ru/unknown_command.md +1 -2
  677. package/frequent_questions/tr/SSR_Next_no_[locale].md +1 -2
  678. package/frequent_questions/tr/array_as_content_declaration.md +1 -2
  679. package/frequent_questions/tr/build_dictionaries.md +1 -2
  680. package/frequent_questions/tr/build_error_CI_CD.md +1 -2
  681. package/frequent_questions/tr/bun_set_up.md +1 -2
  682. package/frequent_questions/tr/customized_locale_list.md +1 -2
  683. package/frequent_questions/tr/domain_routing.md +1 -2
  684. package/frequent_questions/tr/esbuild_error.md +1 -2
  685. package/frequent_questions/tr/get_locale_cookie.md +1 -2
  686. package/frequent_questions/tr/intlayer_command_undefined.md +1 -2
  687. package/frequent_questions/tr/locale_incorect_in_url.md +1 -2
  688. package/frequent_questions/tr/static_rendering.md +1 -2
  689. package/frequent_questions/tr/translated_path_url.md +1 -2
  690. package/frequent_questions/tr/unknown_command.md +1 -2
  691. package/frequent_questions/vi/SSR_Next_no_[locale].md +106 -0
  692. package/frequent_questions/vi/array_as_content_declaration.md +71 -0
  693. package/frequent_questions/vi/build_dictionaries.md +58 -0
  694. package/frequent_questions/vi/build_error_CI_CD.md +74 -0
  695. package/frequent_questions/vi/bun_set_up.md +53 -0
  696. package/frequent_questions/vi/customized_locale_list.md +64 -0
  697. package/frequent_questions/vi/domain_routing.md +113 -0
  698. package/frequent_questions/vi/esbuild_error.md +29 -0
  699. package/frequent_questions/vi/get_locale_cookie.md +142 -0
  700. package/frequent_questions/vi/intlayer_command_undefined.md +155 -0
  701. package/frequent_questions/vi/locale_incorect_in_url.md +73 -0
  702. package/frequent_questions/vi/static_rendering.md +44 -0
  703. package/frequent_questions/vi/translated_path_url.md +55 -0
  704. package/frequent_questions/vi/unknown_command.md +97 -0
  705. package/frequent_questions/zh/SSR_Next_no_[locale].md +1 -2
  706. package/frequent_questions/zh/array_as_content_declaration.md +1 -2
  707. package/frequent_questions/zh/build_dictionaries.md +1 -2
  708. package/frequent_questions/zh/build_error_CI_CD.md +1 -2
  709. package/frequent_questions/zh/bun_set_up.md +1 -2
  710. package/frequent_questions/zh/customized_locale_list.md +1 -2
  711. package/frequent_questions/zh/domain_routing.md +1 -2
  712. package/frequent_questions/zh/esbuild_error.md +1 -2
  713. package/frequent_questions/zh/get_locale_cookie.md +1 -2
  714. package/frequent_questions/zh/intlayer_command_undefined.md +1 -2
  715. package/frequent_questions/zh/locale_incorect_in_url.md +1 -2
  716. package/frequent_questions/zh/static_rendering.md +1 -3
  717. package/frequent_questions/zh/translated_path_url.md +1 -2
  718. package/frequent_questions/zh/unknown_command.md +1 -2
  719. package/legal/id/privacy_notice.md +83 -0
  720. package/legal/id/terms_of_service.md +55 -0
  721. package/legal/pl/privacy_notice.md +83 -0
  722. package/legal/pl/terms_of_service.md +55 -0
  723. package/legal/vi/privacy_notice.md +83 -0
  724. package/legal/vi/terms_of_service.md +55 -0
  725. package/package.json +19 -18
  726. package/src/generated/blog.entry.ts +38 -0
@@ -0,0 +1,760 @@
1
+ ---
2
+ createdAt: 2025-11-01
3
+ updatedAt: 2025-11-01
4
+ title: Wie Sie Ihre Next.js-Anwendung mit next-intl internationalisieren
5
+ description: Richten Sie i18n mit next-intl ein: Best Practices und SEO-Tipps für mehrsprachige Next.js-Apps, einschließlich Internationalisierung, Inhaltsorganisation und technischer Einrichtung.
6
+ slugs:
7
+ - blog
8
+ - nextjs-internationalization-using-next-intl
9
+ applicationTemplate: https://github.com/aymericzip/next-intl-template
10
+ history:
11
+ - version: 7.0.0
12
+ date: 2025-11-01
13
+ changes: Erste Version
14
+ ---
15
+
16
+ # Wie Sie Ihre Next.js-Anwendung mit next-intl im Jahr 2025 internationalisieren
17
+
18
+ ## Inhaltsverzeichnis
19
+
20
+ <TOC/>
21
+
22
+ ## Was ist next-intl?
23
+
24
+ **next-intl** ist eine beliebte Internationalisierungsbibliothek (i18n), die speziell für den Next.js App Router entwickelt wurde. Sie bietet eine nahtlose Möglichkeit, mehrsprachige Next.js-Anwendungen mit exzellenter TypeScript-Unterstützung und integrierten Optimierungen zu erstellen.
25
+
26
+ > Wenn Sie möchten, können Sie auch den [next-i18next Leitfaden](https://github.com/aymericzip/intlayer/blob/main/docs/blog/de/i18n_using_next-i18next.md) oder direkt [Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/intlayer_with_next-intl.md) verwenden.
27
+
28
+ > Siehe den Vergleich in [next-i18next vs next-intl vs Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/de/next-i18next_vs_next-intl_vs_intlayer.md).
29
+
30
+ ## Praktiken, die Sie befolgen sollten
31
+
32
+ Bevor wir mit der Implementierung beginnen, sollten Sie folgende Praktiken beachten:
33
+
34
+ - **HTML-Attribute `lang` und `dir` setzen**
35
+ Berechnen Sie in Ihrem Layout `dir` mit `getLocaleDirection(locale)` und setzen Sie `<html lang={locale} dir={dir}>` für eine korrekte Barrierefreiheit und SEO.
36
+ - **Nach Namespace Nachrichten aufteilen**
37
+ Organisieren Sie JSON-Dateien pro Locale und Namespace (z. B. `common.json`, `about.json`), um nur das zu laden, was Sie benötigen.
38
+ - **Client-Payload minimieren**
39
+ Senden Sie auf Seiten nur die benötigten Namespaces an `NextIntlClientProvider` (z. B. `pick(messages, ['common', 'about'])`).
40
+ - **Statische Seiten bevorzugen**
41
+ Verwenden Sie statische Seiten so weit wie möglich für bessere Performance und SEO.
42
+ - **I18n in Server-Komponenten**
43
+ Server-Komponenten, wie Seiten oder alle Komponenten, die nicht als `client` markiert sind, sind statisch und können zur Build-Zeit vorgerendert werden. Daher müssen wir die Übersetzungsfunktionen als Props an sie übergeben.
44
+ - **TypeScript-Typen einrichten**
45
+ Für Ihre Locales, um Typensicherheit in Ihrer gesamten Anwendung zu gewährleisten.
46
+ - **Proxy für Weiterleitungen**
47
+ Verwenden Sie einen Proxy, um die Locale-Erkennung und das Routing zu handhaben und den Benutzer zur entsprechenden URL mit Locale-Präfix weiterzuleiten.
48
+ - **Internationalisierung Ihrer Metadaten, Sitemap, robots.txt**
49
+ Internationalisieren Sie Ihre Metadaten, Sitemap und robots.txt mit der von Next.js bereitgestellten Funktion `generateMetadata`, um eine bessere Auffindbarkeit durch Suchmaschinen in allen Locales sicherzustellen.
50
+ - **Links lokalisieren**
51
+ - **Links lokalisieren**
52
+ Lokalisieren Sie Links mit der `Link`-Komponente, um den Benutzer zur entsprechenden URL mit Locale-Präfix weiterzuleiten. Es ist wichtig, die Auffindbarkeit Ihrer Seiten in allen Locales sicherzustellen.
53
+ - **Tests und Übersetzungen automatisieren**
54
+ Die Automatisierung von Tests und Übersetzungen hilft, Zeit zu sparen und die Wartung Ihrer mehrsprachigen Anwendung zu erleichtern.
55
+
56
+ > Siehe unsere Dokumentation, die alles auflistet, was Sie über Internationalisierung und SEO wissen müssen: [Internationalisierung (i18n) mit next-intl](https://github.com/aymericzip/intlayer/blob/main/docs/blog/de/internationalization_and_SEO.md).
57
+
58
+ ---
59
+
60
+ ## Schritt-für-Schritt-Anleitung zur Einrichtung von next-intl in einer Next.js-Anwendung
61
+
62
+ <iframe
63
+ src="https://stackblitz.com/github/aymericzip/next-intl-template?embed=1&ctl=1&file=src/i18n.ts"
64
+ className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
65
+ title="Demo CodeSandbox - Wie Sie Ihre Anwendung mit Intlayer internationalisieren"
66
+ sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
67
+ loading="lazy"
68
+ />
69
+
70
+ > Siehe [Application Template](https://github.com/aymericzip/next-intl-template) auf GitHub.
71
+
72
+ Hier ist die Projektstruktur, die wir erstellen werden:
73
+
74
+ ```bash
75
+ .
76
+ ├── global.ts
77
+ ├── locales
78
+ │ ├── en
79
+ │ │ ├── common.json
80
+ │ │ └── about.json
81
+ │ ├── fr
82
+ │ │ ├── common.json
83
+ │ │ └── about.json
84
+ │ └── es
85
+ │ ├── common.json
86
+ │ └── about.json
87
+ └── src # Src ist optional
88
+ ├── proxy.ts
89
+ ├── app
90
+ │ ├── i18n.ts
91
+ │ └── [locale]
92
+ │ ├── layout.tsx
93
+ │ ├── (home) # / (Routengruppe, um nicht alle Seiten mit Home-Ressourcen zu belasten)
94
+ │ │ ├── layout.tsx
95
+ │ │ └── page.tsx
96
+ │ └── about # /about
97
+ │ ├── layout.tsx
98
+ │ └── page.tsx
99
+ └── components
100
+ ├── ClientComponent.tsx
101
+ └── ServerComponent.tsx
102
+ ```
103
+
104
+ ### Schritt 1: Abhängigkeiten installieren
105
+
106
+ Installieren Sie die notwendigen Pakete mit npm:
107
+
108
+ ```bash packageManager="npm"
109
+ npm install next-intl
110
+ ```
111
+
112
+ ```bash packageManager="pnpm"
113
+ pnpm add next-intl
114
+ ```
115
+
116
+ ```bash packageManager="yarn"
117
+ yarn add next-intl
118
+ ```
119
+
120
+ - **next-intl**: Die zentrale Internationalisierungsbibliothek für den Next.js App Router, die Hooks, Serverfunktionen und Client-Provider zur Verwaltung von Übersetzungen bereitstellt.
121
+
122
+ ### Schritt 2: Projekt konfigurieren
123
+
124
+ Erstellen Sie eine Konfigurationsdatei, die Ihre unterstützten Sprachen definiert und die next-intl-Anfragekonfiguration einrichtet. Diese Datei dient als einzige Quelle der Wahrheit für Ihre i18n-Konfiguration und gewährleistet Typensicherheit in Ihrer gesamten Anwendung.
125
+
126
+ Die Zentralisierung Ihrer Sprachkonfiguration verhindert Inkonsistenzen und erleichtert das Hinzufügen oder Entfernen von Sprachen in der Zukunft. Die Funktion `getRequestConfig` wird bei jeder Anfrage ausgeführt und lädt nur die für jede Seite benötigten Übersetzungen, was Code-Splitting ermöglicht und die Bundle-Größe reduziert.
127
+
128
+ ```tsx fileName="src/i18n.ts"
129
+ import { notFound } from "next/navigation";
130
+ import createMiddleware from "next-intl/middleware";
131
+ import { createNavigation } from "next-intl/navigation";
132
+
133
+ // Definieren Sie unterstützte Sprachen mit Typensicherheit
134
+ export const locales = ["en", "fr", "es"] as const;
135
+ export type Locale = (typeof locales)[number];
136
+ export const defaultLocale: Locale = "en";
137
+
138
+ export function isRTL(locale: Locale | (string & {})) {
139
+ // Prüft, ob die Sprache von rechts nach links gelesen wird
140
+ return /^(ar|fa|he|iw|ur|ps|sd|ug|yi|ckb|ku)(-|$)/i.test(locale);
141
+ }
142
+
143
+ // Lädt Nachrichten dynamisch pro Locale, um Code-Splitting zu ermöglichen
144
+ // Promise.all lädt Namespaces parallel für bessere Performance
145
+ async function loadMessages(locale: Locale) {
146
+ // Lädt nur die Namespaces, die Ihr Layout/Ihre Seiten benötigen
147
+ const [common, home, about] = await Promise.all([
148
+ import(`../locales/${locale}/common.json`).then((m) => m.default),
149
+ import(`../locales/${locale}/home.json`).then((m) => m.default),
150
+ import(`../locales/${locale}/about.json`).then((m) => m.default),
151
+ // ... Zukünftige JSON-Dateien sollten hier hinzugefügt werden
152
+ ]);
153
+
154
+ return { common, home, about } as const;
155
+ }
156
+
157
+ // Helferfunktion zur Erzeugung lokalisierter URLs (z.B. /about vs /fr/about)
158
+ export function localizedPath(locale: string, path: string) {
159
+ return locale === defaultLocale ? path : `/${locale}${path}`;
160
+ }
161
+
162
+ // getRequestConfig wird bei jeder Anfrage ausgeführt und stellt Nachrichten für Server-Komponenten bereit
163
+ // Hier verbindet sich next-intl mit dem Server-Side Rendering von Next.js
164
+ export default async function getRequestConfig({
165
+ requestLocale,
166
+ }: {
167
+ requestLocale: Promise<string | undefined>;
168
+ }) {
169
+ const requested: Locale = ((await requestLocale) as Locale) ?? defaultLocale;
170
+
171
+ if (!locales.includes(requested)) notFound();
172
+
173
+ return {
174
+ locale: requested,
175
+ messages: await loadMessages(requested),
176
+ };
177
+ }
178
+
179
+ export function getCookie(locale: Locale) {
180
+ return [
181
+ `NEXT_LOCALE=${locale}`,
182
+ "Path=/",
183
+ `Max-Age=${60 * 60 * 24 * 365}`, // 1 Jahr
184
+ "SameSite=Lax",
185
+ ].join("; ");
186
+ }
187
+
188
+ const routingOptions = {
189
+ locales,
190
+ defaultLocale,
191
+ localePrefix: "as-needed", // Ändert die Route /en/... zu /...
192
+ // Optional: lokalisierte Pfadnamen
193
+ // pathnames: {
194
+ // '/': '/',
195
+ // '/about': {en: '/about', fr: '/a-propos', es: '/acerca-de'},
196
+ // '/blog/[slug]': '/blog/[slug]'
197
+ // }
198
+ // localeDetection: true, // verhindert Weiterleitungen von "/" zu "/en" basierend auf Cookies
199
+ } as const;
200
+
201
+ export const { Link, redirect, usePathname, useRouter, getPathname } =
202
+ createNavigation(routingOptions);
203
+
204
+ export const proxy = createMiddleware(routingOptions);
205
+ ```
206
+
207
+ ### Schritt 3: Dynamische Locale-Routen definieren
208
+
209
+ Richten Sie die dynamische Routenführung für Sprachen ein, indem Sie im App-Ordner ein Verzeichnis `[locale]` erstellen. Dadurch kann Next.js sprachabhängige Routen verwalten, bei denen jede Sprache ein URL-Segment wird (z. B. `/en/about`, `/fr/about`).
210
+
211
+ Die Verwendung dynamischer Routen ermöglicht es Next.js, statische Seiten für alle Sprachen zur Build-Zeit zu generieren, was die Leistung und SEO verbessert. Die Layout-Komponente setzt die HTML-Attribute `lang` und `dir` basierend auf der Sprache, was für Barrierefreiheit und das Verständnis durch Suchmaschinen entscheidend ist.
212
+
213
+ ```tsx fileName="src/app/[locale]/layout.tsx"
214
+ import type { ReactNode } from "react";
215
+ import { locales } from "@/i18n";
216
+ import { getLocaleDirection, setRequestLocale } from "next-intl/server";
217
+
218
+ // Statische Seiten für alle Sprachen zur Build-Zeit vorab generieren (SSG)
219
+ // Dies verbessert die Leistung und SEO
220
+ export function generateStaticParams() {
221
+ return locales.map((locale) => ({ locale }));
222
+ }
223
+
224
+ export default function LocaleLayout({
225
+ children,
226
+ params,
227
+ }: {
228
+ children: ReactNode;
229
+ params: Promise<{ locale: string }>;
230
+ }) {
231
+ // Im Next.js App Router ist params ein Promise (kann mit await aufgelöst werden)
232
+ // Dies ermöglicht es, dynamische Routenabschnitte asynchron zu verarbeiten
233
+ const { locale } = await params;
234
+
235
+ // Wichtig: setRequestLocale teilt next-intl mit, welche Locale für diese Anfrage verwendet werden soll
236
+ // Ohne dies weiß getTranslations() nicht, welche Locale in Server-Komponenten verwendet werden soll
237
+ setRequestLocale(locale);
238
+
239
+ // Bestimme die Schreibrichtung (LTR/RTL) für korrektes HTML-Rendering
240
+ const dir = getLocaleDirection(locale);
241
+
242
+ return (
243
+ <html lang={locale} dir={dir}>
244
+ <body>{children}</body>
245
+ </html>
246
+ );
247
+ }
248
+ }
249
+ ```
250
+
251
+ ```tsx fileName="src/app/[locale]/about/page.tsx"
252
+ import { getTranslations, getMessages, getFormatter } from "next-intl/server";
253
+ import { NextIntlClientProvider } from "next-intl";
254
+ import pick from "lodash/pick";
255
+ import ServerComponent from "@/components/ServerComponent";
256
+ import ClientComponent from "@/components/ClientComponent";
257
+
258
+ export default async function AboutPage({
259
+ params,
260
+ }: {
261
+ params: Promise<{ locale: string }>;
262
+ }) {
263
+ const { locale } = await params;
264
+
265
+ // Nachrichten werden serverseitig geladen. Nur das Nötige an den Client senden.
266
+ // Dies minimiert das an den Browser gesendete JavaScript-Bündel
267
+ const messages = await getMessages();
268
+ const clientMessages = pick(messages, ["common", "about"]);
269
+
270
+ // Streng serverseitige Übersetzungen/Formatierungen
271
+ // Diese laufen auf dem Server und können als Props an Komponenten übergeben werden
272
+ const tAbout = await getTranslations("about");
273
+ const tCounter = await getTranslations("about.counter");
274
+ const format = await getFormatter();
275
+
276
+ const initialFormattedCount = format.number(0);
277
+
278
+ return (
279
+ // NextIntlClientProvider macht Übersetzungen für Client-Komponenten verfügbar
280
+ // Übergebe nur die Namespaces, die deine Client-Komponenten tatsächlich verwenden
281
+ <NextIntlClientProvider locale={locale} messages={clientMessages}>
282
+ <main>
283
+ <h1>{tAbout("title")}</h1>
284
+ <ClientComponent />
285
+ <ServerComponent
286
+ formattedCount={initialFormattedCount}
287
+ label={tCounter("label")}
288
+ increment={tCounter("increment")}
289
+ />
290
+ </main>
291
+ </NextIntlClientProvider>
292
+ );
293
+ }
294
+ ```
295
+
296
+ ### Schritt 4: Erstellen Sie Ihre Übersetzungsdateien
297
+
298
+ Erstellen Sie JSON-Dateien für jede Locale und jeden Namespace. Diese Struktur ermöglicht es Ihnen, Übersetzungen logisch zu organisieren und nur das zu laden, was Sie für jede Seite benötigen.
299
+
300
+ Die Organisation der Übersetzungen nach Namespace (z. B. `common.json`, `about.json`) ermöglicht Code-Splitting und reduziert die Bundle-Größe. Sie laden nur die Übersetzungen, die für jede Seite benötigt werden, was die Leistung verbessert.
301
+
302
+ ```json fileName="locales/en/common.json"
303
+ {
304
+ "welcome": "Welcome",
305
+ "greeting": "Hello, world!"
306
+ }
307
+ ```
308
+
309
+ ```json fileName="locales/fr/common.json"
310
+ {
311
+ "welcome": "Bienvenue",
312
+ "greeting": "Bonjour le monde!"
313
+ }
314
+ ```
315
+
316
+ ```json fileName="locales/en/about.json"
317
+ {
318
+ "title": "About",
319
+ "description": "About page description",
320
+ "counter": {
321
+ "label": "Counter",
322
+ "increment": "Increment"
323
+ }
324
+ }
325
+ ```
326
+
327
+ ```json fileName="locales/fr/about.json"
328
+ {
329
+ "title": "À propos",
330
+ "description": "Description de la page À propos",
331
+ "counter": {
332
+ "label": "Compteur",
333
+ "increment": "Incrémenter"
334
+ }
335
+ }
336
+ ```
337
+
338
+ ### Schritt 5: Übersetzungen in Ihren Seiten verwenden
339
+
340
+ Erstellen Sie eine Seitenkomponente, die Übersetzungen auf dem Server lädt und sowohl an Server- als auch an Client-Komponenten weitergibt. Dies stellt sicher, dass Übersetzungen vor dem Rendern geladen werden und verhindert das Aufblitzen von Inhalten.
341
+
342
+ Das serverseitige Laden von Übersetzungen verbessert die SEO und verhindert FOUC (Flash of Untranslated Content). Durch die Verwendung von `pick`, um nur die benötigten Namespaces an den Client-Provider zu senden, minimieren wir das an den Browser gesendete JavaScript-Bündel.
343
+
344
+ ```tsx fileName="src/app/[locale]/about/page.tsx"
345
+ import { getTranslations, getMessages, getFormatter } from "next-intl/server";
346
+ import { NextIntlClientProvider } from "next-intl";
347
+ import pick from "lodash/pick";
348
+ import ServerComponent from "@/components/ServerComponent";
349
+ import ClientComponent from "@/components/ClientComponent";
350
+
351
+ export default async function AboutPage({
352
+ params,
353
+ }: {
354
+ params: Promise<{ locale: string }>;
355
+ }) {
356
+ const { locale } = await params;
357
+
358
+ // Nachrichten werden serverseitig geladen. Sende nur das, was der Client benötigt.
359
+ // Dies minimiert das an den Browser gesendete JavaScript-Bündel
360
+ const messages = await getMessages();
361
+ const clientMessages = pick(messages, ["common", "about"]);
362
+
363
+ // Ausschließlich serverseitige Übersetzungen/Formatierungen
364
+ // Diese laufen auf dem Server und können als Props an Komponenten übergeben werden
365
+ const tAbout = await getTranslations("about");
366
+ const tCounter = await getTranslations("about.counter");
367
+ const format = await getFormatter();
368
+
369
+ const initialFormattedCount = format.number(0);
370
+
371
+ return (
372
+ // NextIntlClientProvider stellt Übersetzungen für Client-Komponenten bereit
373
+ // Übergebe nur die Namespaces, die deine Client-Komponenten tatsächlich verwenden
374
+ <NextIntlClientProvider locale={locale} messages={clientMessages}>
375
+ <main>
376
+ <h1>{tAbout("title")}</h1>
377
+ <ClientComponent />
378
+ <ServerComponent
379
+ formattedCount={initialFormattedCount}
380
+ label={tCounter("label")}
381
+ increment={tCounter("increment")}
382
+ />
383
+ </main>
384
+ </NextIntlClientProvider>
385
+ );
386
+ }
387
+ ```
388
+
389
+ ### Schritt 6: Übersetzungen in Client-Komponenten verwenden
390
+
391
+ Client-Komponenten können die Hooks `useTranslations` und `useFormatter` verwenden, um auf Übersetzungen und Formatierungsfunktionen zuzugreifen. Diese Hooks lesen aus dem `NextIntlClientProvider`-Kontext.
392
+
393
+ Client-Komponenten benötigen React-Hooks, um auf Übersetzungen zuzugreifen. Die Hooks `useTranslations` und `useFormatter` integrieren sich nahtlos mit next-intl und bieten reaktive Aktualisierungen, wenn sich die Locale ändert.
394
+
395
+ > Vergessen Sie nicht, die erforderlichen Namespaces zu den Client-Nachrichten der Seite hinzuzufügen (nur die Namespaces einbeziehen, die Ihre Client-Komponenten tatsächlich benötigen).
396
+
397
+ ```tsx fileName="src/components/ClientComponent.tsx"
398
+ "use client";
399
+
400
+ import React, { useState } from "react";
401
+ import { useTranslations, useFormatter } from "next-intl";
402
+
403
+ const ClientComponent = () => {
404
+ // Direkt auf das verschachtelte Objekt zugreifen
405
+ // useTranslations/useFormatter sind Hooks, die aus dem NextIntlClientProvider-Kontext lesen
406
+ // Sie funktionieren nur, wenn die Komponente in NextIntlClientProvider eingebettet ist
407
+ const t = useTranslations("about.counter");
408
+ const format = useFormatter();
409
+ const [count, setCount] = useState(0);
410
+
411
+ return (
412
+ <div>
413
+ <p>{format.number(count)}</p>
414
+ <button
415
+ aria-label={t("label")}
416
+ onClick={() => setCount((count) => count + 1)}
417
+ >
418
+ {t("increment")}
419
+ </button>
420
+ </div>
421
+ );
422
+ };
423
+ ```
424
+
425
+ ### Schritt 7: Übersetzungen in Server-Komponenten verwenden
426
+
427
+ Server-Komponenten können keine React-Hooks verwenden, daher erhalten sie Übersetzungen und Formatierer über Props von ihren übergeordneten Komponenten. Dieser Ansatz hält Server-Komponenten synchron und ermöglicht es, sie innerhalb von Client-Komponenten zu verschachteln.
428
+
429
+ Server-Komponenten, die möglicherweise innerhalb von Client-Grenzen verschachtelt sind, müssen synchron sein. Durch das Übergeben von übersetzten Strings und formatierten Werten als Props vermeiden wir asynchrone Operationen und gewährleisten eine korrekte Darstellung. Übersetzungen und Formatierungen sollten in der übergeordneten Seitenkomponente vorab berechnet werden.
430
+
431
+ ```tsx fileName="src/components/ServerComponent.tsx"
432
+ // Server-Komponenten, die innerhalb von Client-Komponenten verschachtelt sind, müssen synchron sein
433
+ // React kann asynchrone Funktionen nicht über die Server/Client-Grenze serialisieren
434
+ // Lösung: Übersetzungen/Formate in der übergeordneten Komponente vorab berechnen und als Props übergeben
435
+ type ServerComponentProps = {
436
+ formattedCount: string;
437
+ label: string;
438
+ increment: string;
439
+ };
440
+
441
+ const ServerComponent = ({
442
+ formattedCount,
443
+ label,
444
+ increment,
445
+ }: ServerComponentProps) => {
446
+ return (
447
+ <div>
448
+ <p>{formattedCount}</p>
449
+ <button aria-label={label}>{increment}</button>
450
+ </div>
451
+ );
452
+ };
453
+ ```
454
+
455
+ > Verwenden Sie in Ihrer Seite/Layout `getTranslations` und `getFormatter` aus `next-intl/server`, um Übersetzungen und Formatierungen vorab zu berechnen und diese dann als Props an Server-Komponenten zu übergeben.
456
+
457
+ ---
458
+
459
+ ### (Optional) Schritt 8: Ändern Sie die Sprache Ihres Inhalts
460
+
461
+ Um die Sprache Ihres Inhalts mit next-intl zu ändern, rendern Sie lokalisierungsbewusste Links, die auf denselben Pfadnamen zeigen, während die Locale gewechselt wird. Der Provider schreibt URLs automatisch um, sodass Sie nur die aktuelle Route anvisieren müssen.
462
+
463
+ ```tsx fileName="src/components/LocaleSwitcher.tsx"
464
+ "use client";
465
+
466
+ import Link from "next/link";
467
+ import { usePathname } from "next/navigation";
468
+ import { useLocale } from "next-intl";
469
+ import { defaultLocale, getCookie, type Locale, locales } from "@/i18n";
470
+
471
+ const getLocaleLabel = (locale: Locale): string => {
472
+ try {
473
+ const displayNames = new Intl.DisplayNames([locale], { type: "language" });
474
+ return displayNames.of(locale) ?? locale.toUpperCase();
475
+ } catch {
476
+ return locale.toUpperCase();
477
+ }
478
+ };
479
+
480
+ const localeFlags: Record<Locale, string> = {
481
+ en: "🇬🇧",
482
+ fr: "🇫🇷",
483
+ es: "🇪🇸",
484
+ };
485
+
486
+ export default function LocaleSwitcher() {
487
+ const activeLocale = useLocale();
488
+ const pathname = usePathname();
489
+
490
+ // Entfernt das Sprachpräfix vom Pfad, um den Basis-Pfad zu erhalten
491
+ const getBasePath = (path: string) => {
492
+ for (const locale of locales) {
493
+ if (path.startsWith(`/${locale}`)) {
494
+ return path.slice(locale.length + 1) || "/";
495
+ }
496
+ }
497
+ return path;
498
+ };
499
+
500
+ const basePath = getBasePath(pathname);
501
+
502
+ return (
503
+ <nav aria-label="Sprachauswahl">
504
+ <div>
505
+ {(locales as readonly Locale[]).map((locale) => {
506
+ const isActive = locale === activeLocale;
507
+ // Erstelle den href basierend darauf, ob es die Standardsprache ist
508
+ const href =
509
+ locale === defaultLocale ? basePath : `/${locale}${basePath}`;
510
+ return (
511
+ <Link
512
+ key={locale}
513
+ href={href}
514
+ aria-current={isActive ? "page" : undefined}
515
+ onClick={() => {
516
+ document.cookie = getCookie(locale);
517
+ }}
518
+ >
519
+ <span>{localeFlags[locale]}</span>
520
+ <span>{getLocaleLabel(locale)}</span>
521
+ <span>{locale.toUpperCase()}</span>
522
+ </Link>
523
+ );
524
+ })}
525
+ </div>
526
+ </nav>
527
+ );
528
+ }
529
+ ```
530
+
531
+ ### (Optional) Schritt 9: Verwenden Sie die lokalisierte Link-Komponente
532
+
533
+ `next-intl` stellt ein Unterpaket `next-intl/navigation` bereit, das eine lokalisierte Link-Komponente enthält, die automatisch die aktive Locale anwendet. Wir haben sie bereits für Sie in der Datei `@/i18n` extrahiert, sodass Sie sie wie folgt verwenden können:
534
+
535
+ ```tsx fileName="src/components/MyComponent.tsx"
536
+ import { Link } from "@/i18n";
537
+
538
+ return <Link href="/about">t("about.title")</Link>;
539
+ ```
540
+
541
+ ### (Optional) Schritt 10: Zugriff auf die aktive Locale innerhalb von Server Actions
542
+
543
+ Server Actions können die aktuelle Locale mit `next-intl/server` auslesen. Dies ist nützlich, um lokalisierte E-Mails zu versenden oder Spracheinstellungen zusammen mit übermittelten Daten zu speichern.
544
+
545
+ ```ts fileName="src/app/actions/get-current-locale.ts"
546
+ "use server";
547
+
548
+ import { getLocale } from "next-intl/server";
549
+
550
+ export async function getCurrentLocale() {
551
+ return getLocale();
552
+ }
553
+
554
+ export async function handleContactForm(formData: FormData) {
555
+ const locale = await getCurrentLocale();
556
+
557
+ // Verwenden Sie die Locale, um Vorlagen, Analyseetiketten usw. auszuwählen.
558
+ console.log(`Kontaktformular aus Locale ${locale} erhalten`);
559
+ }
560
+ ```
561
+
562
+ > `getLocale` liest die von `next-intl` Proxy gesetzte Locale, daher funktioniert es überall auf dem Server: Route Handlers, Server Actions und Edge-Funktionen.
563
+
564
+ ### (Optional) Schritt 11: Internationalisieren Sie Ihre Metadaten
565
+
566
+ Das Übersetzen von Inhalten ist wichtig, aber das Hauptziel der Internationalisierung besteht darin, Ihre Website für die Welt sichtbarer zu machen. I18n ist ein unglaublicher Hebel, um die Sichtbarkeit Ihrer Website durch korrektes SEO zu verbessern.
567
+
568
+ Richtig internationalisierte Metadaten helfen Suchmaschinen zu verstehen, welche Sprachen auf Ihren Seiten verfügbar sind. Dies umfasst das Setzen von hreflang-Meta-Tags, das Übersetzen von Titeln und Beschreibungen sowie das Sicherstellen, dass kanonische URLs für jede Locale korrekt gesetzt sind.
569
+
570
+ ```tsx fileName="src/app/[locale]/about/layout.tsx"
571
+ import type { Metadata } from "next";
572
+ import { locales, defaultLocale, localizedPath } from "@/i18n";
573
+ import { getTranslations } from "next-intl/server";
574
+
575
+ // generateMetadata wird für jede Locale ausgeführt und erzeugt SEO-freundliche Metadaten
576
+ // Dies hilft Suchmaschinen, alternative Sprachversionen zu verstehen
577
+ export async function generateMetadata({
578
+ params,
579
+ }: {
580
+ params: { locale: string };
581
+ }): Promise<Metadata> {
582
+ const { locale } = params;
583
+ const t = await getTranslations({ locale, namespace: "about" });
584
+
585
+ const url = "/about";
586
+ const languages = Object.fromEntries(
587
+ locales.map((locale) => [locale, localizedPath(locale, url)])
588
+ );
589
+
590
+ return {
591
+ title: t("title"),
592
+ description: t("description"),
593
+ alternates: {
594
+ canonical: localizedPath(locale, url),
595
+ languages: { ...languages, "x-default": url },
596
+ },
597
+ };
598
+ }
599
+
600
+ // ... Restlicher Seiten-Code
601
+ ```
602
+
603
+ ### (Optional) Schritt 12: Internationalisieren Sie Ihre Sitemap
604
+
605
+ Erstellen Sie eine Sitemap, die alle Sprachversionen Ihrer Seiten enthält. Dies hilft Suchmaschinen, alle Sprachversionen Ihrer Inhalte zu entdecken und zu indexieren.
606
+
607
+ Eine richtig internationalisierte Sitemap stellt sicher, dass Suchmaschinen alle Sprachversionen Ihrer Seiten finden und indexieren können. Dies verbessert die Sichtbarkeit in internationalen Suchergebnissen.
608
+
609
+ ```tsx fileName="src/app/sitemap.ts"
610
+ import type { MetadataRoute } from "next";
611
+ import { defaultLocale, locales } from "@/i18n";
612
+
613
+ const origin = "https://example.com";
614
+
615
+ const formatterLocalizedPath = (locale: string, path: string) =>
616
+ locale === defaultLocale ? `${origin}${path}` : `${origin}/${locale}${path}`;
617
+
618
+ /**
619
+ * Gibt eine Zuordnung aller Sprachen und ihrer lokalisierten Pfade zurück
620
+ *
621
+ * Beispielausgabe:
622
+ * {
623
+ * "en": "https://example.com",
624
+ * "fr": "https://example.com/fr",
625
+ * "es": "https://example.com/es",
626
+ * "x-default": "https://example.com"
627
+ * }
628
+ */
629
+ const getLocalizedMap = (path: string) =>
630
+ Object.fromEntries([
631
+ ...locales.map((locale) => [locale, formatterLocalizedPath(locale, path)]),
632
+ ["x-default", formatterLocalizedPath(defaultLocale, path)],
633
+ ]);
634
+
635
+ // Generiere eine Sitemap mit allen Sprachvarianten für bessere SEO
636
+ // Das Feld "alternates" informiert Suchmaschinen über Sprachversionen
637
+ export default function sitemap(): MetadataRoute.Sitemap {
638
+ return [
639
+ {
640
+ url: formatterLocalizedPath(defaultLocale, "/"),
641
+ lastModified: new Date(),
642
+ changeFrequency: "monthly",
643
+ priority: 1.0,
644
+ alternates: { languages: getLocalizedMap("/") },
645
+ },
646
+ {
647
+ url: formatterLocalizedPath(defaultLocale, "/about"),
648
+ lastModified: new Date(),
649
+ changeFrequency: "monthly",
650
+ priority: 0.7,
651
+ alternates: { languages: getLocalizedMap("/about") },
652
+ },
653
+ ];
654
+ }
655
+ ```
656
+
657
+ ### (Optional) Schritt 13: Internationalisieren Sie Ihre robots.txt
658
+
659
+ Erstellen Sie eine robots.txt-Datei, die alle Sprachversionen Ihrer geschützten Routen korrekt behandelt. Dies stellt sicher, dass Suchmaschinen keine Admin- oder Dashboard-Seiten in irgendeiner Sprache indexieren.
660
+
661
+ Eine ordnungsgemäße Konfiguration der robots.txt für alle Sprachen verhindert, dass Suchmaschinen sensible Seiten indexieren, wenn Ihre Routen für jede Sprache unterschiedlich sind.
662
+
663
+ ```tsx fileName="src/app/robots.ts"
664
+ import type { MetadataRoute } from "next";
665
+ import { locales, defaultLocale } from "@/i18n";
666
+
667
+ const origin = "https://example.com";
668
+ // Erzeuge Pfade für alle Sprachen (z.B. /admin, /fr/admin, /es/admin)
669
+ const withAllLocales = (path: string) => [
670
+ path,
671
+ ...locales
672
+ .filter((locale) => locale !== defaultLocale)
673
+ .map((locale) => "/" + locale + path),
674
+ ];
675
+
676
+ export default function robots(): MetadataRoute.Robots {
677
+ const disallow = [
678
+ ...withAllLocales("/dashboard"),
679
+ ...withAllLocales("/admin"),
680
+ ];
681
+
682
+ return {
683
+ rules: { userAgent: "*", allow: ["/"], disallow },
684
+ host: origin,
685
+ sitemap: origin + "/sitemap.xml",
686
+ };
687
+ }
688
+ ```
689
+
690
+ ### (Optional) Schritt 14: Proxy für Locale Routing einrichten
691
+
692
+ Erstellen Sie einen Proxy, der automatisch die bevorzugte Locale des Benutzers erkennt und ihn zur entsprechenden URL mit Locale-Präfix weiterleitet. next-intl stellt eine praktische Proxy-Funktion bereit, die dies automatisch übernimmt.
693
+
694
+ Proxy stellt sicher, dass Benutzer beim Besuch Ihrer Website automatisch auf ihre bevorzugte Sprache weitergeleitet werden. Außerdem wird die Präferenz des Benutzers für zukünftige Besuche gespeichert, was die Benutzererfahrung verbessert.
695
+
696
+ ```ts fileName="src/proxy.ts"
697
+ import { proxy } from "@/i18n";
698
+
699
+ // Middleware läuft vor den Routen und behandelt die Lokalerkennung und das Routing
700
+ // localeDetection: true verwendet den Accept-Language-Header zur automatischen Lokalerkennung
701
+ export default proxy;
702
+
703
+ export const config = {
704
+ // API, Next-Interna und statische Assets überspringen
705
+ // Regex: passt auf alle Routen außer denen, die mit api, _next beginnen oder einen Punkt (Dateien) enthalten
706
+ matcher: ["/((?!api|_next|.*\\..*).*)"],
707
+ };
708
+ ```
709
+
710
+ ### (Optional) Schritt 15: TypeScript-Typen für die Locale einrichten
711
+
712
+ Die Einrichtung von TypeScript hilft Ihnen, Autovervollständigung und Typsicherheit für Ihre Schlüssel zu erhalten.
713
+
714
+ Dafür können Sie eine Datei global.ts im Stammverzeichnis Ihres Projekts erstellen und den folgenden Code hinzufügen:
715
+
716
+ ```ts fileName="global.ts"
717
+ import type { locales } from "@/i18n";
718
+
719
+ type Messages = {
720
+ common: typeof import("./locales/en/common.json");
721
+ home: typeof import("./locales/en/home.json");
722
+ about: typeof import("./locales/en/about.json");
723
+ // ... Zukünftige JSON-Dateien sollten hier ebenfalls hinzugefügt werden
724
+ };
725
+
726
+ declare module "next-intl" {
727
+ interface AppConfig {
728
+ Locale: (typeof locales)[number];
729
+ Messages: Messages;
730
+ }
731
+ }
732
+ ```
733
+
734
+ Dieser Code verwendet Module Augmentation, um die locales und messages zum next-intl AppConfig-Typ hinzuzufügen.
735
+
736
+ ### (Optional) Schritt 15: Automatisieren Sie Ihre Übersetzungen mit Intlayer
737
+
738
+ Intlayer ist eine **kostenlose** und **Open-Source**-Bibliothek, die entwickelt wurde, um den Lokalisierungsprozess in Ihrer Anwendung zu unterstützen. Während next-intl das Laden und Verwalten der Übersetzungen übernimmt, hilft Intlayer dabei, den Übersetzungsworkflow zu automatisieren.
739
+
740
+ Die manuelle Verwaltung von Übersetzungen kann zeitaufwendig und fehleranfällig sein. Intlayer automatisiert das Testen, Erzeugen und Verwalten von Übersetzungen, spart Ihnen Zeit und sorgt für Konsistenz in Ihrer gesamten Anwendung.
741
+
742
+ Intlayer ermöglicht Ihnen:
743
+
744
+ - **Deklarieren Sie Ihre Inhalte dort, wo Sie möchten, in Ihrem Codebase**
745
+ Intlayer erlaubt es, Ihre Inhalte dort zu deklarieren, wo Sie möchten, in Ihrer Codebase unter Verwendung von `.content.{ts|js|json}`-Dateien. Dies ermöglicht eine bessere Organisation Ihrer Inhalte und sorgt für bessere Lesbarkeit und Wartbarkeit Ihrer Codebase.
746
+
747
+ - **Testen fehlender Übersetzungen**
748
+ Intlayer stellt Testfunktionen bereit, die in Ihre CI/CD-Pipeline oder in Ihre Unit-Tests integriert werden können. Erfahren Sie mehr über das [Testen Ihrer Übersetzungen](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/testing.md).
749
+
750
+ - **Automatisieren Sie Ihre Übersetzungen**
751
+ Intlayer bietet eine CLI und eine VSCode-Erweiterung, um Ihre Übersetzungen zu automatisieren. Diese können in Ihre CI/CD-Pipeline integriert werden. Erfahren Sie mehr über das [Automatisieren Ihrer Übersetzungen](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/intlayer_cli.md).
752
+ Sie können Ihren **eigenen API-Schlüssel und den KI-Anbieter Ihrer Wahl** verwenden. Es werden auch kontextbewusste Übersetzungen bereitgestellt, siehe [Inhalt automatisch ausfüllen](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/autoFill.md).
753
+
754
+ - **Externe Inhalte anbinden**
755
+ Intlayer ermöglicht es Ihnen, Ihre Inhalte mit einem externen Content-Management-System (CMS) zu verbinden. So können Sie diese auf optimierte Weise abrufen und in Ihre JSON-Ressourcen einfügen. Erfahren Sie mehr über das [Abrufen externer Inhalte](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/dictionary/function_fetching.md).
756
+
757
+ - **Visueller Editor**
758
+ Intlayer bietet einen kostenlosen visuellen Editor, mit dem Sie Ihre Inhalte visuell bearbeiten können. Erfahren Sie mehr über das [visuelle Bearbeiten Ihrer Übersetzungen](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/intlayer_visual_editor.md).
759
+
760
+ Und mehr. Um alle von Intlayer bereitgestellten Funktionen zu entdecken, lesen Sie bitte die [Interesse an Intlayer Dokumentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/interest_of_intlayer.md).