@intlayer/docs 7.0.7 → 7.0.8

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,1594 @@
1
+ ---
2
+ createdAt: 2024-12-06
3
+ updatedAt: 2025-09-22
4
+ title: Jak przetłumaczyć swoją stronę Next.js 14 i App Router – przewodnik i18n 2025
5
+ description: Dowiedz się, jak uczynić swoją stronę Next.js 14 App Router wielojęzyczną. Postępuj zgodnie z dokumentacją, aby ją internacjonalizować (i18n) i tłumaczyć.
6
+ keywords:
7
+ - Internacjonalizacja
8
+ - Dokumentacja
9
+ - Intlayer
10
+ - Next.js 14
11
+ - JavaScript
12
+ - React
13
+ slugs:
14
+ - doc
15
+ - environment
16
+ - nextjs
17
+ - 14
18
+ applicationTemplate: https://github.com/aymericzip/intlayer-next-14-template
19
+ history:
20
+ - version: 7.0.6
21
+ - version: 6.2.0
22
+ date: 2025-10-09
23
+ changes: Dodano dokumentację dla hooka `useLocale` z opcją `onLocaleChange`
24
+ - version: 5.6.6
25
+ date: 2025-10-02
26
+ changes: Dodano dokumentację dla funkcji `getLocale` w akcjach serwera
27
+ - version: 5.6.2
28
+ date: 2025-09-22
29
+ changes: Dodano dokumentację dla helpera `multipleMiddlewares`
30
+ - version: 5.6.0
31
+ date: 2025-07-06
32
+ changes: Przekształcono funkcję `withIntlayer()` na funkcję opartą na promise
33
+ - version: 5.5.10
34
+ date: 2025-06-29
35
+ changes: Inicjalizacja historii
36
+ ---
37
+
38
+ # Przetłumacz swoją stronę Next.js 14 i App Router za pomocą Intlayer | Internacjonalizacja (i18n)
39
+
40
+ ## Spis treści
41
+
42
+ <TOC/>
43
+
44
+ ## Czym jest Intlayer?
45
+
46
+ **Intlayer** to innowacyjna, open-source’owa biblioteka do internacjonalizacji (i18n), zaprojektowana, aby uprościć obsługę wielojęzyczności we współczesnych aplikacjach webowych. Intlayer bezproblemowo integruje się z najnowszym frameworkiem **Next.js 14**, w tym z jego potężnym **App Router**. Jest zoptymalizowany do pracy z **Server Components** dla efektywnego renderowania i jest w pełni kompatybilny z [**Turbopack**](https://nextjs.org/docs/architecture/turbopack) (od Next.js w wersji >= 15).
47
+
48
+ Dzięki Intlayer możesz:
49
+
50
+ - **Łatwo zarządzać tłumaczeniami** za pomocą deklaratywnych słowników na poziomie komponentów.
51
+ - **Dynamicznie lokalizować metadane**, trasy i zawartość.
52
+ - **Uzyskać dostęp do tłumaczeń zarówno w komponentach po stronie klienta, jak i serwera**.
53
+ - **Zapewnij wsparcie dla TypeScript** dzięki automatycznie generowanym typom, co poprawia autouzupełnianie i wykrywanie błędów.
54
+ - **Skorzystaj z zaawansowanych funkcji**, takich jak dynamiczne wykrywanie i przełączanie lokalizacji.
55
+
56
+ > Intlayer jest kompatybilny z Next.js 12, 13, 14 i 15. Jeśli używasz Next.js Page Router, możesz odnieść się do tego [przewodnika](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_with_nextjs_page_router.md). Dla Next.js 15 z turbopack lub bez, odnieś się do tego [przewodnika](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_with_nextjs_15.md).
57
+
58
+ ---
59
+
60
+ ## Przewodnik krok po kroku, jak skonfigurować Intlayer w aplikacji Next.js
61
+
62
+ <iframe
63
+ src="https://stackblitz.com/github/aymericzip/intlayer-next-14-template?embed=1&ctl=1&file=intlayer.config.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 - Jak internacjonalizować swoją aplikację za pomocą Intlayer"
66
+ sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
67
+ loading="lazy"
68
+ />
69
+
70
+ Zobacz [Szablon aplikacji](https://github.com/aymericzip/intlayer-next-14-template) na GitHub.
71
+
72
+ ### Krok 1: Instalacja zależności
73
+
74
+ Zainstaluj niezbędne pakiety za pomocą npm:
75
+
76
+ ```bash packageManager="npm"
77
+ npm install intlayer next-intlayer
78
+ ```
79
+
80
+ ```bash packageManager="pnpm"
81
+ pnpm add intlayer next-intlayer
82
+ ```
83
+
84
+ ```bash packageManager="yarn"
85
+ yarn add intlayer next-intlayer
86
+ ```
87
+
88
+ - **intlayer**
89
+
90
+ Podstawowy pakiet, który dostarcza narzędzia do internacjonalizacji do zarządzania konfiguracją, tłumaczeń, [deklaracji treści](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/dictionary/content_file.md), transpilecji oraz [poleceń CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_cli.md).
91
+
92
+ - **next-intlayer**
93
+
94
+ Pakiet integrujący Intlayer z Next.js. Zapewnia dostawców kontekstu oraz hooki do internacjonalizacji w Next.js. Dodatkowo zawiera wtyczkę Next.js do integracji Intlayer z [Webpack](https://webpack.js.org/) lub [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack), a także middleware do wykrywania preferowanego języka użytkownika, zarządzania ciasteczkami oraz obsługi przekierowań URL.
95
+
96
+ ### Krok 2: Skonfiguruj swój projekt
97
+
98
+ Utwórz plik konfiguracyjny, aby skonfigurować języki swojej aplikacji:
99
+
100
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
101
+ import { Locales, type IntlayerConfig } from "intlayer";
102
+
103
+ const config: IntlayerConfig = {
104
+ internationalization: {
105
+ locales: [
106
+ Locales.ENGLISH,
107
+ Locales.FRENCH,
108
+ Locales.SPANISH,
109
+ // Twoje inne locale
110
+ ],
111
+ defaultLocale: Locales.ENGLISH,
112
+ },
113
+ };
114
+
115
+ export default config;
116
+ ```
117
+
118
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
119
+ import { Locales } from "intlayer";
120
+
121
+ /** @type {import('intlayer').IntlayerConfig} */
122
+ const config = {
123
+ internationalization: {
124
+ locales: [
125
+ Locales.ENGLISH,
126
+ Locales.FRENCH,
127
+ Locales.SPANISH,
128
+ // Twoje inne locale
129
+ ],
130
+ defaultLocale: Locales.ENGLISH,
131
+ },
132
+ };
133
+
134
+ export default config;
135
+ ```
136
+
137
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
138
+ const { Locales } = require("intlayer");
139
+
140
+ /** @type {import('intlayer').IntlayerConfig} */
141
+ // Konfiguracja międzynarodowa
142
+ const config = {
143
+ internationalization: {
144
+ locales: [
145
+ Locales.ENGLISH,
146
+ Locales.FRENCH,
147
+ Locales.SPANISH,
148
+ // Twoje inne locale
149
+ ],
150
+ defaultLocale: Locales.ENGLISH,
151
+ },
152
+ };
153
+
154
+ module.exports = config;
155
+ ```
156
+
157
+ > Poprzez ten plik konfiguracyjny możesz ustawić lokalizowane adresy URL, przekierowania w middleware, nazwy ciasteczek, lokalizację i rozszerzenie deklaracji zawartości, wyłączyć logi Intlayer w konsoli i wiele więcej. Pełną listę dostępnych parametrów znajdziesz w [dokumentacji konfiguracyjnej](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/configuration.md).
158
+
159
+ ### Krok 3: Zintegruj Intlayer w konfiguracji Next.js
160
+
161
+ Skonfiguruj swoje środowisko Next.js, aby korzystało z Intlayer:
162
+
163
+ ```typescript fileName="next.config.mjs"
164
+ import { withIntlayer } from "next-intlayer/server";
165
+
166
+ /** @type {import('next').NextConfig} */
167
+ const nextConfig = {};
168
+
169
+ export default withIntlayer(nextConfig);
170
+ ```
171
+
172
+ > Wtyczka Next.js `withIntlayer()` służy do integracji Intlayer z Next.js. Zapewnia budowanie plików deklaracji zawartości oraz monitoruje je w trybie deweloperskim. Definiuje zmienne środowiskowe Intlayer w środowiskach [Webpack](https://webpack.js.org/) lub [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack). Dodatkowo dostarcza aliasy optymalizujące wydajność oraz zapewnia kompatybilność z komponentami serwerowymi.
173
+
174
+ > Funkcja `withIntlayer()` jest funkcją zwracającą promise. Jeśli chcesz użyć jej z innymi wtyczkami, możesz ją awaitować. Przykład:
175
+ >
176
+ > ```tsx
177
+ > const nextConfig = await withIntlayer(nextConfig);
178
+ > const nextConfigWithOtherPlugins = withOtherPlugins(nextConfig);
179
+ >
180
+ > export default nextConfigWithOtherPlugins;
181
+ > ```
182
+
183
+ ### Krok 4: Skonfiguruj Middleware do wykrywania lokalizacji
184
+
185
+ Skonfiguruj middleware, aby wykrywać preferowaną lokalizację użytkownika:
186
+
187
+ ```typescript fileName="src/middleware.ts" codeFormat="typescript"
188
+ export { intlayerMiddleware as middleware } from "next-intlayer/middleware";
189
+
190
+ export const config = {
191
+ matcher:
192
+ "/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
193
+ };
194
+ ```
195
+
196
+ ```javascript fileName="src/middleware.mjs" codeFormat="esm"
197
+ export { intlayerMiddleware as middleware } from "next-intlayer/middleware";
198
+
199
+ export const config = {
200
+ matcher:
201
+ "/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
202
+ };
203
+ ```
204
+
205
+ ```javascript fileName="src/middleware.cjs" codeFormat="commonjs"
206
+ const { intlayerMiddleware } = require("next-intlayer/middleware");
207
+
208
+ const config = {
209
+ matcher:
210
+ "/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
211
+ };
212
+
213
+ module.exports = { middleware: intlayerMiddleware, config };
214
+ ```
215
+
216
+ > `intlayerMiddleware` służy do wykrywania preferowanej lokalizacji użytkownika i przekierowywania go na odpowiedni URL, zgodnie z [konfiguracją](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/configuration.md). Dodatkowo umożliwia zapisywanie preferowanej lokalizacji użytkownika w ciasteczku.
217
+
218
+ > Dostosuj parametr `matcher`, aby odpowiadał trasom Twojej aplikacji. Po więcej szczegółów odsyłamy do [dokumentacji Next.js dotyczącej konfiguracji matcher](https://nextjs.org/docs/app/building-your-application/routing/middleware).
219
+
220
+ > Jeśli potrzebujesz połączyć kilka middleware'ów razem (na przykład `intlayerMiddleware` z uwierzytelnianiem lub niestandardowymi middleware'ami), Intlayer udostępnia teraz pomocnika o nazwie `multipleMiddlewares`.
221
+
222
+ ```ts
223
+ import {
224
+ multipleMiddlewares,
225
+ intlayerMiddleware,
226
+ } from "next-intlayer/middleware";
227
+ import { customMiddleware } from "@utils/customMiddleware";
228
+
229
+ export const middleware = multipleMiddlewares([
230
+ intlayerMiddleware,
231
+ customMiddleware,
232
+ ]);
233
+ ```
234
+
235
+ ### Krok 5: Zdefiniuj dynamiczne trasy lokalizacji
236
+
237
+ Usuń wszystko z `RootLayout` i zastąp to następującym kodem:
238
+
239
+ ```tsx fileName="src/app/layout.tsx" codeFormat="typescript"
240
+ import type { PropsWithChildren, FC } from "react";
241
+ import "./globals.css";
242
+
243
+ const RootLayout: FC<PropsWithChildren> = ({ children }) => (
244
+ // Nadal możesz opakować dzieci innymi providerami, takimi jak `next-themes`, `react-query`, `framer-motion` itd.
245
+ <>{children}</>
246
+ );
247
+
248
+ export default RootLayout;
249
+ ```
250
+
251
+ ```jsx fileName="src/app/layout.mjx" codeFormat="esm"
252
+ import "./globals.css";
253
+
254
+ const RootLayout = ({ children }) => (
255
+ // Nadal możesz opakować dzieci innymi providerami, takimi jak `next-themes`, `react-query`, `framer-motion` itd.
256
+ <>{children}</>
257
+ );
258
+
259
+ export default RootLayout;
260
+ ```
261
+
262
+ ```jsx fileName="src/app/layout.csx" codeFormat="commonjs"
263
+ require("./globals.css");
264
+
265
+ const RootLayout = ({ children }) => (
266
+ // Nadal możesz opakować dzieci innymi providerami, takimi jak `next-themes`, `react-query`, `framer-motion` itd.
267
+ <>{children}</>
268
+ );
269
+
270
+ module.exports = {
271
+ default: RootLayout,
272
+ generateStaticParams,
273
+ };
274
+ ```
275
+
276
+ > Pozostawienie komponentu `RootLayout` pustym pozwala na ustawienie atrybutów [`lang`](https://developer.mozilla.org/fr/docs/Web/HTML/Global_attributes/lang) oraz [`dir`](https://developer.mozilla.org/fr/docs/Web/HTML/Global_attributes/dir) na tagu `<html>`.
277
+
278
+ Aby zaimplementować dynamiczne routowanie, podaj ścieżkę dla lokalizacji, dodając nowy layout w katalogu `[locale]`:
279
+
280
+ ```tsx fileName="src/app/[locale]/layout.tsx" codeFormat="typescript"
281
+ import type { Next14LayoutIntlayer } from "next-intlayer";
282
+ import { Inter } from "next/font/google";
283
+ import { getHTMLTextDir } from "intlayer";
284
+
285
+ const inter = Inter({ subsets: ["latin"] });
286
+
287
+ const LocaleLayout: Next14LayoutIntlayer = ({
288
+ children,
289
+ params: { locale },
290
+ }) => (
291
+ <html lang={locale} dir={getHTMLTextDir(locale)}>
292
+ <body className={inter.className}>{children}</body>
293
+ </html>
294
+ );
295
+
296
+ export default LocaleLayout;
297
+ ```
298
+
299
+ ```jsx fileName="src/app/[locale]/layout.mjx" codeFormat="esm"
300
+ import { Inter } from "next/font/google";
301
+ import { getHTMLTextDir } from "intlayer";
302
+
303
+ const inter = Inter({ subsets: ["latin"] });
304
+
305
+ const LocaleLayout = ({ children, params: { locale } }) => (
306
+ <html lang={locale} dir={getHTMLTextDir(locale)}>
307
+ <body className={inter.className}>{children}</body>
308
+ </html>
309
+ );
310
+
311
+ export default LocaleLayout;
312
+ ```
313
+
314
+ ```jsx fileName="src/app/[locale]/layout.csx" codeFormat="commonjs"
315
+ const { Inter } = require("next/font/google");
316
+ const { getHTMLTextDir } = require("intlayer");
317
+
318
+ const inter = Inter({ subsets: ["latin"] });
319
+
320
+ const LocaleLayout = ({ children, params: { locale } }) => (
321
+ <html lang={locale} dir={getHTMLTextDir(locale)}>
322
+ <body className={inter.className}>{children}</body>
323
+ </html>
324
+ );
325
+
326
+ module.exports = LocaleLayout;
327
+ ```
328
+
329
+ > Segment ścieżki `[locale]` jest używany do określenia lokalizacji. Przykład: `/en-US/about` odnosi się do `en-US`, a `/fr/about` do `fr`.
330
+
331
+ > Na tym etapie napotkasz błąd: `Error: Missing <html> and <body> tags in the root layout.`. Jest to oczekiwane, ponieważ plik `/app/page.tsx` nie jest już używany i można go usunąć. Zamiast tego segment ścieżki `[locale]` aktywuje stronę `/app/[locale]/page.tsx`. W konsekwencji strony będą dostępne pod ścieżkami takimi jak `/en`, `/fr`, `/es` w Twojej przeglądarce. Aby ustawić domyślną lokalizację jako stronę główną, odwołaj się do konfiguracji `middleware` w kroku 4.
332
+
333
+ Następnie zaimplementuj funkcję `generateStaticParams` w układzie (Layout) swojej aplikacji.
334
+
335
+ ```tsx {1} fileName="src/app/[locale]/layout.tsx" codeFormat="typescript"
336
+ export { generateStaticParams } from "next-intlayer"; // Linia do dodania
337
+
338
+ const LocaleLayout: Next14LayoutIntlayer = ({
339
+ children,
340
+ params: { locale },
341
+ }) => {
342
+ /*... Reszta kodu*/
343
+ };
344
+
345
+ export default LocaleLayout;
346
+ ```
347
+
348
+ ```jsx {1} fileName="src/app/[locale]/layout.mjx" codeFormat="esm"
349
+ export { generateStaticParams } from "next-intlayer"; // Linia do dodania
350
+
351
+ const LocaleLayout = ({ children, params: { locale } }) => {
352
+ /*... Reszta kodu*/
353
+ };
354
+
355
+ export default LocaleLayout;
356
+ ```
357
+
358
+ ```jsx {1,7} fileName="src/app/[locale]/layout.csx" codeFormat="commonjs"
359
+ const { generateStaticParams } = require("next-intlayer"); // Linia do dodania
360
+
361
+ const LocaleLayout = ({ children, params: { locale } }) => {
362
+ /*... Reszta kodu*/
363
+ };
364
+
365
+ module.exports = LocaleLayout;
366
+ ```
367
+
368
+ > `generateStaticParams` zapewnia, że Twoja aplikacja prekompiluje niezbędne strony dla wszystkich lokalizacji, zmniejszając obciążenie podczas działania i poprawiając doświadczenie użytkownika. Po więcej szczegółów odsyłamy do [dokumentacji Next.js dotyczącej generateStaticParams](https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic-rendering#generate-static-params).
369
+
370
+ ### Krok 6: Zadeklaruj swoją zawartość
371
+
372
+ Utwórz i zarządzaj deklaracjami zawartości, aby przechowywać tłumaczenia:
373
+
374
+ ```typescript fileName="src/app/[locale]/page.content.ts" contentDeclarationFormat="typescript"
375
+ import { t, type Dictionary } from "intlayer";
376
+
377
+ const pageContent = {
378
+ key: "page",
379
+ content: {
380
+ getStarted: {
381
+ main: t({
382
+ en: "Get started by editing",
383
+ fr: "Commencez par éditer",
384
+ es: "Comience por editar",
385
+ }),
386
+ pageLink: "src/app/page.tsx",
387
+ },
388
+ },
389
+ } satisfies Dictionary;
390
+
391
+ export default pageContent;
392
+ ```
393
+
394
+ ```javascript fileName="src/app/[locale]/page.content.mjs" contentDeclarationFormat="esm"
395
+ import { t } from "intlayer";
396
+
397
+ /** @type {import('intlayer').Dictionary} */
398
+ // Zawartość strony z tłumaczeniami
399
+ const pageContent = {
400
+ key: "page",
401
+ content: {
402
+ getStarted: {
403
+ main: t({
404
+ en: "Get started by editing",
405
+ fr: "Commencez par éditer",
406
+ es: "Comience por editar",
407
+ }),
408
+ pageLink: "src/app/page.tsx",
409
+ },
410
+ },
411
+ };
412
+
413
+ export default pageContent;
414
+ ```
415
+
416
+ ```javascript fileName="src/app/[locale]/page.content.cjs" contentDeclarationFormat="commonjs"
417
+ const { t } = require("intlayer");
418
+
419
+ /** @type {import('intlayer').Dictionary} */
420
+ const pageContent = {
421
+ key: "page",
422
+ content: {
423
+ getStarted: {
424
+ main: t({
425
+ en: "Get started by editing",
426
+ fr: "Commencez par éditer",
427
+ es: "Comience por editar",
428
+ pl: "Zacznij od edycji",
429
+ }),
430
+ pageLink: "src/app/page.tsx",
431
+ },
432
+ },
433
+ };
434
+
435
+ module.exports = pageContent;
436
+ ```
437
+
438
+ ```json fileName="src/app/[locale]/page.content.json" contentDeclarationFormat="json"
439
+ {
440
+ "$schema": "https://intlayer.org/schema.json",
441
+ "key": "page",
442
+ "content": {
443
+ "getStarted": {
444
+ "nodeType": "translation",
445
+ "translation": {
446
+ "en": "Get started by editing",
447
+ "fr": "Commencez par éditer",
448
+ "es": "Comience por editar",
449
+ "pl": "Zacznij od edycji"
450
+ }
451
+ },
452
+ "pageLink": {
453
+ "nodeType": "translation",
454
+ "translation": {
455
+ "en": "src/app/page.tsx",
456
+ "fr": "src/app/page.tsx",
457
+ "es": "src/app/page.tsx",
458
+ "pl": "src/app/page.tsx"
459
+ }
460
+ }
461
+ }
462
+ }
463
+ ```
464
+
465
+ > Twoje deklaracje treści mogą być definiowane w dowolnym miejscu w aplikacji, pod warunkiem, że zostaną umieszczone w katalogu `contentDir` (domyślnie `./src`). I będą miały rozszerzenie pliku deklaracji treści (domyślnie `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
466
+
467
+ > Aby uzyskać więcej szczegółów, zapoznaj się z [dokumentacją deklaracji treści](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/dictionary/content_file.md).
468
+
469
+ ### Krok 7: Wykorzystaj treść w swoim kodzie
470
+
471
+ Uzyskaj dostęp do swoich słowników treści w całej aplikacji:
472
+
473
+ ```tsx fileName="src/app/[locale]/page.tsx" codeFormat="typescript"
474
+ import { ClientComponentExample } from "@components/ClientComponentExample";
475
+ import { ServerComponentExample } from "@components/ServerComponentExample";
476
+ import { type Next14PageIntlayer, IntlayerClientProvider } from "next-intlayer";
477
+ import { IntlayerServerProvider, useIntlayer } from "next-intlayer/server";
478
+
479
+ const Page: Next14PageIntlayer = ({ params: { locale } }) => {
480
+ const content = useIntlayer("page", locale);
481
+
482
+ return (
483
+ <>
484
+ <p>
485
+ {content.getStarted.main}
486
+ <code>{content.getStarted.pageLink}</code>
487
+ </p>
488
+
489
+ <IntlayerServerProvider locale={locale}>
490
+ <IntlayerClientProvider locale={locale}>
491
+ <ServerComponentExample />
492
+ <ClientComponentExample />
493
+ </IntlayerClientProvider>
494
+ </IntlayerServerProvider>
495
+ </>
496
+ );
497
+ };
498
+
499
+ export default Page;
500
+ ```
501
+
502
+ ```jsx fileName="src/app/[locale]/page.mjx" codeFormat="esm"
503
+ import { ClientComponentExample } from "@components/ClientComponentExample";
504
+ import { ServerComponentExample } from "@components/ServerComponentExample";
505
+ import { IntlayerClientProvider } from "next-intlayer";
506
+ import { IntlayerServerProvider, useIntlayer } from "next-intlayer/server";
507
+
508
+ const Page = ({ params: { locale } }) => {
509
+ const content = useIntlayer("page", locale);
510
+
511
+ return (
512
+ <>
513
+ <p>
514
+ {content.getStarted.main}
515
+ <code>{content.getStarted.pageLink}</code>
516
+ </p>
517
+
518
+ <IntlayerClientProvider locale={locale}>
519
+ <IntlayerServerProvider locale={locale}>
520
+ <ClientComponentExample />
521
+ <ServerComponentExample />
522
+ </IntlayerServerProvider>
523
+ </IntlayerClientProvider>
524
+ </>
525
+ );
526
+ };
527
+ ```
528
+
529
+ ```jsx fileName="src/app/[locale]/page.csx" codeFormat="commonjs"
530
+ const { IntlayerClientProvider } = require("next-intlayer");
531
+ const { IntlayerServerProvider, useIntlayer } = require("next-intlayer/server");
532
+
533
+ const Page = ({ params: { locale } }) => {
534
+ const content = useIntlayer("page", locale);
535
+
536
+ return (
537
+ <>
538
+ <p>
539
+ {content.getStarted.main}
540
+ <code>{content.getStarted.pageLink}</code>
541
+ </p>
542
+
543
+ <IntlayerClientProvider locale={locale}>
544
+ <IntlayerServerProvider locale={locale}>
545
+ <ClientComponentExample />
546
+ <ServerComponentExample />
547
+ </IntlayerServerProvider>
548
+ </IntlayerClientProvider>
549
+ </>
550
+ );
551
+ };
552
+ ```
553
+
554
+ - **`IntlayerClientProvider`** służy do dostarczania informacji o lokalizacji komponentom po stronie klienta. Może być umieszczony w dowolnym komponencie nadrzędnym, w tym w layoucie. Jednak zaleca się umieszczenie go w layoucie, ponieważ Next.js współdzieli kod layoutu między stronami, co jest bardziej efektywne. Używając `IntlayerClientProvider` w layoucie, unikasz ponownej inicjalizacji na każdej stronie, co poprawia wydajność i utrzymuje spójny kontekst lokalizacji w całej aplikacji.
555
+ - **`IntlayerServerProvider`** służy do dostarczania informacji o lokalizacji komponentom po stronie serwera. Nie może być ustawiony w layoucie.
556
+
557
+ > Layout i strona nie mogą współdzielić wspólnego kontekstu serwera, ponieważ system kontekstu serwera opiera się na magazynie danych dla każdego żądania (poprzez mechanizm [React’s cache](https://react.dev/reference/react/cache)), co powoduje, że każdy „kontekst” jest tworzony na nowo dla różnych segmentów aplikacji. Umieszczenie providera w wspólnym layoucie złamałoby tę izolację, uniemożliwiając prawidłowe propagowanie wartości kontekstu serwera do Twoich komponentów serwerowych.
558
+
559
+ ```tsx {4,7} fileName="src/components/ClientComponentExample.tsx" codeFormat="typescript"
560
+ "use client";
561
+
562
+ import type { FC } from "react";
563
+ import { useIntlayer } from "next-intlayer";
564
+
565
+ const ClientComponentExample: FC = () => {
566
+ const content = useIntlayer("client-component-example"); // Utwórz powiązaną deklarację treści
567
+
568
+ return (
569
+ <div>
570
+ <h2>{content.title}</h2>
571
+ <p>{content.content}</p>
572
+ </div>
573
+ );
574
+ };
575
+ ```
576
+
577
+ ```jsx {3,6} fileName="src/components/ClientComponentExample.mjx" codeFormat="esm"
578
+ "use client";
579
+
580
+ import { useIntlayer } from "next-intlayer";
581
+
582
+ const ClientComponentExample = () => {
583
+ const content = useIntlayer("client-component-example"); // Utwórz powiązaną deklarację zawartości
584
+
585
+ return (
586
+ <div>
587
+ <h2>{content.title}</h2>
588
+ <p>{content.content}</p>
589
+ </div>
590
+ );
591
+ };
592
+ ```
593
+
594
+ ```jsx {3,6} fileName="src/components/ClientComponentExample.csx" codeFormat="commonjs"
595
+ "use client";
596
+
597
+ const { useIntlayer } = require("next-intlayer");
598
+
599
+ const ClientComponentExample = () => {
600
+ const content = useIntlayer("client-component-example"); // Utwórz powiązaną deklarację zawartości
601
+
602
+ return (
603
+ <div>
604
+ <h2>{content.title}</h2>
605
+ <p>{content.content}</p>
606
+ </div>
607
+ );
608
+ };
609
+ ```
610
+
611
+ ```tsx {2} fileName="src/components/ServerComponentExample.tsx" codeFormat="typescript"
612
+ import type { FC } from "react";
613
+ import { useIntlayer } from "next-intlayer/server";
614
+
615
+ const ServerComponentExample: FC = () => {
616
+ const content = useIntlayer("server-component-example"); // Utwórz powiązaną deklarację zawartości
617
+
618
+ return (
619
+ <div>
620
+ <h2>{content.title}</h2>
621
+ <p>{content.content}</p>
622
+ </div>
623
+ );
624
+ };
625
+ ```
626
+
627
+ ```jsx {1} fileName="src/components/ServerComponentExample.mjx" codeFormat="esm"
628
+ import { useIntlayer } from "next-intlayer/server";
629
+
630
+ const ServerComponentExample = () => {
631
+ const content = useIntlayer("server-component-example"); // Utwórz powiązaną deklarację zawartości
632
+
633
+ return (
634
+ <div>
635
+ <h2>{content.title}</h2>
636
+ <p>{content.content}</p>
637
+ </div>
638
+ );
639
+ };
640
+ ```
641
+
642
+ ```jsx {1} fileName="src/components/ServerComponentExample.csx" codeFormat="commonjs"
643
+ const { useIntlayer } = require("next-intlayer/server");
644
+
645
+ const ServerComponentExample = () => {
646
+ const content = useIntlayer("server-component-example"); // Utwórz powiązaną deklarację zawartości
647
+
648
+ return (
649
+ <div>
650
+ <h2>{content.title}</h2>
651
+ <p>{content.content}</p>
652
+ </div>
653
+ );
654
+ };
655
+ ```
656
+
657
+ > Jeśli chcesz użyć swojej zawartości w atrybucie typu `string`, takim jak `alt`, `title`, `href`, `aria-label` itp., musisz wywołać wartość funkcji, na przykład:
658
+
659
+ > ```jsx
660
+ > <img src={content.image.src.value} alt={content.image.value} />
661
+ > ```
662
+
663
+ > Aby dowiedzieć się więcej o hooku `useIntlayer`, zapoznaj się z [dokumentacją](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/packages/next-intlayer/useIntlayer.md).
664
+
665
+ ### (Opcjonalny) Krok 8: Internacjonalizacja metadanych
666
+
667
+ Jeśli chcesz internacjonalizować swoje metadane, takie jak tytuł strony, możesz użyć funkcji `generateMetadata` dostarczonej przez Next.js. Wewnątrz możesz pobrać zawartość z funkcji `getIntlayer`, aby przetłumaczyć swoje metadane.
668
+
669
+ ```typescript fileName="src/app/[locale]/metadata.content.ts" contentDeclarationFormat="typescript"
670
+ import { type Dictionary, t } from "intlayer";
671
+ import { Metadata } from "next";
672
+
673
+ const metadataContent = {
674
+ key: "page-metadata",
675
+ content: {
676
+ title: t({
677
+ en: "Create Next App",
678
+ fr: "Créer une application Next.js",
679
+ es: "Crear una aplicación Next.js",
680
+ }),
681
+ description: t({
682
+ en: "Generated by create next app",
683
+ fr: "Généré par create next app",
684
+ es: "Generado por create next app",
685
+ }),
686
+ },
687
+ } satisfies Dictionary<Metadata>;
688
+
689
+ export default metadataContent;
690
+ ```
691
+
692
+ ```javascript fileName="src/app/[locale]/metadata.content.mjs" contentDeclarationFormat="esm"
693
+ import { t } from "intlayer";
694
+
695
+ /** @type {import('intlayer').Dictionary<import('next').Metadata>} */
696
+ const metadataContent = {
697
+ key: "page-metadata",
698
+ content: {
699
+ title: t({
700
+ en: "Create Next App",
701
+ fr: "Créer une application Next.js",
702
+ es: "Crear una aplicación Next.js",
703
+ }),
704
+ description: t({
705
+ en: "Generated by create next app",
706
+ fr: "Généré par create next app",
707
+ es: "Generado por create next app",
708
+ }),
709
+ },
710
+ };
711
+
712
+ export default metadataContent;
713
+ ```
714
+
715
+ ```javascript fileName="src/app/[locale]/metadata.content.cjs" contentDeclarationFormat="commonjs"
716
+ const { t } = require("intlayer");
717
+
718
+ /** @type {import('intlayer').Dictionary<import('next').Metadata>} */
719
+ const metadataContent = {
720
+ key: "page-metadata",
721
+ content: {
722
+ title: t({
723
+ en: "Create Next App",
724
+ fr: "Créer une application Next.js",
725
+ es: "Crear una aplicación Next.js",
726
+ }),
727
+ description: t({
728
+ en: "Generated by create next app",
729
+ fr: "Généré par create next app",
730
+ es: "Generado por create next app",
731
+ }),
732
+ },
733
+ };
734
+
735
+ module.exports = metadataContent;
736
+ ```
737
+
738
+ ```json fileName="src/app/[locale]/metadata.content.json" contentDeclarationFormat="json"
739
+ {
740
+ "key": "page-metadata",
741
+ "content": {
742
+ "title": {
743
+ "nodeType": "translation",
744
+ "translation": {
745
+ "en": "Preact logo",
746
+ "fr": "Logo Preact",
747
+ "es": "Logo Preact",
748
+ "pl": "Logo Preact"
749
+ }
750
+ },
751
+ "description": {
752
+ "nodeType": "translation",
753
+ "translation": {
754
+ "en": "Generated by create next app",
755
+ "fr": "Généré par create next app",
756
+ "es": "Generado por create next app",
757
+ "pl": "Wygenerowano przez create next app"
758
+ }
759
+ }
760
+ }
761
+ }
762
+ ```
763
+
764
+ ````typescript fileName="src/app/[locale]/layout.tsx or src/app/[locale]/page.tsx" codeFormat="typescript"
765
+ import { getIntlayer, getMultilingualUrls } from "intlayer";
766
+ import type { Metadata } from "next";
767
+ import type { LocalParams } from "next-intlayer";
768
+
769
+ export const generateMetadata = ({
770
+ params: { locale },
771
+ }: LocalParams): Metadata => {
772
+ const metadata = getIntlayer("page-metadata", locale);
773
+
774
+ /**
775
+ * Generuje obiekt zawierający wszystkie adresy URL dla każdego języka.
776
+ *
777
+ * Przykład:
778
+ * ```ts
779
+ * getMultilingualUrls('/about');
780
+ *
781
+ * // Zwraca
782
+ * // {
783
+ * // en: '/about',
784
+ * // fr: '/fr/about',
785
+ * // es: '/es/about',
786
+ * // }
787
+ * ```
788
+ */
789
+ const multilingualUrls = getMultilingualUrls("/");
790
+ const localizedUrl =
791
+ multilingualUrls[locale as keyof typeof multilingualUrls];
792
+
793
+ return {
794
+ ...metadata,
795
+ alternates: {
796
+ canonical: localizedUrl,
797
+ languages: { ...multilingualUrls, "x-default": "/" },
798
+ },
799
+ openGraph: {
800
+ url: localizedUrl,
801
+ },
802
+ };
803
+ };
804
+
805
+ // ... Reszta kodu
806
+ ````
807
+
808
+ ````javascript fileName="src/app/[locale]/layout.mjs or src/app/[locale]/page.mjs" codeFormat="esm"
809
+ import { getIntlayer, getMultilingualUrls } from "intlayer";
810
+
811
+ export const generateMetadata = ({ params: { locale } }) => {
812
+ const metadata = getIntlayer("page-metadata", locale);
813
+
814
+ /**
815
+ * Generuje obiekt zawierający wszystkie adresy URL dla każdego języka.
816
+ *
817
+ * Przykład:
818
+ * ```ts
819
+ * getMultilingualUrls('/about');
820
+ *
821
+ * // Zwraca
822
+ * // {
823
+ * // en: '/about',
824
+ * // fr: '/fr/about',
825
+ * // es: '/es/about'
826
+ * // }
827
+ * ```
828
+ */
829
+ const multilingualUrls = getMultilingualUrls("/");
830
+ const localizedUrl = multilingualUrls[locale];
831
+
832
+ return {
833
+ ...metadata,
834
+ alternates: {
835
+ canonical: localizedUrl,
836
+ languages: { ...multilingualUrls, "x-default": "/" },
837
+ },
838
+ openGraph: {
839
+ url: localizedUrl,
840
+ },
841
+ };
842
+ };
843
+
844
+ // ... Reszta kodu
845
+ ````
846
+
847
+ ````javascript fileName="src/app/[locale]/layout.cjs or src/app/[locale]/page.cjs" codeFormat="commonjs"
848
+ const { getIntlayer, getMultilingualUrls } = require("intlayer");
849
+
850
+ const generateMetadata = ({ params: { locale } }) => {
851
+ const metadata = getIntlayer("page-metadata", locale);
852
+
853
+ /**
854
+ * Generuje obiekt zawierający wszystkie adresy URL dla każdej lokalizacji.
855
+ *
856
+ * Przykład:
857
+ * ```ts
858
+ * getMultilingualUrls('/about');
859
+ *
860
+ * // Zwraca
861
+ * // {
862
+ * // en: '/about',
863
+ * // fr: '/fr/about',
864
+ * // es: '/es/about'
865
+ * // }
866
+ * ```
867
+ */
868
+ const multilingualUrls = getMultilingualUrls("/");
869
+ const localizedUrl = multilingualUrls[locale];
870
+
871
+ return {
872
+ ...metadata,
873
+ alternates: {
874
+ canonical: localizedUrl,
875
+ languages: { ...multilingualUrls, "x-default": "/" },
876
+ },
877
+ openGraph: {
878
+ url: localizedUrl,
879
+ },
880
+ };
881
+ };
882
+
883
+ module.exports = { generateMetadata };
884
+
885
+ // ... Reszta kodu
886
+ ````
887
+
888
+ > Zauważ, że funkcja `getIntlayer` importowana z `next-intlayer` zwraca Twoją zawartość opakowaną w `IntlayerNode`, co umożliwia integrację z edytorem wizualnym. Natomiast funkcja `getIntlayer` importowana z `intlayer` zwraca Twoją zawartość bezpośrednio, bez dodatkowych właściwości.
889
+
890
+ Alternatywnie możesz użyć funkcji `getTranslation` do deklarowania swoich metadanych. Jednak zaleca się używanie plików deklaracji zawartości, aby zautomatyzować tłumaczenie metadanych i w pewnym momencie wyodrębnić zawartość na zewnątrz.
891
+
892
+ ```typescript fileName="src/app/[locale]/layout.tsx or src/app/[locale]/page.tsx" codeFormat="typescript"
893
+ import {
894
+ type IConfigLocales,
895
+ getTranslation,
896
+ getMultilingualUrls,
897
+ } from "intlayer";
898
+ import type { Metadata } from "next";
899
+ import type { LocalParams } from "next-intlayer";
900
+
901
+ export const generateMetadata = ({
902
+ params: { locale },
903
+ }: LocalParams): Metadata => {
904
+ const t = <T>(content: IConfigLocales<T>) => getTranslation(content, locale);
905
+
906
+ return {
907
+ title: t<string>({
908
+ en: "My title",
909
+ fr: "Mon titre",
910
+ es: "Mi título",
911
+ }),
912
+ description: t({
913
+ en: "My description",
914
+ fr: "Ma description",
915
+ es: "Mi descripción",
916
+ }),
917
+ };
918
+ };
919
+
920
+ // ... Reszta kodu
921
+ ```
922
+
923
+ ```javascript fileName="src/app/[locale]/layout.mjs or src/app/[locale]/page.mjs" codeFormat="esm"
924
+ import { getTranslation, getMultilingualUrls } from "intlayer";
925
+
926
+ export const generateMetadata = ({ params: { locale } }) => {
927
+ const t = (content) => getTranslation(content, locale);
928
+
929
+ return {
930
+ title: t({
931
+ en: "My title",
932
+ fr: "Mon titre",
933
+ es: "Mi título",
934
+ }),
935
+ description: t({
936
+ en: "My description",
937
+ fr: "Ma description",
938
+ es: "Mi descripción",
939
+ }),
940
+ };
941
+ };
942
+
943
+ // ... Reszta kodu
944
+ ```
945
+
946
+ ```javascript fileName="src/app/[locale]/layout.cjs or src/app/[locale]/page.cjs" codeFormat="commonjs"
947
+ const { getTranslation, getMultilingualUrls } = require("intlayer");
948
+
949
+ const generateMetadata = ({ params: { locale } }) => {
950
+ const t = (content) => getTranslation(content, locale);
951
+
952
+ return {
953
+ title: t({
954
+ en: "My title",
955
+ fr: "Mon titre",
956
+ es: "Mi título",
957
+ }),
958
+ description: t({
959
+ en: "My description",
960
+ fr: "Ma description",
961
+ es: "Mi descripción",
962
+ }),
963
+ };
964
+ };
965
+
966
+ module.exports = { generateMetadata };
967
+
968
+ // ... Reszta kodu
969
+ ```
970
+
971
+ > Dowiedz się więcej o optymalizacji metadanych [w oficjalnej dokumentacji Next.js](https://nextjs.org/docs/app/building-your-application/optimizing/metadata).
972
+
973
+ ### (Opcjonalny) Krok 9: Internacjonalizacja plików sitemap.xml i robots.txt
974
+
975
+ Aby zinternacjonalizować pliki `sitemap.xml` i `robots.txt`, możesz użyć funkcji `getMultilingualUrls` dostarczonej przez Intlayer. Funkcja ta pozwala na generowanie wielojęzycznych URL-i dla Twojej mapy witryny.
976
+
977
+ ```tsx fileName="src/app/sitemap.ts" codeFormat="typescript"
978
+ import { getMultilingualUrls } from "intlayer";
979
+ import type { MetadataRoute } from "next";
980
+
981
+ const sitemap = (): MetadataRoute.Sitemap => [
982
+ {
983
+ url: "https://example.com",
984
+ alternates: {
985
+ languages: {
986
+ ...getMultilingualUrls("https://example.com"),
987
+ "x-default": "https://example.com",
988
+ },
989
+ },
990
+ },
991
+ {
992
+ url: "https://example.com/login",
993
+ alternates: {
994
+ languages: {
995
+ ...getMultilingualUrls("https://example.com/login"),
996
+ "x-default": "https://example.com/login",
997
+ },
998
+ },
999
+ },
1000
+ {
1001
+ url: "https://example.com/register",
1002
+ alternates: {
1003
+ languages: {
1004
+ ...getMultilingualUrls("https://example.com/register"),
1005
+ "x-default": "https://example.com/register",
1006
+ },
1007
+ },
1008
+ },
1009
+ ];
1010
+
1011
+ export default sitemap;
1012
+ ```
1013
+
1014
+ ```jsx fileName="src/app/sitemap.mjx" codeFormat="esm"
1015
+ import { getMultilingualUrls } from "intlayer";
1016
+
1017
+ const sitemap = () => [
1018
+ {
1019
+ url: "https://example.com",
1020
+ alternates: {
1021
+ languages: {
1022
+ ...getMultilingualUrls("https://example.com"),
1023
+ "x-default": "https://example.com",
1024
+ },
1025
+ },
1026
+ },
1027
+ {
1028
+ url: "https://example.com/login",
1029
+ alternates: {
1030
+ languages: {
1031
+ ...getMultilingualUrls("https://example.com/login"),
1032
+ "x-default": "https://example.com/login",
1033
+ },
1034
+ },
1035
+ },
1036
+ {
1037
+ url: "https://example.com/register",
1038
+ alternates: {
1039
+ languages: {
1040
+ ...getMultilingualUrls("https://example.com/register"),
1041
+ "x-default": "https://example.com/register",
1042
+ },
1043
+ },
1044
+ },
1045
+ ];
1046
+
1047
+ export default sitemap;
1048
+ ```
1049
+
1050
+ ```jsx fileName="src/app/sitemap.csx" codeFormat="commonjs"
1051
+ const { getMultilingualUrls } = require("intlayer");
1052
+
1053
+ const sitemap = () => [
1054
+ {
1055
+ url: "https://example.com",
1056
+ alternates: {
1057
+ languages: {
1058
+ ...getMultilingualUrls("https://example.com"),
1059
+ "x-default": "https://example.com",
1060
+ },
1061
+ },
1062
+ },
1063
+ {
1064
+ url: "https://example.com/login",
1065
+ alternates: {
1066
+ languages: {
1067
+ ...getMultilingualUrls("https://example.com/login"),
1068
+ "x-default": "https://example.com/login",
1069
+ },
1070
+ },
1071
+ },
1072
+ {
1073
+ url: "https://example.com/register",
1074
+ alternates: {
1075
+ languages: {
1076
+ ...getMultilingualUrls("https://example.com/register"),
1077
+ "x-default": "https://example.com/register",
1078
+ },
1079
+ },
1080
+ },
1081
+ ];
1082
+
1083
+ module.exports = sitemap;
1084
+ ```
1085
+
1086
+ ```tsx fileName="src/app/robots.ts" codeFormat="typescript"
1087
+ import type { MetadataRoute } from "next";
1088
+ import { getMultilingualUrls } from "intlayer";
1089
+
1090
+ // Funkcja pobierająca wszystkie wielojęzyczne URL-e z podanej listy
1091
+ const getAllMultilingualUrls = (urls: string[]) =>
1092
+ urls.flatMap((url) => Object.values(getMultilingualUrls(url)) as string[]);
1093
+
1094
+ // Definicja reguł dla pliku robots.txt
1095
+ const robots = (): MetadataRoute.Robots => ({
1096
+ rules: {
1097
+ userAgent: "*",
1098
+ allow: ["/"],
1099
+ disallow: getAllMultilingualUrls(["/login", "/register"]), // Blokowanie dostępu do stron logowania i rejestracji
1100
+ },
1101
+ host: "https://example.com",
1102
+ sitemap: `https://example.com/sitemap.xml`,
1103
+ });
1104
+
1105
+ export default robots;
1106
+
1107
+ export default robots;
1108
+ ```
1109
+
1110
+ ```jsx fileName="src/app/robots.mjx" codeFormat="esm"
1111
+ import { getMultilingualUrls } from "intlayer";
1112
+
1113
+ // Funkcja pobierająca wszystkie wielojęzyczne URL-e z podanej listy
1114
+ const getAllMultilingualUrls = (urls) =>
1115
+ urls.flatMap((url) => Object.values(getMultilingualUrls(url)));
1116
+
1117
+ const robots = () => ({
1118
+ rules: {
1119
+ userAgent: "*",
1120
+ allow: ["/"],
1121
+ disallow: getAllMultilingualUrls(["/login", "/register"]), // Blokuj dostęp do stron logowania i rejestracji
1122
+ },
1123
+ host: "https://example.com",
1124
+ sitemap: `https://example.com/sitemap.xml`, // Lokalizacja mapy strony
1125
+ });
1126
+
1127
+ export default robots;
1128
+ ```
1129
+
1130
+ ```jsx fileName="src/app/robots.csx" codeFormat="commonjs"
1131
+ const { getMultilingualUrls } = require("intlayer");
1132
+
1133
+ // Funkcja pobierająca wszystkie wielojęzyczne URL-e z podanej listy
1134
+ const getAllMultilingualUrls = (urls) =>
1135
+ urls.flatMap((url) => Object.values(getMultilingualUrls(url)));
1136
+
1137
+ const robots = () => ({
1138
+ rules: {
1139
+ userAgent: "*",
1140
+ allow: ["/"],
1141
+ disallow: getAllMultilingualUrls(["/login", "/register"]),
1142
+ },
1143
+ host: "https://example.com",
1144
+ sitemap: `https://example.com/sitemap.xml`,
1145
+ });
1146
+
1147
+ module.exports = robots;
1148
+ ```
1149
+
1150
+ > Dowiedz się więcej o optymalizacji mapy witryny [w oficjalnej dokumentacji Next.js](https://nextjs.org/docs/app/api-reference/file-conventions/metadata/sitemap). Dowiedz się więcej o optymalizacji pliku robots.txt [w oficjalnej dokumentacji Next.js](https://nextjs.org/docs/app/api-reference/file-conventions/metadata/robots).
1151
+
1152
+ ### (Opcjonalny) Krok 10: Zmień język swojej zawartości
1153
+
1154
+ Aby zmienić język treści w Next.js, zalecanym sposobem jest użycie komponentu `Link` do przekierowania użytkowników na odpowiednią zlokalizowaną stronę. Komponent `Link` umożliwia prefetching strony, co pomaga uniknąć pełnego przeładowania strony.
1155
+
1156
+ ```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
1157
+ "use client";
1158
+
1159
+ import {
1160
+ Locales,
1161
+ getHTMLTextDir,
1162
+ getLocaleName,
1163
+ getLocalizedUrl,
1164
+ } from "intlayer";
1165
+ import { useLocale } from "next-intlayer";
1166
+ import { type FC } from "react";
1167
+ import Link from "next/link";
1168
+
1169
+ const LocaleSwitcher: FC = () => {
1170
+ const { locale, pathWithoutLocale, availableLocales, setLocale } =
1171
+ useLocale();
1172
+
1173
+ return (
1174
+ <div>
1175
+ <button popoverTarget="localePopover">{getLocaleName(locale)}</button>
1176
+ <div id="localePopover" popover="auto">
1177
+ {availableLocales.map((localeItem) => (
1178
+ <Link
1179
+ href={getLocalizedUrl(pathWithoutLocale, localeItem)}
1180
+ hrefLang={localeItem}
1181
+ key={localeItem}
1182
+ aria-current={locale === localeItem ? "page" : undefined}
1183
+ onClick={() => setLocale(localeItem)}
1184
+ replace // Zapewni, że przycisk "wstecz" w przeglądarce przekieruje do poprzedniej strony
1185
+ >
1186
+ <span>
1187
+ {/* Lokalizacja - np. FR */}
1188
+ {localeItem}
1189
+ </span>
1190
+ <span>
1191
+ {/* Język w jego własnej lokalizacji - np. Français */}
1192
+ {getLocaleName(localeItem, locale)}
1193
+ </span>
1194
+ <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
1195
+ {/* Język w bieżącym lokalnym ustawieniu - np. Francés przy ustawionym Locales.SPANISH */}
1196
+ {getLocaleName(localeItem)}
1197
+ </span>
1198
+ <span dir="ltr" lang={Locales.ENGLISH}>
1199
+ {/* Język po angielsku - np. French */}
1200
+ {getLocaleName(localeItem, Locales.ENGLISH)}
1201
+ </span>
1202
+ </Link>
1203
+ ))}
1204
+ </div>
1205
+ </div>
1206
+ );
1207
+ };
1208
+ ```
1209
+
1210
+ ```jsx fileName="src/components/LocaleSwitcher.msx" codeFormat="esm"
1211
+ "use client";
1212
+
1213
+ import {
1214
+ Locales,
1215
+ getHTMLTextDir,
1216
+ getLocaleName,
1217
+ getLocalizedUrl,
1218
+ } from "intlayer";
1219
+ import { useLocale } from "next-intlayer";
1220
+ import Link from "next/link";
1221
+
1222
+ const LocaleSwitcher = () => {
1223
+ const { locale, pathWithoutLocale, availableLocales, setLocale } =
1224
+ useLocale();
1225
+
1226
+ return (
1227
+ <div>
1228
+ <button popoverTarget="localePopover">{getLocaleName(locale)}</button>
1229
+ <div id="localePopover" popover="auto">
1230
+ {availableLocales.map((localeItem) => (
1231
+ <Link
1232
+ href={getLocalizedUrl(pathWithoutLocale, localeItem)}
1233
+ hrefLang={localeItem}
1234
+ key={localeItem}
1235
+ aria-current={locale === localeItem ? "page" : undefined}
1236
+ onClick={() => setLocale(localeItem)}
1237
+ replace // Zapewni, że przycisk "wstecz" w przeglądarce przekieruje do poprzedniej strony
1238
+ >
1239
+ <span>
1240
+ {/* Locale - np. FR */}
1241
+ {localeItem}
1242
+ </span>
1243
+ <span>
1244
+ {/* Język w jego własnej lokalizacji - np. Français */}
1245
+ {getLocaleName(localeItem, locale)}
1246
+ </span>
1247
+ <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
1248
+ {/* Język w bieżącej lokalizacji - np. Francés przy ustawionej lokalizacji Locales.SPANISH */}
1249
+ {getLocaleName(localeItem)}
1250
+ </span>
1251
+ <span dir="ltr" lang={Locales.ENGLISH}>
1252
+ {/* Język po angielsku - np. French */}
1253
+ {getLocaleName(localeItem, Locales.ENGLISH)}
1254
+ </span>
1255
+ </Link>
1256
+ ))}
1257
+ </div>
1258
+ </div>
1259
+ );
1260
+ };
1261
+ ```
1262
+
1263
+ ```jsx fileName="src/components/LocaleSwitcher.csx" codeFormat="commonjs"
1264
+ "use client";
1265
+
1266
+ const {
1267
+ Locales,
1268
+ getHTMLTextDir,
1269
+ getLocaleName,
1270
+ getLocalizedUrl,
1271
+ } = require("intlayer");
1272
+ const { useLocale } = require("next-intlayer");
1273
+ const Link = require("next/link");
1274
+
1275
+ const LocaleSwitcher = () => {
1276
+ const { locale, pathWithoutLocale, availableLocales, setLocale } =
1277
+ useLocale();
1278
+
1279
+ return (
1280
+ <div>
1281
+ <button popoverTarget="localePopover">{getLocaleName(locale)}</button>
1282
+ <div id="localePopover" popover="auto">
1283
+ {availableLocales.map((localeItem) => (
1284
+ <Link
1285
+ href={getLocalizedUrl(pathWithoutLocale, localeItem)}
1286
+ hrefLang={localeItem}
1287
+ key={localeItem}
1288
+ aria-current={locale === localeItem ? "page" : undefined}
1289
+ onClick={() => setLocale(localeItem)}
1290
+ replace // Zapewni, że przycisk "wstecz" w przeglądarce przekieruje do poprzedniej strony
1291
+ >
1292
+ <span>
1293
+ {/* Lokalizacja - np. FR */}
1294
+ {localeItem}
1295
+ </span>
1296
+ <span>
1297
+ {/* Język w swojej własnej lokalizacji - np. Français */}
1298
+ {getLocaleName(localeItem, locale)}
1299
+ </span>
1300
+ <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
1301
+ {/* Język w bieżącej lokalizacji - np. Francés przy ustawionej lokalizacji Locales.SPANISH */}
1302
+ {getLocaleName(localeItem)}
1303
+ </span>
1304
+ <span dir="ltr" lang={Locales.ENGLISH}>
1305
+ {/* Język po angielsku - np. French */}
1306
+ {getLocaleName(localeItem, Locales.ENGLISH)}
1307
+ </span>
1308
+ </Link>
1309
+ ))}
1310
+ </div>
1311
+ </div>
1312
+ );
1313
+ };
1314
+ ```
1315
+
1316
+ > Alternatywnym sposobem jest użycie funkcji `setLocale` dostarczonej przez hook `useLocale`. Ta funkcja nie pozwala na prefetching strony. Szczegóły znajdziesz w dokumentacji hooka [`useLocale`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/packages/next-intlayer/useLocale.md).
1317
+
1318
+ > Możesz również ustawić funkcję w opcji `onLocaleChange`, aby wywołać niestandardową funkcję w momencie zmiany lokalizacji.
1319
+
1320
+ ```tsx fileName="src/components/LocaleSwitcher.tsx"
1321
+ "use client";
1322
+
1323
+ import { useRouter } from "next/navigation";
1324
+ import { useLocale } from "next-intlayer";
1325
+ import { getLocalizedUrl } from "intlayer";
1326
+
1327
+ // ... Reszta kodu
1328
+
1329
+ const router = useRouter();
1330
+ const { setLocale } = useLocale({
1331
+ onLocaleChange: (locale) => {
1332
+ router.push(getLocalizedUrl(pathWithoutLocale, locale));
1333
+ },
1334
+ });
1335
+
1336
+ return (
1337
+ <button onClick={() => setLocale(Locales.FRENCH)}>Zmień na francuski</button>
1338
+ );
1339
+ ```
1340
+
1341
+ > Odwołania do dokumentacji:
1342
+ >
1343
+ > - [`useLocale` hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/packages/next-intlayer/useLocale.md)
1344
+ > - [`getLocaleName` hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/packages/intlayer/getLocaleName.md)
1345
+ > - [`getLocalizedUrl` hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/packages/intlayer/getLocalizedUrl.md)
1346
+ > - [`getHTMLTextDir` hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/packages/intlayer/getHTMLTextDir.md)
1347
+ > - [`hrefLang` attribute](https://developers.google.com/search/docs/specialty/international/localized-versions?hl=fr)
1348
+ > - [`lang` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/lang)
1349
+ > - [`dir` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir)
1350
+ > - [`aria-current` attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current)
1351
+
1352
+ ### (Opcjonalny) Krok 11: Tworzenie lokalizowanego komponentu Link
1353
+
1354
+ Aby zapewnić, że nawigacja w Twojej aplikacji respektuje aktualną lokalizację, możesz stworzyć niestandardowy komponent `Link`. Ten komponent automatycznie dodaje prefiks z aktualnym językiem do wewnętrznych adresów URL. Na przykład, gdy użytkownik mówiący po francusku kliknie na link do strony "About", zostanie przekierowany na `/fr/about` zamiast na `/about`.
1355
+
1356
+ To zachowanie jest przydatne z kilku powodów:
1357
+
1358
+ - **SEO i doświadczenie użytkownika**: Lokalizowane adresy URL pomagają wyszukiwarkom poprawnie indeksować strony specyficzne dla danego języka oraz dostarczają użytkownikom treści w ich preferowanym języku.
1359
+ - **Spójność**: Korzystając z lokalizowanego linku w całej aplikacji, gwarantujesz, że nawigacja pozostaje w ramach bieżącej lokalizacji, zapobiegając nieoczekiwanym zmianom języka.
1360
+ - **Utrzymanie**: Centralizacja logiki lokalizacji w jednym komponencie upraszcza zarządzanie adresami URL, co sprawia, że baza kodu jest łatwiejsza do utrzymania i rozbudowy wraz z rozwojem aplikacji.
1361
+
1362
+ Poniżej znajduje się implementacja lokalizowanego komponentu `Link` w TypeScript:
1363
+
1364
+ ```tsx fileName="src/components/Link.tsx" codeFormat="typescript"
1365
+ "use client";
1366
+
1367
+ import { getLocalizedUrl } from "intlayer";
1368
+ import NextLink, { type LinkProps as NextLinkProps } from "next/link";
1369
+ import { useLocale } from "next-intlayer";
1370
+ import { forwardRef, PropsWithChildren, type ForwardedRef } from "react";
1371
+
1372
+ /**
1373
+ * Funkcja pomocnicza do sprawdzania, czy podany URL jest zewnętrzny.
1374
+ * Jeśli URL zaczyna się od http:// lub https://, jest uznawany za zewnętrzny.
1375
+ */
1376
+ export const checkIsExternalLink = (href?: string): boolean =>
1377
+ /^https?:\/\//.test(href ?? "");
1378
+
1379
+ /**
1380
+ * Niestandardowy komponent Link, który dostosowuje atrybut href na podstawie aktualnej lokalizacji.
1381
+ * Dla linków wewnętrznych używa `getLocalizedUrl`, aby poprzedzić URL lokalizacją (np. /fr/about).
1382
+ * Zapewnia to, że nawigacja pozostaje w tym samym kontekście lokalizacji.
1383
+ */
1384
+ export const Link = forwardRef<
1385
+ HTMLAnchorElement,
1386
+ PropsWithChildren<NextLinkProps>
1387
+ >(({ href, children, ...props }, ref: ForwardedRef<HTMLAnchorElement>) => {
1388
+ const { locale } = useLocale();
1389
+ const isExternalLink = checkIsExternalLink(href.toString());
1390
+
1391
+ // Jeśli link jest wewnętrzny i podano prawidłowy href, pobierz zlokalizowany URL.
1392
+ const hrefI18n: NextLinkProps["href"] =
1393
+ href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
1394
+
1395
+ return (
1396
+ <NextLink href={hrefI18n} ref={ref} {...props}>
1397
+ {children}
1398
+ </NextLink>
1399
+ );
1400
+ });
1401
+
1402
+ Link.displayName = "Link";
1403
+ ```
1404
+
1405
+ ```jsx fileName="src/components/Link.mjx" codeFormat="esm"
1406
+ 'use client';
1407
+
1408
+ import { getLocalizedUrl } from 'intlayer';
1409
+ import NextLink, { type LinkProps as NextLinkProps } from 'next/link';
1410
+ import { useLocale } from 'next-intlayer';
1411
+ import { forwardRef, PropsWithChildren, type ForwardedRef } from 'react';
1412
+
1413
+ /**
1414
+ * Funkcja pomocnicza do sprawdzania, czy podany URL jest zewnętrzny.
1415
+ * Jeśli URL zaczyna się od http:// lub https://, jest uznawany za zewnętrzny.
1416
+ */
1417
+ export const checkIsExternalLink = (href) =>
1418
+ /^https?:\/\//.test(href ?? '');
1419
+
1420
+ /**
1421
+ * Niestandardowy komponent Link, który dostosowuje atrybut href na podstawie aktualnej lokalizacji.
1422
+ * Dla linków wewnętrznych używa `getLocalizedUrl`, aby dodać prefiks lokalizacji do URL (np. /fr/about).
1423
+ * Zapewnia to, że nawigacja pozostaje w tym samym kontekście lokalizacji.
1424
+ */
1425
+ export const Link = forwardRef(({ href, children, ...props }, ref) => {
1426
+ const { locale } = useLocale();
1427
+ const isExternalLink = checkIsExternalLink(href.toString());
1428
+
1429
+ // Jeśli link jest wewnętrzny i podano prawidłowy href, pobierz zlokalizowany URL.
1430
+ const hrefI18n =
1431
+ href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
1432
+
1433
+ return (
1434
+ <NextLink href={hrefI18n} ref={ref} {...props}>
1435
+ {children}
1436
+ </NextLink>
1437
+ );
1438
+ });
1439
+
1440
+ Link.displayName = 'Link';
1441
+ ```
1442
+
1443
+ ```jsx fileName="src/components/Link.csx" codeFormat="commonjs"
1444
+ 'use client';
1445
+
1446
+ const { getLocalizedUrl } = require("intlayer");
1447
+ const NextLink = require("next/link");
1448
+ const { useLocale } = require("next-intlayer");
1449
+ const { forwardRef } = require("react");
1450
+
1451
+ /**
1452
+ * Funkcja pomocnicza do sprawdzania, czy dany URL jest zewnętrzny.
1453
+ * Jeśli URL zaczyna się od http:// lub https://, jest uznawany za zewnętrzny.
1454
+ */
1455
+ const checkIsExternalLink = (href) =>
1456
+ /^https?:\/\//.test(href ?? '');
1457
+
1458
+
1459
+ const Link = forwardRef(({ href, children, ...props }, ref) => {
1460
+ const { locale } = useLocale();
1461
+ const isExternalLink = checkIsExternalLink(href.toString());
1462
+
1463
+ // Jeśli link jest wewnętrzny i podano poprawny href, pobierz zlokalizowany URL.
1464
+ const hrefI18n: NextLinkProps['href'] =
1465
+ href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
1466
+
1467
+ return (
1468
+ <NextLink href={hrefI18n} ref={ref} {...props}>
1469
+ {children}
1470
+ </NextLink>
1471
+ );
1472
+ });
1473
+
1474
+ Link.displayName = 'Link';
1475
+ ```
1476
+
1477
+ #### Jak to działa
1478
+
1479
+ - **Wykrywanie linków zewnętrznych**:
1480
+ Funkcja pomocnicza `checkIsExternalLink` określa, czy URL jest zewnętrzny. Linki zewnętrzne pozostają niezmienione, ponieważ nie wymagają lokalizacji.
1481
+
1482
+ - **Pobieranie bieżącej lokalizacji**:
1483
+ Hook `useLocale` dostarcza aktualną lokalizację (np. `fr` dla języka francuskiego).
1484
+
1485
+ - **Lokalizacja URL**:
1486
+ Dla linków wewnętrznych (czyli nie zewnętrznych) używana jest funkcja `getLocalizedUrl`, która automatycznie dodaje prefiks z aktualną lokalizacją do URL. Oznacza to, że jeśli użytkownik korzysta z wersji francuskiej, przekazanie `/about` jako `href` zostanie przekształcone na `/fr/about`.
1487
+
1488
+ - **Zwracanie linku**:
1489
+ Komponent zwraca element `<a>` z lokalizowanym URL, zapewniając spójność nawigacji zgodnie z lokalizacją.
1490
+
1491
+ Integrując ten komponent `Link` w całej aplikacji, utrzymujesz spójne i świadome językowo doświadczenie użytkownika, a także korzystasz z lepszego SEO i użyteczności.
1492
+
1493
+ ### (Opcjonalny) Krok 12: Pobierz aktualną lokalizację w Server Actions
1494
+
1495
+ Jeśli potrzebujesz aktywnej lokalizacji wewnątrz Server Action (np. do lokalizacji e-maili lub uruchamiania logiki zależnej od lokalizacji), wywołaj `getLocale` z `next-intlayer/server`:
1496
+
1497
+ ```tsx fileName="src/app/actions/getLocale.ts" codeFormat="typescript"
1498
+ "use server";
1499
+
1500
+ import { getLocale } from "next-intlayer/server";
1501
+
1502
+ export const myServerAction = async () => {
1503
+ const locale = await getLocale();
1504
+
1505
+ // Zrób coś z lokalizacją
1506
+ };
1507
+ ```
1508
+
1509
+ > Funkcja `getLocale` stosuje kaskadową strategię, aby określić lokalizację użytkownika:
1510
+ >
1511
+ > 1. Najpierw sprawdza nagłówki żądania pod kątem wartości lokalizacji, która mogła zostać ustawiona przez middleware
1512
+ > 2. Jeśli w nagłówkach nie znaleziono lokalizacji, szuka lokalizacji zapisanej w ciasteczkach
1513
+ > 3. Jeśli nie znaleziono ciasteczka, próbuje wykryć preferowany język użytkownika na podstawie ustawień przeglądarki
1514
+ > 4. W ostateczności, używana jest domyślna lokalizacja skonfigurowana w aplikacji
1515
+ >
1516
+ > Zapewnia to wybór najbardziej odpowiedniej lokalizacji na podstawie dostępnego kontekstu.
1517
+
1518
+ ### (Opcjonalnie) Krok 13: Optymalizacja rozmiaru bundla
1519
+
1520
+ Podczas korzystania z `next-intlayer`, słowniki są domyślnie dołączane do bundla dla każdej strony. Aby zoptymalizować rozmiar bundla, Intlayer udostępnia opcjonalny plugin SWC, który inteligentnie zastępuje wywołania `useIntlayer` za pomocą makr. Zapewnia to, że słowniki są dołączane tylko do bundli stron, które faktycznie ich używają.
1521
+
1522
+ Aby włączyć tę optymalizację, zainstaluj pakiet `@intlayer/swc`. Po instalacji `next-intlayer` automatycznie wykryje i użyje tego pluginu:
1523
+
1524
+ ```bash packageManager="npm"
1525
+ npm install @intlayer/swc --save-dev
1526
+ ```
1527
+
1528
+ ```bash packageManager="pnpm"
1529
+ pnpm add @intlayer/swc --save-dev
1530
+ ```
1531
+
1532
+ ```bash packageManager="yarn"
1533
+ yarn add @intlayer/swc --save-dev
1534
+ ```
1535
+
1536
+ > Uwaga: Ta optymalizacja jest dostępna tylko dla Next.js 13 i nowszych wersji.
1537
+
1538
+ > Uwaga: Ten pakiet nie jest instalowany domyślnie, ponieważ wtyczki SWC są nadal eksperymentalne w Next.js. Może się to zmienić w przyszłości.
1539
+
1540
+ > Uwaga: Jeśli ustawisz opcję jako `importMode: 'dynamic'` lub `importMode: 'live'`, będzie to polegać na Suspense, więc będziesz musiał owinąć wywołania `useIntlayer` w granicę `Suspense`. Oznacza to, że nie będziesz mógł używać `useIntlayer` bezpośrednio na najwyższym poziomie komponentu Strony / Układu.
1541
+
1542
+ ### Konfiguracja TypeScript
1543
+
1544
+ Intlayer używa rozszerzenia modułów (module augmentation), aby korzystać z zalet TypeScript i wzmocnić Twoją bazę kodu.
1545
+
1546
+ ![Autouzupełnianie](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true)
1547
+
1548
+ ![Błąd tłumaczenia](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png?raw=true)
1549
+
1550
+ Upewnij się, że Twoja konfiguracja TypeScript zawiera automatycznie generowane typy.
1551
+
1552
+ ```json5 fileName="tsconfig.json"
1553
+ {
1554
+ // ... Twoje istniejące konfiguracje TypeScript
1555
+ "include": [
1556
+ // ... Twoje istniejące konfiguracje TypeScript
1557
+ ".intlayer/**/*.ts", // Dołącz automatycznie generowane typy
1558
+ ],
1559
+ }
1560
+ ```
1561
+
1562
+ ### Konfiguracja Git
1563
+
1564
+ Zaleca się ignorowanie plików generowanych przez Intlayer. Pozwala to uniknąć ich zatwierdzania do repozytorium Git.
1565
+
1566
+ Aby to zrobić, możesz dodać następujące instrukcje do pliku `.gitignore`:
1567
+
1568
+ ```plaintext fileName=".gitignore"
1569
+ # Ignoruj pliki generowane przez Intlayer
1570
+ .intlayer
1571
+ ```
1572
+
1573
+ ### Rozszerzenie VS Code
1574
+
1575
+ Aby poprawić swoje doświadczenie w pracy z Intlayer, możesz zainstalować oficjalne **rozszerzenie Intlayer dla VS Code**.
1576
+
1577
+ [Zainstaluj z Marketplace VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
1578
+
1579
+ To rozszerzenie oferuje:
1580
+
1581
+ - **Autouzupełnianie** kluczy tłumaczeń.
1582
+ - **Wykrywanie błędów w czasie rzeczywistym** dla brakujących tłumaczeń.
1583
+ - **Podgląd w linii** przetłumaczonej zawartości.
1584
+ - **Szybkie akcje** umożliwiające łatwe tworzenie i aktualizację tłumaczeń.
1585
+
1586
+ Aby uzyskać więcej informacji o korzystaniu z rozszerzenia, zapoznaj się z dokumentacją [Intlayer VS Code Extension](https://intlayer.org/doc/vs-code-extension).
1587
+
1588
+ ### Idź dalej
1589
+
1590
+ Aby pójść dalej, możesz zaimplementować [edytor wizualny](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_visual_editor.md) lub zewnętrznie zarządzać swoją zawartością, korzystając z [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_CMS.md).
1591
+
1592
+ ```
1593
+
1594
+ ```