@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,1513 @@
1
+ ---
2
+ createdAt: 2024-12-07
3
+ updatedAt: 2025-06-29
4
+ title: Jak przetłumaczyć swoją aplikację Next.js i Page Router – przewodnik i18n 2025
5
+ description: Dowiedz się, jak uczynić swoją stronę Next.js korzystającą z Page Router wielojęzyczną. Postępuj zgodnie z dokumentacją, aby zrealizować internacjonalizację (i18n) i tłumaczenie.
6
+ keywords:
7
+ - Internacjonalizacja
8
+ - Dokumentacja
9
+ - Intlayer
10
+ - Page Router
11
+ - Next.js
12
+ - JavaScript
13
+ - React
14
+ slugs:
15
+ - doc
16
+ - environment
17
+ - nextjs
18
+ - next-with-page-router
19
+ history:
20
+ - version: 5.6.0
21
+ date: 2025-07-06
22
+ changes: Przekształcenie funkcji `withIntlayer()` na funkcję opartą na promise
23
+ - version: 5.5.10
24
+ date: 2025-06-29
25
+ changes: Inicjalizacja historii
26
+ ---
27
+
28
+ # Przetłumacz swoją stronę Next.js i Page Router za pomocą Intlayer | Internacjonalizacja (i18n)
29
+
30
+ ## Spis treści
31
+
32
+ <TOC/>
33
+
34
+ ## Czym jest Intlayer?
35
+
36
+ **Intlayer** to innowacyjna, otwartoźródłowa biblioteka do internacjonalizacji (i18n), zaprojektowana, aby uprościć wsparcie wielojęzyczne w nowoczesnych aplikacjach webowych. Intlayer bezproblemowo integruje się z najnowszym frameworkiem **Next.js**, w tym z jego tradycyjnym **Page Router**.
37
+
38
+ Dzięki Intlayer możesz:
39
+
40
+ - **Łatwo zarządzać tłumaczeniami** za pomocą deklaratywnych słowników na poziomie komponentów.
41
+ - **Dynamicznie lokalizować metadane**, trasy i zawartość.
42
+ - **Zapewnić wsparcie TypeScript** dzięki automatycznie generowanym typom, co poprawia autouzupełnianie i wykrywanie błędów.
43
+ - **Korzystać z zaawansowanych funkcji**, takich jak dynamiczne wykrywanie i przełączanie lokalizacji.
44
+
45
+ > Intlayer jest kompatybilny z Next.js 12, 13, 14 oraz 15. Jeśli używasz Next.js App Router, zapoznaj się z [przewodnikiem po App Router](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_with_nextjs_14.md). Dla Next.js 15 postępuj zgodnie z tym [przewodnikiem](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_with_nextjs_15.md).
46
+
47
+ ---
48
+
49
+ ## Przewodnik krok po kroku: Konfiguracja Intlayer w aplikacji Next.js z użyciem Page Router
50
+
51
+ ### Krok 1: Instalacja zależności
52
+
53
+ Zainstaluj niezbędne pakiety, używając preferowanego menedżera pakietów:
54
+
55
+ ```bash packageManager="npm"
56
+ npm install intlayer next-intlayer
57
+ ```
58
+
59
+ ```bash packageManager="pnpm"
60
+ pnpm add intlayer next-intlayer
61
+ ```
62
+
63
+ ```bash packageManager="yarn"
64
+ yarn add intlayer next-intlayer
65
+ ```
66
+
67
+ - **intlayer**
68
+
69
+ - **intlayer**
70
+
71
+ Główny pakiet, który dostarcza narzędzia do internacjonalizacji dla 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).
72
+
73
+ - **next-intlayer**
74
+
75
+ 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.
76
+
77
+ ### Krok 2: Skonfiguruj swój projekt
78
+
79
+ Utwórz plik konfiguracyjny, aby zdefiniować języki obsługiwane przez Twoją aplikację:
80
+
81
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
82
+ import { Locales, type IntlayerConfig } from "intlayer";
83
+
84
+ const config: IntlayerConfig = {
85
+ internationalization: {
86
+ locales: [
87
+ Locales.ENGLISH,
88
+ Locales.FRENCH,
89
+ Locales.SPANISH,
90
+ // Dodaj tutaj inne swoje lokalizacje
91
+ ],
92
+ defaultLocale: Locales.ENGLISH,
93
+ },
94
+ };
95
+
96
+ export default config;
97
+ ```
98
+
99
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
100
+ import { Locales } from "intlayer";
101
+
102
+ /** @type {import('intlayer').IntlayerConfig} */
103
+ const config = {
104
+ internationalization: {
105
+ locales: [
106
+ Locales.ENGLISH,
107
+ Locales.FRENCH,
108
+ Locales.SPANISH,
109
+ // Dodaj tutaj inne swoje lokalizacje
110
+ ],
111
+ defaultLocale: Locales.ENGLISH,
112
+ },
113
+ };
114
+
115
+ export default config;
116
+ ```
117
+
118
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
119
+ const { Locales } = require("intlayer");
120
+
121
+ /** @type {import('intlayer').IntlayerConfig} */
122
+ const config = {
123
+ internationalization: {
124
+ locales: [
125
+ Locales.ENGLISH,
126
+ Locales.FRENCH,
127
+ Locales.SPANISH,
128
+ // Dodaj tutaj inne swoje lokalizacje
129
+ ],
130
+ defaultLocale: Locales.ENGLISH,
131
+ },
132
+ };
133
+
134
+ module.exports = config;
135
+ ```
136
+
137
+ > Za pomocą tego pliku konfiguracyjnego 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).
138
+
139
+ ### Krok 3: Integracja Intlayer z konfiguracją Next.js
140
+
141
+ Zmodyfikuj konfigurację Next.js, aby włączyć Intlayer:
142
+
143
+ ```typescript fileName="next.config.mjs"
144
+ import { withIntlayer } from "next-intlayer/server";
145
+
146
+ /** @type {import('next').NextConfig} */
147
+ const nextConfig = {
148
+ // Twoja istniejąca konfiguracja Next.js
149
+ };
150
+
151
+ export default withIntlayer(nextConfig);
152
+ ```
153
+
154
+ > 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 udostępnia aliasy optymalizujące wydajność oraz zapewnia kompatybilność z komponentami serwerowymi.
155
+
156
+ > Funkcja `withIntlayer()` jest funkcją zwracającą promise. Jeśli chcesz użyć jej z innymi wtyczkami, możesz ją awaitować. Przykład:
157
+ >
158
+ > ```tsx
159
+ > const nextConfig = await withIntlayer(nextConfig);
160
+ > const nextConfigWithOtherPlugins = withOtherPlugins(nextConfig);
161
+ >
162
+ > export default nextConfigWithOtherPlugins;
163
+ > ```
164
+
165
+ ### Krok 4: Skonfiguruj Middleware do wykrywania lokalizacji
166
+
167
+ Skonfiguruj middleware, aby automatycznie wykrywać i obsługiwać preferowaną lokalizację użytkownika:
168
+
169
+ ```typescript fileName="src/middleware.ts" codeFormat="typescript"
170
+ export { intlayerMiddleware as middleware } from "next-intlayer/middleware";
171
+
172
+ export const config = {
173
+ matcher:
174
+ "/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
175
+ };
176
+ ```
177
+
178
+ ```javascript fileName="src/middleware.mjs" codeFormat="esm"
179
+ export { intlayerMiddleware as middleware } from "next-intlayer/middleware";
180
+
181
+ export const config = {
182
+ matcher:
183
+ "/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
184
+ };
185
+ ```
186
+
187
+ ```javascript fileName="src/middleware.cjs" codeFormat="commonjs"
188
+ const { intlayerMiddleware } = require("next-intlayer/middleware");
189
+
190
+ const config = {
191
+ matcher:
192
+ "/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
193
+ };
194
+
195
+ module.exports = { middleware: intlayerMiddleware, config };
196
+ ```
197
+
198
+ > Dostosuj parametr `matcher`, aby odpowiadał trasom Twojej aplikacji. Więcej informacji znajdziesz w [dokumentacji Next.js dotyczącej konfigurowania matcher](https://nextjs.org/docs/app/building-your-application/routing/middleware).
199
+
200
+ ### Krok 5: Zdefiniuj dynamiczne trasy lokalizacji
201
+
202
+ Zaimplementuj dynamiczne routowanie, aby serwować zlokalizowane treści w zależności od lokalizacji użytkownika.
203
+
204
+ 1. **Utwórz strony specyficzne dla lokalizacji:**
205
+
206
+ Zmień nazwę głównego pliku strony, aby zawierał dynamiczny segment `[locale]`.
207
+
208
+ ```bash
209
+ mv src/pages/index.tsx src/pages/[locale]/index.tsx
210
+ ```
211
+
212
+ 2. **Zaktualizuj `_app.tsx`, aby obsługiwał lokalizację:**
213
+
214
+ Zmodyfikuj swój plik `_app.tsx`, aby uwzględnić providery Intlayer.
215
+
216
+ ```tsx fileName="src/pages/_app.tsx" codeFormat="typescript"
217
+ import type { FC } from "react";
218
+ import type { AppProps } from "next/app";
219
+ import { IntlayerClientProvider } from "next-intlayer";
220
+
221
+ const App = FC<AppProps>({ Component, pageProps }) => {
222
+ const { locale } = pageProps;
223
+
224
+ return (
225
+ <IntlayerClientProvider locale={locale}>
226
+ <Component {...pageProps} />
227
+ </IntlayerClientProvider>
228
+ );
229
+ }
230
+
231
+ export default MyApp;
232
+ ```
233
+
234
+ ```jsx fileName="src/pages/_app.mjx" codeFormat="esm"
235
+ import { IntlayerClientProvider } from "next-intlayer";
236
+
237
+ const App = ({ Component, pageProps }) => (
238
+ <IntlayerClientProvider locale={locale}>
239
+ <Component {...pageProps} />
240
+ </IntlayerClientProvider>
241
+ );
242
+
243
+ export default App;
244
+ ```
245
+
246
+ ```jsx fileName="src/pages/_app.csx" codeFormat="commonjs"
247
+ const { IntlayerClientProvider } = require("next-intlayer");
248
+
249
+ const App = ({ Component, pageProps }) => (
250
+ <IntlayerClientProvider locale={locale}>
251
+ <Component {...pageProps} />
252
+ </IntlayerClientProvider>
253
+ );
254
+
255
+ module.exports = App;
256
+ ```
257
+
258
+ 3. **Skonfiguruj `getStaticPaths` i `getStaticProps`:**
259
+
260
+ W pliku `[locale]/index.tsx` zdefiniuj ścieżki i propsy, aby obsłużyć różne lokalizacje.
261
+
262
+ ```tsx fileName="src/pages/[locale]/index.tsx" codeFormat="typescript"
263
+ import type { FC } from "react";
264
+ import type { GetStaticPaths, GetStaticProps } from "next";
265
+ import { type Locales, getConfiguration } from "intlayer";
266
+
267
+ const HomePage: FC = () => <div>{/* Twoja zawartość tutaj */}</div>;
268
+
269
+ export const getStaticPaths: GetStaticPaths = () => {
270
+ const { internationalization } = getConfiguration();
271
+ const { locales } = internationalization;
272
+
273
+ const paths = locales.map((locale) => ({
274
+ params: { locale },
275
+ }));
276
+
277
+ return { paths, fallback: false };
278
+ };
279
+
280
+ export const getStaticProps: GetStaticProps = ({ params }) => {
281
+ const locale = params?.locale as string;
282
+
283
+ return {
284
+ props: {
285
+ locale,
286
+ },
287
+ };
288
+ };
289
+
290
+ export default HomePage;
291
+ ```
292
+
293
+ ```jsx fileName="src/pages/[locale]/index.mjx" codeFormat="esm"
294
+ import { getConfiguration } from "intlayer";
295
+ import { ComponentExample } from "@components/ComponentExample";
296
+
297
+ const HomePage = () => <div>{/* Twoja zawartość tutaj */}</div>;
298
+
299
+ export const getStaticPaths = () => {
300
+ const { internationalization } = getConfiguration();
301
+ const { locales } = internationalization;
302
+
303
+ const paths = locales.map((locale) => ({
304
+ params: { locale },
305
+ }));
306
+
307
+ return { paths, fallback: false };
308
+ };
309
+
310
+ export const getStaticProps = ({ params }) => {
311
+ const locale = params?.locale;
312
+
313
+ return {
314
+ props: {
315
+ locale,
316
+ },
317
+ };
318
+ };
319
+ ```
320
+
321
+ ```jsx fileName="src/pages/[locale]/index.csx" codeFormat="commonjs"
322
+ const { getConfiguration } = require("intlayer");
323
+ const { ComponentExample } = require("@components/ComponentExample");
324
+
325
+ const HomePage = () => <div>{/* Twoja zawartość tutaj */}</div>;
326
+
327
+ const getStaticPaths = async () => {
328
+ const { internationalization } = getConfiguration();
329
+ const { locales } = internationalization;
330
+
331
+ const paths = locales.map((locale) => ({
332
+ params: { locale },
333
+ }));
334
+
335
+ return { paths, fallback: false };
336
+ };
337
+
338
+ const getStaticProps = async ({ params }) => {
339
+ const locale = params?.locale;
340
+
341
+ return {
342
+ props: {
343
+ locale,
344
+ },
345
+ };
346
+ };
347
+
348
+ module.exports = {
349
+ getStaticProps,
350
+ getStaticPaths,
351
+ default: HomePage,
352
+ };
353
+ ```
354
+
355
+ > `getStaticPaths` i `getStaticProps` zapewniają, że Twoja aplikacja w Next.js Page Router wstępnie buduje niezbędne strony dla wszystkich lokalizacji. Takie podejście zmniejsza obciążenie podczas działania aplikacji i prowadzi do lepszego doświadczenia użytkownika. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją Next.js dotyczącą [`getStaticPaths`](https://nextjs.org/docs/pages/building-your-application/data-fetching/get-static-paths) oraz [`getStaticProps`](https://nextjs.org/docs/pages/building-your-application/data-fetching/get-static-props).
356
+
357
+ ### Krok 6: Zadeklaruj swoją zawartość
358
+
359
+ Utwórz i zarządzaj deklaracjami zawartości, aby przechowywać tłumaczenia.
360
+
361
+ ```tsx fileName="src/pages/[locale]/home.content.ts" contentDeclarationFormat="typescript"
362
+ import { t, type Dictionary } from "intlayer";
363
+
364
+ const homeContent = {
365
+ key: "home",
366
+ content: {
367
+ title: t({
368
+ en: "Welcome to My Website",
369
+ fr: "Bienvenue sur mon site Web",
370
+ es: "Bienvenido a mi sitio web",
371
+ }),
372
+ description: t({
373
+ en: "Get started by editing this page.",
374
+ fr: "Commencez par éditer cette page.",
375
+ es: "Comience por editar esta página.",
376
+ }),
377
+ },
378
+ } satisfies Dictionary;
379
+
380
+ export default homeContent;
381
+ ```
382
+
383
+ ```javascript fileName="src/pages/[locale]/home.content.mjs" contentDeclarationFormat="esm"
384
+ import { t } from "intlayer";
385
+
386
+ /** @type {import('intlayer').Dictionary} */
387
+ // homeContent to deklaracja zawartości strony głównej
388
+ const homeContent = {
389
+ key: "home",
390
+ content: {
391
+ getStarted: {
392
+ main: t({
393
+ en: "Get started by editing this page.",
394
+ fr: "Commencez par éditer cette page.",
395
+ es: "Comience por editar esta página.",
396
+ }),
397
+ pageLink: "src/app/page.tsx",
398
+ },
399
+ },
400
+ };
401
+
402
+ export default homeContent;
403
+ ```
404
+
405
+ ```javascript fileName="src/pages/[locale]/home.content.cjs" contentDeclarationFormat="commonjs"
406
+ const { t } = require("intlayer");
407
+
408
+ /** @type {import('intlayer').Dictionary} */
409
+ // homeContent to deklaracja zawartości strony głównej
410
+ const homeContent = {
411
+ key: "home",
412
+ content: {
413
+ getStarted: {
414
+ main: t({
415
+ en: "Get started by editing this page.",
416
+ fr: "Commencez par éditer cette page.",
417
+ es: "Comience por editar esta página.",
418
+ }),
419
+ pageLink: "src/app/page.tsx",
420
+ },
421
+ },
422
+ };
423
+
424
+ module.exports = homeContent;
425
+ ```
426
+
427
+ ```json fileName="src/pages/[locale]/home.content.json" contentDeclarationFormat="json"
428
+ {
429
+ "$schema": "https://intlayer.org/schema.json",
430
+ "key": "home",
431
+ "content": {
432
+ "nodeType": "translation",
433
+ "translation": {
434
+ "pl": "Zacznij od edycji tej strony.",
435
+ "en": "Get started by editing this page.",
436
+ "fr": "Commencez par éditer cette page.",
437
+ "es": "Comience por editar esta página."
438
+ }
439
+ },
440
+ "pageLink": {
441
+ "nodeType": "translation",
442
+ "translation": {
443
+ "pl": "src/app/page.tsx",
444
+ "en": "src/app/page.tsx",
445
+ "fr": "src/app/page.tsx",
446
+ "es": "src/app/page.tsx"
447
+ }
448
+ }
449
+ }
450
+ }
451
+ ```
452
+
453
+ Aby uzyskać więcej informacji na temat deklarowania zawartości, zapoznaj się z [przewodnikiem po deklaracji zawartości](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/dictionary/content_file.md).
454
+
455
+ ### Krok 7: Wykorzystaj zawartość w swoim kodzie
456
+
457
+ Uzyskaj dostęp do swoich słowników zawartości w całej aplikacji, aby wyświetlać przetłumaczoną zawartość.
458
+
459
+ ```tsx {2,6} fileName="src/pages/[locale]/index.tsx" codeFormat="typescript"
460
+ import type { FC } from "react";
461
+ import { useIntlayer } from "next-intlayer";
462
+ import { ComponentExample } from "@components/ComponentExample";
463
+
464
+ const HomePage: FC = () => {
465
+ const content = useIntlayer("home");
466
+
467
+ return (
468
+ <div>
469
+ <h1>{content.title}</h1>
470
+ <p>{content.description}</p>
471
+ <ComponentExample />
472
+ {/* Dodatkowe komponenty */}
473
+ </div>
474
+ );
475
+ };
476
+
477
+ // ... Reszta kodu, w tym getStaticPaths i getStaticProps
478
+
479
+ export default HomePage;
480
+ ```
481
+
482
+ ```jsx {1,5} fileName="src/pages/[locale]/index.mjx" codeFormat="esm"
483
+ import { useIntlayer } from "next-intlayer";
484
+ import { ComponentExample } from "@components/ComponentExample";
485
+
486
+ const HomePage = () => {
487
+ const content = useIntlayer("home");
488
+
489
+ return (
490
+ <div>
491
+ <h1>{content.getStarted.main}</h1>
492
+ <code>{content.getStarted.pageLink}</code>
493
+
494
+ <ComponentExample />
495
+ {/* Dodatkowe komponenty */}
496
+ </div>
497
+ );
498
+ };
499
+
500
+ // ... Reszta kodu, w tym getStaticPaths i getStaticProps
501
+
502
+ export default HomePage;
503
+ ```
504
+
505
+ ```jsx {1,5} fileName="src/pages/[locale]/index.csx" codeFormat="commonjs"
506
+ const { useIntlayer } = require("next-intlayer");
507
+ const { ComponentExample } = require("@components/ComponentExample");
508
+
509
+ const HomePage = () => {
510
+ const content = useIntlayer("home");
511
+
512
+ return (
513
+ <div>
514
+ <h1>{content.getStarted.main}</h1>
515
+ <code>{content.getStarted.pageLink}</code>
516
+
517
+ <ComponentExample />
518
+ {/* Dodatkowe komponenty */}
519
+ </div>
520
+ );
521
+ };
522
+
523
+ // ... Reszta kodu, w tym getStaticPaths i getStaticProps
524
+ ```
525
+
526
+ ```tsx fileName="src/components/ComponentExample.tsx" codeFormat="typescript"
527
+ import type { FC } from "react";
528
+ import { useIntlayer } from "next-intlayer";
529
+
530
+ export const ComponentExample: FC = () => {
531
+ const content = useIntlayer("component-example"); // Upewnij się, że masz odpowiadającą deklarację zawartości
532
+
533
+ return (
534
+ <div>
535
+ <h2>{content.title}</h2>
536
+ <p>{content.content}</p>
537
+ </div>
538
+ );
539
+ };
540
+ ```
541
+
542
+ ```jsx fileName="src/components/ComponentExample.mjx" codeFormat="esm"
543
+ import { useIntlayer } from "next-intlayer";
544
+
545
+ const ComponentExample = () => {
546
+ const content = useIntlayer("component-example"); // Upewnij się, że masz odpowiadającą deklarację zawartości
547
+
548
+ return (
549
+ <div>
550
+ <h2>{content.title}</h2>
551
+ <p>{content.content}</p>
552
+ </div>
553
+ );
554
+ };
555
+ ```
556
+
557
+ ```jsx fileName="src/components/ComponentExample.csx" codeFormat="commonjs"
558
+ const { useIntlayer } = require("next-intlayer");
559
+
560
+ const ComponentExample = () => {
561
+ const content = useIntlayer("component-example"); // Upewnij się, że masz odpowiadającą deklarację zawartości
562
+
563
+ return (
564
+ <div>
565
+ <h2>{content.title}</h2>
566
+ <p>{content.content}</p>
567
+ </div>
568
+ );
569
+ };
570
+ ```
571
+
572
+ > Podczas używania tłumaczeń w atrybutach typu `string` (np. `alt`, `title`, `href`, `aria-label`), wywołuj
573
+
574
+ > wartość funkcji w następujący sposób:
575
+
576
+ > ```jsx
577
+ > <img src={content.image.src.value} alt={content.image.value} />
578
+ > ```
579
+
580
+ > 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).
581
+
582
+ ### (Opcjonalnie) Krok 8: Internacjonalizacja metadanych
583
+
584
+ Jeśli chcesz internacjonalizować swoje metadane, takie jak tytuł strony, możesz użyć funkcji `getStaticProps` dostarczonej przez Next.js Page Router. W jej wnętrzu możesz pobrać zawartość za pomocą funkcji `getIntlayer`, aby przetłumaczyć swoje metadane.
585
+
586
+ ```typescript fileName="src/pages/[locale]/metadata.content.ts" contentDeclarationFormat="typescript"
587
+ import { type Dictionary, t } from "intlayer";
588
+ import { type Metadata } from "next";
589
+
590
+ const metadataContent = {
591
+ key: "page-metadata",
592
+ content: {
593
+ title: t({
594
+ en: "Create Next App",
595
+ fr: "Créer une application Next.js",
596
+ es: "Crear una aplicación Next.js",
597
+ }),
598
+ description: t({
599
+ en: "Generated by create next app",
600
+ fr: "Généré par create next app",
601
+ es: "Generado por create next app",
602
+ }),
603
+ },
604
+ } satisfies Dictionary<Metadata>;
605
+
606
+ export default metadataContent;
607
+ ```
608
+
609
+ ```javascript fileName="src/pages/[locale]/metadata.content.mjs" contentDeclarationFormat="esm"
610
+ import { t } from "intlayer";
611
+
612
+ /** @type {import('intlayer').Dictionary<import('next').Metadata>} */
613
+ const metadataContent = {
614
+ key: "page-metadata",
615
+ content: {
616
+ title: t({
617
+ en: "Create Next App",
618
+ fr: "Créer une application Next.js",
619
+ es: "Crear una aplicación Next.js",
620
+ }),
621
+ description: t({
622
+ en: "Wygenerowano przez create next app", // opis przetłumaczony na polski
623
+ fr: "Généré par create next app",
624
+ es: "Generado por create next app",
625
+ }),
626
+ },
627
+ };
628
+
629
+ export default metadataContent;
630
+ fr: "Généré par create next app",
631
+ es: "Generado por create next app",
632
+ }),
633
+ },
634
+ };
635
+
636
+ export default metadataContent;
637
+ ```
638
+
639
+ ```javascript fileName="src/pages/[locale]/metadata.content.cjs" contentDeclarationFormat="commonjs"
640
+ const { t } = require("intlayer");
641
+
642
+ /** @type {import('intlayer').Dictionary<import('next').Metadata>} */
643
+ const metadataContent = {
644
+ key: "page-metadata",
645
+ content: {
646
+ title: t({
647
+ en: "Create Next App",
648
+ fr: "Créer une application Next.js",
649
+ es: "Crear una aplicación Next.js",
650
+ }),
651
+ description: t({
652
+ en: "Generated by create next app",
653
+ fr: "Généré par create next app",
654
+ es: "Generado por create next app",
655
+ }),
656
+ },
657
+ };
658
+
659
+ module.exports = metadataContent;
660
+ ```
661
+
662
+ ```json fileName="src/pages/[locale]/metadata.content.json" contentDeclarationFormat="json"
663
+ {
664
+ "key": "page-metadata",
665
+ "content": {
666
+ "title": {
667
+ "nodeType": "translation",
668
+ "translation": {
669
+ "en": "Preact logo",
670
+ "pl": "Logo Preact",
671
+ "fr": "Logo Preact",
672
+ "es": "Logo Preact"
673
+ }
674
+ },
675
+ "description": {
676
+ "nodeType": "translation",
677
+ "translation": {
678
+ "en": "Generated by create next app",
679
+ "pl": "Wygenerowano przez create next app",
680
+ "fr": "Généré par create next app",
681
+ "es": "Generado por create next app"
682
+ }
683
+ }
684
+ }
685
+ }
686
+ ```
687
+
688
+ ````tsx fileName="src/pages/[locale]/index.tsx" codeFormat="typescript"
689
+ import { GetStaticPaths, GetStaticProps } from "next";
690
+ import { getIntlayer, getMultilingualUrls } from "intlayer";
691
+ import { useIntlayer } from "next-intlayer";
692
+ import Head from "next/head";
693
+ import type { FC } from "react";
694
+
695
+ interface HomePageProps {
696
+ locale: string;
697
+ metadata: {
698
+ title: string;
699
+ description: string;
700
+ };
701
+ multilingualUrls: Record<string, string>;
702
+ }
703
+
704
+ const HomePage: FC<HomePageProps> = ({
705
+ metadata,
706
+ multilingualUrls,
707
+ locale,
708
+ }) => {
709
+ const content = useIntlayer("page");
710
+
711
+ return (
712
+ <div>
713
+ <Head>
714
+ <title>{metadata.title}</title>
715
+ <meta name="description" content={metadata.description} />
716
+ {/* Generowanie tagów hreflang dla SEO */}
717
+ {Object.entries(multilingualUrls).map(([lang, url]) => (
718
+ <link key={lang} rel="alternate" hrefLang={lang} href={url} />
719
+ ))}
720
+ <link rel="canonical" href={multilingualUrls[locale]} />
721
+ </Head>
722
+
723
+ {/* Zawartość strony */}
724
+ <main>{/* Twoja zawartość strony tutaj */}</main>
725
+ </div>
726
+ );
727
+ };
728
+
729
+ export const getStaticProps: GetStaticProps<HomePageProps> = async ({
730
+ params,
731
+ }) => {
732
+ const locale = params?.locale as string;
733
+
734
+ const metadata = getIntlayer("page-metadata", locale);
735
+
736
+ /**
737
+ * Generuje obiekt zawierający wszystkie adresy URL dla każdej lokalizacji.
738
+ *
739
+ * Przykład:
740
+ * ```ts
741
+ * getMultilingualUrls('/about');
742
+ *
743
+ * // Zwraca
744
+ * // {
745
+ * // en: '/about',
746
+ * // fr: '/fr/about',
747
+ * // es: '/es/about',
748
+ * // }
749
+ * ```
750
+ */
751
+ const multilingualUrls = getMultilingualUrls("/");
752
+
753
+ return {
754
+ props: {
755
+ locale,
756
+ metadata,
757
+ multilingualUrls,
758
+ },
759
+ };
760
+ };
761
+
762
+ export default HomePage;
763
+
764
+ // ... Reszta kodu, w tym getStaticPaths
765
+ ````
766
+
767
+ ````jsx fileName="src/pages/[locale]/index.mjx" codeFormat="esm"
768
+ import { getIntlayer, getMultilingualUrls } from "intlayer";
769
+ import { useIntlayer } from "next-intlayer";
770
+ import Head from "next/head";
771
+
772
+ const HomePage = ({ metadata, multilingualUrls, locale }) => {
773
+ const content = useIntlayer("page");
774
+
775
+ return (
776
+ <div>
777
+ <Head>
778
+ <title>{metadata.title}</title>
779
+ <meta name="description" content={metadata.description} />
780
+ {/* Generowanie tagów hreflang dla SEO */}
781
+ {Object.entries(multilingualUrls).map(([lang, url]) => (
782
+ <link key={lang} rel="alternate" hrefLang={lang} href={url} />
783
+ ))}
784
+ <link rel="canonical" href={multilingualUrls[locale]} />
785
+ </Head>
786
+
787
+ {/* Zawartość strony */}
788
+ <main>{/* Twoja zawartość strony tutaj */}</main>
789
+ </div>
790
+ );
791
+ };
792
+
793
+ export const getStaticProps = async ({ params }) => {
794
+ const locale = params?.locale;
795
+
796
+ const metadata = getIntlayer("page-metadata", locale);
797
+
798
+ /**
799
+ * Generuje obiekt zawierający wszystkie adresy URL dla każdej lokalizacji.
800
+ *
801
+ * Przykład:
802
+ * ```ts
803
+ * getMultilingualUrls('/about');
804
+ *
805
+ * // Zwraca
806
+ * // {
807
+ * // en: '/about',
808
+ * // fr: '/fr/about',
809
+ * // es: '/es/about',
810
+ * // }
811
+ * ```
812
+ */
813
+ const multilingualUrls = getMultilingualUrls("/");
814
+
815
+ return {
816
+ props: {
817
+ locale,
818
+ metadata,
819
+ multilingualUrls,
820
+ },
821
+ };
822
+ };
823
+
824
+ export default HomePage;
825
+
826
+ // ... Reszta kodu, w tym getStaticPaths
827
+ ````
828
+
829
+ ````jsx fileName="src/pages/[locale]/index.csx" codeFormat="commonjs"
830
+ const { getIntlayer, getMultilingualUrls } = require("intlayer");
831
+ const { useIntlayer } = require("next-intlayer");
832
+ const Head = require("next/head");
833
+
834
+ const HomePage = ({ metadata, multilingualUrls, locale }) => {
835
+ const content = useIntlayer("page");
836
+
837
+ return (
838
+ <div>
839
+ <Head>
840
+ <title>{metadata.title}</title>
841
+ <meta name="description" content={metadata.description} />
842
+ {/* Generowanie tagów hreflang dla SEO */}
843
+ {Object.entries(multilingualUrls).map(([lang, url]) => (
844
+ <link key={lang} rel="alternate" hrefLang={lang} href={url} />
845
+ ))}
846
+ <link rel="canonical" href={multilingualUrls[locale]} />
847
+ </Head>
848
+
849
+ {/* Zawartość strony */}
850
+ <main>{/* Twoja zawartość strony tutaj */}</main>
851
+ </div>
852
+ );
853
+ };
854
+
855
+ const getStaticProps = async ({ params }) => {
856
+ const locale = params?.locale;
857
+
858
+ const metadata = getIntlayer("page-metadata", locale);
859
+
860
+ /**
861
+ * Generuje obiekt zawierający wszystkie adresy URL dla każdej lokalizacji.
862
+ *
863
+ * Przykład:
864
+ * ```ts
865
+ * getMultilingualUrls('/about');
866
+ *
867
+ * // Zwraca
868
+ * // {
869
+ * // en: '/about',
870
+ * // fr: '/fr/about',
871
+ * // es: '/es/about',
872
+ * // }
873
+ * ```
874
+ */
875
+ const multilingualUrls = getMultilingualUrls("/");
876
+
877
+ return {
878
+ props: {
879
+ locale,
880
+ metadata,
881
+ multilingualUrls,
882
+ },
883
+ };
884
+ };
885
+
886
+ module.exports = {
887
+ getStaticProps,
888
+ getStaticPaths,
889
+ default: HomePage,
890
+ };
891
+
892
+ // ... Reszta kodu, w tym getStaticPaths
893
+ ````
894
+
895
+ > Należy zauważyć, ż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 zawartość bezpośrednio, bez dodatkowych właściwości.
896
+
897
+ Alternatywnie możesz użyć funkcji `getTranslation` do deklaracji swoich metadanych. Jednak zaleca się korzystanie z plików deklaracji zawartości, aby zautomatyzować tłumaczenie metadanych i w pewnym momencie wyodrębnić zawartość.
898
+
899
+ ```tsx fileName="src/pages/[locale]/index.tsx" codeFormat="typescript"
900
+ import { GetStaticPaths, GetStaticProps } from "next";
901
+ import {
902
+ type IConfigLocales,
903
+ getTranslation,
904
+ getMultilingualUrls,
905
+ } from "intlayer";
906
+ import { useIntlayer } from "next-intlayer";
907
+ import Head from "next/head";
908
+ import type { FC } from "react";
909
+
910
+ interface HomePageProps {
911
+ locale: string;
912
+ metadata: {
913
+ title: string;
914
+ description: string;
915
+ };
916
+ multilingualUrls: Record<string, string>;
917
+ }
918
+
919
+ const HomePage: FC<HomePageProps> = ({ metadata, multilingualUrls, locale }) => {
920
+ const content = useIntlayer("page");
921
+
922
+ return (
923
+ <div>
924
+ <Head>
925
+ <title>{metadata.title}</title>
926
+ <meta name="description" content={metadata.description} />
927
+ {/* Generuj tagi hreflang dla SEO */}
928
+ {Object.entries(multilingualUrls).map(([lang, url]) => (
929
+ <link
930
+ key={lang}
931
+ rel="alternate"
932
+ hrefLang={lang}
933
+ href={url}
934
+ />
935
+ ))}
936
+ <link rel="canonical" href={multilingualUrls[locale]} />
937
+ </Head>
938
+
939
+ {/* Zawartość strony */}
940
+ <main>
941
+ {/* Tutaj umieść zawartość swojej strony */}
942
+ </main>
943
+ </div>
944
+ );
945
+ };
946
+
947
+ export const getStaticProps: GetStaticProps<HomePageProps> = async ({
948
+ params
949
+ }) => {
950
+ const locale = params?.locale as string;
951
+ const t = <T>(content: IConfigLocales<T>) => getTranslation(content, locale);
952
+
953
+ const metadata = {
954
+ title: t<string>({
955
+ en: "My title",
956
+ fr: "Mon titre",
957
+ es: "Mi título",
958
+ }),
959
+ description: t({
960
+ en: "My description",
961
+ fr: "Ma description",
962
+ es: "Mi descripción",
963
+ }),
964
+ };
965
+
966
+ const multilingualUrls = getMultilingualUrls("/");
967
+
968
+ return {
969
+ props: {
970
+ locale,
971
+ metadata,
972
+ multilingualUrls,
973
+ },
974
+ };
975
+ };
976
+
977
+ export default HomePage;
978
+
979
+ // ... Reszta kodu, w tym getStaticPaths
980
+ ```
981
+
982
+ ```jsx fileName="src/pages/[locale]/index.mjx" codeFormat="esm"
983
+ import { getTranslation, getMultilingualUrls } from "intlayer";
984
+ import { useIntlayer } from "next-intlayer";
985
+ import Head from "next/head";
986
+
987
+ const HomePage = ({ metadata, multilingualUrls, locale }) => {
988
+ const content = useIntlayer("page");
989
+
990
+ return (
991
+ <div>
992
+ <Head>
993
+ <title>{metadata.title}</title>
994
+ <meta name="description" content={metadata.description} />
995
+ {/* Generuj tagi hreflang dla SEO */}
996
+ {Object.entries(multilingualUrls).map(([lang, url]) => (
997
+ <link key={lang} rel="alternate" hrefLang={lang} href={url} />
998
+ ))}
999
+ <link rel="canonical" href={multilingualUrls[locale]} />
1000
+ </Head>
1001
+
1002
+ {/* Zawartość strony */}
1003
+ <main>{/* Tutaj zawartość Twojej strony */}</main>
1004
+ </div>
1005
+ );
1006
+ };
1007
+
1008
+ export const getStaticProps = async ({ params }) => {
1009
+ const locale = params?.locale;
1010
+ const t = (content) => getTranslation(content, locale);
1011
+
1012
+ const metadata = {
1013
+ title: t({
1014
+ en: "My title",
1015
+ fr: "Mon titre",
1016
+ es: "Mi título",
1017
+ }),
1018
+ description: t({
1019
+ en: "My description",
1020
+ fr: "Ma description",
1021
+ es: "Mi descripción",
1022
+ }),
1023
+ };
1024
+
1025
+ const multilingualUrls = getMultilingualUrls("/");
1026
+
1027
+ return {
1028
+ props: {
1029
+ locale,
1030
+ metadata,
1031
+ multilingualUrls,
1032
+ },
1033
+ };
1034
+ };
1035
+
1036
+ export default HomePage;
1037
+
1038
+ // ... Reszta kodu, w tym getStaticPaths
1039
+ ```
1040
+
1041
+ ```jsx fileName="src/pages/[locale]/index.csx" codeFormat="commonjs"
1042
+ const { getTranslation, getMultilingualUrls } = require("intlayer");
1043
+ const { useIntlayer } = require("next-intlayer");
1044
+ const Head = require("next/head");
1045
+
1046
+ const HomePage = ({ metadata, multilingualUrls, locale }) => {
1047
+ const content = useIntlayer("page");
1048
+
1049
+ return (
1050
+ <div>
1051
+ <Head>
1052
+ <title>{metadata.title}</title>
1053
+ <meta name="description" content={metadata.description} />
1054
+ {/* Generuj tagi hreflang dla SEO */}
1055
+ {Object.entries(multilingualUrls).map(([lang, url]) => (
1056
+ <link key={lang} rel="alternate" hrefLang={lang} href={url} />
1057
+ ))}
1058
+ <link rel="canonical" href={multilingualUrls[locale]} />
1059
+ </Head>
1060
+
1061
+ {/* Zawartość strony */}
1062
+ <main>{/* Tutaj zawartość Twojej strony */}</main>
1063
+ </div>
1064
+ );
1065
+ };
1066
+
1067
+ const getStaticProps = async ({ params }) => {
1068
+ const locale = params?.locale;
1069
+ const t = (content) => getTranslation(content, locale);
1070
+
1071
+ const metadata = {
1072
+ title: t({
1073
+ en: "My title",
1074
+ fr: "Mon titre",
1075
+ es: "Mi título",
1076
+ }),
1077
+ description: t({
1078
+ en: "My description",
1079
+ fr: "Ma description",
1080
+ es: "Mi descripción",
1081
+ }),
1082
+ };
1083
+
1084
+ const multilingualUrls = getMultilingualUrls("/");
1085
+
1086
+ return {
1087
+ props: {
1088
+ locale,
1089
+ metadata,
1090
+ multilingualUrls,
1091
+ },
1092
+ };
1093
+ };
1094
+
1095
+ module.exports = {
1096
+ getStaticProps,
1097
+ getStaticPaths,
1098
+ default: HomePage,
1099
+ };
1100
+
1101
+ // ... Reszta kodu, w tym getStaticPaths
1102
+ ```
1103
+
1104
+ > Dowiedz się więcej o optymalizacji metadanych [w oficjalnej dokumentacji Next.js](https://nextjs.org/docs/pages/building-your-application/optimizing/metadata).
1105
+
1106
+ ### (Opcjonalny) Krok 9: Zmień język swojej zawartości
1107
+
1108
+ Aby zmienić język swojej zawartości w Next.js, zalecanym sposobem jest użycie komponentu `Link`, aby przekierować użytkowników na odpowiednią zlokalizowaną stronę. Komponent `Link` umożliwia prefetching strony, co pomaga uniknąć pełnego przeładowania strony.
1109
+
1110
+ ```tsx fileName="src/components/LanguageSwitcher.tsx" codeFormat="typescript"
1111
+ import {
1112
+ Locales,
1113
+ getHTMLTextDir,
1114
+ getLocaleName,
1115
+ getLocalizedUrl,
1116
+ } from "intlayer";
1117
+ import { useLocalePageRouter } from "next-intlayer";
1118
+ import { type FC } from "react";
1119
+ import Link from "next/link";
1120
+
1121
+ const LocaleSwitcher: FC = () => {
1122
+ const { locale, pathWithoutLocale, availableLocales } = useLocalePageRouter();
1123
+ const { setLocaleCookie } = useLocaleCookie();
1124
+
1125
+ return (
1126
+ <div>
1127
+ <button popoverTarget="localePopover">{getLocaleName(locale)}</button>
1128
+ <div id="localePopover" popover="auto">
1129
+ {availableLocales.map((localeItem) => (
1130
+ <Link
1131
+ href={getLocalizedUrl(pathWithoutLocale, localeItem)}
1132
+ hrefLang={localeItem}
1133
+ key={localeItem}
1134
+ aria-current={locale === localeItem ? "page" : undefined}
1135
+ onClick={() => setLocaleCookie(localeItem)}
1136
+ >
1137
+ <span>
1138
+ {/* Lokalizacja - np. FR */}
1139
+ {localeItem}
1140
+ </span>
1141
+ <span>
1142
+ {/* Język w swojej własnej lokalizacji - np. Français */}
1143
+ {getLocaleName(localeItem, locale)}
1144
+ </span>
1145
+ <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
1146
+ {/* Język w bieżącej lokalizacji - np. Francés przy ustawionej lokalizacji Locales.SPANISH */}
1147
+ {getLocaleName(localeItem)}
1148
+ </span>
1149
+ <span dir="ltr" lang={Locales.ENGLISH}>
1150
+ {/* Język po angielsku - np. French */}
1151
+ {getLocaleName(localeItem, Locales.ENGLISH)}
1152
+ </span>
1153
+ </Link>
1154
+ ))}
1155
+ </div>
1156
+ </div>
1157
+ );
1158
+ };
1159
+ ```
1160
+
1161
+ ```jsx fileName="src/components/LanguageSwitcher.msx" codeFormat="esm"
1162
+ import {
1163
+ Locales,
1164
+ getHTMLTextDir,
1165
+ getLocaleName,
1166
+ getLocalizedUrl,
1167
+ } from "intlayer";
1168
+ import { useLocalePageRouter } from "next-intlayer";
1169
+ import Link from "next/link";
1170
+
1171
+ const LocaleSwitcher = () => {
1172
+ const { locale, pathWithoutLocale, availableLocales } = useLocalePageRouter();
1173
+ const { setLocaleCookie } = useLocaleCookie();
1174
+
1175
+ return (
1176
+ <div>
1177
+ <button popoverTarget="localePopover">{getLocaleName(locale)}</button>
1178
+ <div id="localePopover" popover="auto">
1179
+ {availableLocales.map((localeItem) => (
1180
+ <Link
1181
+ href={getLocalizedUrl(pathWithoutLocale, localeItem)}
1182
+ hrefLang={localeItem}
1183
+ key={localeItem}
1184
+ aria-current={locale === localeItem ? "page" : undefined}
1185
+ onClick={() => setLocaleCookie(localeItem)}
1186
+ >
1187
+ <span>
1188
+ {/* Lokalizacja - np. FR */}
1189
+ {localeItem}
1190
+ </span>
1191
+ <span>
1192
+ {/* Język w jego własnym lokalnym ustawieniu - np. Français */}
1193
+ {getLocaleName(localeItem, locale)}
1194
+ </span>
1195
+ <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
1196
+ {/* Język w bieżącym lokalnym ustawieniu - np. Francés przy ustawionym Locales.SPANISH */}
1197
+ {getLocaleName(localeItem)}
1198
+ </span>
1199
+ <span dir="ltr" lang={Locales.ENGLISH}>
1200
+ {/* Język po angielsku - np. French */}
1201
+ {getLocaleName(localeItem, Locales.ENGLISH)}
1202
+ </span>
1203
+ </Link>
1204
+ ))}
1205
+ </div>
1206
+ </div>
1207
+ );
1208
+ };
1209
+ ```
1210
+
1211
+ ```jsx fileName="src/components/LanguageSwitcher.msx" codeFormat="commonjs"
1212
+ const {
1213
+ Locales,
1214
+ getHTMLTextDir,
1215
+ getLocaleName,
1216
+ getLocalizedUrl,
1217
+ } = require("intlayer");
1218
+ const { useLocalePageRouter } = require("next-intlayer");
1219
+ const Link = require("next/link");
1220
+
1221
+ const LocaleSwitcher = () => {
1222
+ const { locale, pathWithoutLocale, availableLocales } = useLocalePageRouter();
1223
+ const { setLocaleCookie } = useLocaleCookie();
1224
+
1225
+ return (
1226
+ <select>
1227
+ {availableLocales.map((localeItem) => (
1228
+ <option value={localeItem} key={localeItem}>
1229
+ <Link
1230
+ href={getLocalizedUrl(pathWithoutLocale, localeItem)}
1231
+ hrefLang={localeItem}
1232
+ aria-current={locale === localeItem ? "page" : undefined}
1233
+ onClick={() => setLocaleCookie(localeItem)}
1234
+ >
1235
+ <span>
1236
+ {/* Lokalizacja - np. FR */}
1237
+ {localeItem}
1238
+ </span>
1239
+ <span>
1240
+ {/* Język w jego własnej lokalizacji - np. Français */}
1241
+ {getLocaleName(localeItem, locale)}
1242
+ </span>
1243
+ <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
1244
+ {/* Język w bieżącej lokalizacji - np. Francés przy ustawionej lokalizacji Locales.SPANISH */}
1245
+ {getLocaleName(localeItem)}
1246
+ </span>
1247
+ <span dir="ltr" lang={Locales.ENGLISH}>
1248
+ {/* Język po angielsku - np. French */}
1249
+ {getLocaleName(localeItem, Locales.ENGLISH)}
1250
+ </span>
1251
+ </Link>
1252
+ </option>
1253
+ ))}
1254
+ </select>
1255
+ );
1256
+ };
1257
+ ```
1258
+
1259
+ > Alternatywnym sposobem jest użycie funkcji `setLocale` dostarczonej przez hook `useLocale`. Ta funkcja nie pozwoli na prefetching strony i spowoduje przeładowanie strony.
1260
+
1261
+ > W tym przypadku, bez przekierowania za pomocą `router.push`, tylko Twój kod po stronie serwera zmieni lokalizację zawartości.
1262
+
1263
+ ```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
1264
+ "use client";
1265
+
1266
+ import { useRouter } from "next/navigation";
1267
+ import { useLocale } from "next-intlayer";
1268
+ import { getLocalizedUrl } from "intlayer";
1269
+
1270
+ // ... Reszta kodu
1271
+
1272
+ const router = useRouter();
1273
+ const { setLocale } = useLocale({
1274
+ onLocaleChange: (locale) => {
1275
+ router.push(getLocalizedUrl(pathWithoutLocale, locale));
1276
+ },
1277
+ });
1278
+
1279
+ return (
1280
+ <button onClick={() => setLocale(Locales.FRENCH)}>Zmień na francuski</button>
1281
+ );
1282
+ ```
1283
+
1284
+ > API `useLocalePageRouter` jest takie samo jak `useLocale`. Aby dowiedzieć się więcej o hooku `useLocale`, zapoznaj się z [dokumentacją](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/packages/next-intlayer/useLocale.md).
1285
+
1286
+ > Odnośniki do dokumentacji:
1287
+ >
1288
+ > - [hook `getLocaleName`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/packages/intlayer/getLocaleName.md)
1289
+ > - [hook `getLocalizedUrl`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/packages/intlayer/getLocalizedUrl.md)
1290
+ > - [hook `getHTMLTextDir`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/packages/intlayer/getHTMLTextDir.md)
1291
+ > - atrybut [`hrefLang`](https://developers.google.com/search/docs/specialty/international/localized-versions?hl=fr)
1292
+ > - [`atrybut lang`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/lang)
1293
+ > - [`atrybut dir`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir)
1294
+ > - [`atrybut aria-current`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current)
1295
+
1296
+ ### (Opcjonalny) Krok 10: Tworzenie lokalizowanego komponentu Link
1297
+
1298
+ 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 link do strony "About", zostanie przekierowany na `/fr/about` zamiast na `/about`.
1299
+
1300
+ To zachowanie jest przydatne z kilku powodów:
1301
+
1302
+ - **SEO i doświadczenie użytkownika**: Lokalizowane adresy URL pomagają wyszukiwarkom poprawnie indeksować strony specyficzne dla języka oraz dostarczają użytkownikom treści w ich preferowanym języku.
1303
+ - **Spójność**: Korzystając z lokalizowanego linku w całej aplikacji, zapewniasz, że nawigacja pozostaje w obrębie bieżącej lokalizacji, zapobiegając nieoczekiwanym zmianom języka.
1304
+ - **Łatwość utrzymania**: 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.
1305
+
1306
+ Poniżej znajduje się implementacja lokalizowanego komponentu `Link` w TypeScript:
1307
+
1308
+ ```tsx fileName="src/components/Link.tsx" codeFormat="typescript"
1309
+ "use client";
1310
+
1311
+ import { getLocalizedUrl } from "intlayer";
1312
+ import NextLink, { type LinkProps as NextLinkProps } from "next/link";
1313
+ import { useLocale } from "next-intlayer";
1314
+ import { forwardRef, PropsWithChildren, type ForwardedRef } from "react";
1315
+
1316
+ /**
1317
+ * Funkcja pomocnicza do sprawdzania, czy podany URL jest zewnętrzny.
1318
+ * Jeśli URL zaczyna się od http:// lub https://, jest uznawany za zewnętrzny.
1319
+ */
1320
+ export const checkIsExternalLink = (href?: string): boolean =>
1321
+ /^https?:\/\//.test(href ?? "");
1322
+
1323
+ /**
1324
+ * Niestandardowy komponent Link, który dostosowuje atrybut href na podstawie aktualnej lokalizacji.
1325
+ * Dla linków wewnętrznych używa `getLocalizedUrl`, aby dodać prefiks z lokalizacją (np. /fr/about).
1326
+ * Zapewnia to, że nawigacja pozostaje w kontekście tej samej lokalizacji.
1327
+ */
1328
+ export const Link = forwardRef<
1329
+ HTMLAnchorElement,
1330
+ PropsWithChildren<NextLinkProps>
1331
+ >(({ href, children, ...props }, ref: ForwardedRef<HTMLAnchorElement>) => {
1332
+ const { locale } = useLocale();
1333
+ const isExternalLink = checkIsExternalLink(href.toString());
1334
+
1335
+ // Jeśli link jest wewnętrzny i podano prawidłowy href, pobierz lokalizowany URL.
1336
+ const hrefI18n: NextLinkProps["href"] =
1337
+ href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
1338
+
1339
+ return (
1340
+ <NextLink href={hrefI18n} ref={ref} {...props}>
1341
+ {children}
1342
+ </NextLink>
1343
+ );
1344
+ });
1345
+
1346
+ Link.displayName = "Link";
1347
+ ```
1348
+
1349
+ ```jsx fileName="src/components/Link.mjx" codeFormat="esm"
1350
+ 'use client';
1351
+
1352
+ import { getLocalizedUrl } from 'intlayer';
1353
+ import NextLink, { type LinkProps as NextLinkProps } from 'next/link';
1354
+ import { useLocale } from 'next-intlayer';
1355
+ import { forwardRef, PropsWithChildren, type ForwardedRef } from 'react';
1356
+
1357
+ /**
1358
+ * Funkcja pomocnicza do sprawdzania, czy podany URL jest zewnętrzny.
1359
+ * Jeśli URL zaczyna się od http:// lub https://, jest uznawany za zewnętrzny.
1360
+ */
1361
+ export const checkIsExternalLink = (href) =>
1362
+ /^https?:\/\//.test(href ?? '');
1363
+
1364
+ /**
1365
+ * Niestandardowy komponent Link, który dostosowuje atrybut href na podstawie aktualnej lokalizacji.
1366
+ * Dla linków wewnętrznych używa `getLocalizedUrl`, aby dodać prefiks z lokalizacją (np. /fr/about).
1367
+ * Zapewnia to, że nawigacja pozostaje w kontekście tej samej lokalizacji.
1368
+ */
1369
+ export const Link = forwardRef(({ href, children, ...props }, ref) => {
1370
+ const { locale } = useLocale();
1371
+ const isExternalLink = checkIsExternalLink(href.toString());
1372
+
1373
+ // Jeśli link jest wewnętrzny i podano poprawny href, pobierz zlokalizowany URL.
1374
+ const hrefI18n =
1375
+ href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
1376
+
1377
+ return (
1378
+ <NextLink href={hrefI18n} ref={ref} {...props}>
1379
+ {children}
1380
+ </NextLink>
1381
+ );
1382
+ });
1383
+
1384
+ Link.displayName = 'Link';
1385
+ ```
1386
+
1387
+ ```jsx fileName="src/components/Link.csx" codeFormat="commonjs"
1388
+ 'use client';
1389
+
1390
+ const { getLocalizedUrl } = require("intlayer");
1391
+ const NextLink = require("next/link");
1392
+ const { useLocale } = require("next-intlayer");
1393
+ const { forwardRef } = require("react");
1394
+
1395
+ /**
1396
+ * Funkcja pomocnicza do sprawdzania, czy podany URL jest zewnętrzny.
1397
+ * Jeśli URL zaczyna się od http:// lub https://, jest uznawany za zewnętrzny.
1398
+ */
1399
+ const checkIsExternalLink = (href) =>
1400
+ /^https?:\/\//.test(href ?? '');
1401
+
1402
+
1403
+ const Link = forwardRef(({ href, children, ...props }, ref) => {
1404
+ const { locale } = useLocale();
1405
+ const isExternalLink = checkIsExternalLink(href.toString());
1406
+
1407
+ // Jeśli link jest wewnętrzny i podano prawidłowy href, pobierz zlokalizowany URL.
1408
+ const hrefI18n: NextLinkProps['href'] =
1409
+ href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
1410
+
1411
+ return (
1412
+ <NextLink href={hrefI18n} ref={ref} {...props}>
1413
+ {children}
1414
+ </NextLink>
1415
+ );
1416
+ });
1417
+
1418
+ Link.displayName = 'Link';
1419
+ ```
1420
+
1421
+ #### Jak to działa
1422
+
1423
+ - **Wykrywanie linków zewnętrznych**:
1424
+ Funkcja pomocnicza `checkIsExternalLink` określa, czy URL jest zewnętrzny. Linki zewnętrzne pozostają niezmienione, ponieważ nie wymagają lokalizacji.
1425
+
1426
+ - **Pobieranie aktualnej lokalizacji**:
1427
+ - **Lokalizacja URL**:
1428
+ Dla linków wewnętrznych (czyli niezewnętrznych) używana jest funkcja `getLocalizedUrl`, która automatycznie dodaje prefiks z aktualnym locale do URL. Oznacza to, że jeśli użytkownik korzysta z wersji francuskiej, przekazanie `/about` jako `href` zostanie przekształcone na `/fr/about`.
1429
+
1430
+ - **Zwracanie linku**:
1431
+ Komponent zwraca element `<a>` z zlokalizowanym URL, zapewniając spójność nawigacji zgodnie z ustawionym locale.
1432
+
1433
+ Integrując ten komponent `Link` w całej aplikacji, utrzymujesz spójne i świadome językowo doświadczenie użytkownika, jednocześnie korzystając z lepszego SEO i użyteczności.
1434
+
1435
+ ### (Opcjonalny) Krok 11: Optymalizacja rozmiaru paczki
1436
+
1437
+ Podczas korzystania z `next-intlayer`, słowniki są domyślnie dołączane do bundla na każdej stronie. 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ą.
1438
+
1439
+ Aby włączyć tę optymalizację, zainstaluj pakiet `@intlayer/swc`. Po instalacji `next-intlayer` automatycznie wykryje i użyje tego pluginu:
1440
+
1441
+ ```bash packageManager="npm"
1442
+ npm install @intlayer/swc --save-dev
1443
+ ```
1444
+
1445
+ ```bash packageManager="pnpm"
1446
+ pnpm add @intlayer/swc --save-dev
1447
+ ```
1448
+
1449
+ ```bash packageManager="yarn"
1450
+ yarn add @intlayer/swc --save-dev
1451
+ ```
1452
+
1453
+ > Uwaga: Ta optymalizacja jest dostępna tylko dla Next.js 13 i nowszych wersji.
1454
+
1455
+ > 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.
1456
+
1457
+ ### Konfiguracja TypeScript
1458
+
1459
+ Intlayer używa rozszerzenia modułów (module augmentation), aby wykorzystać zalety TypeScript i wzmocnić Twoją bazę kodu.
1460
+
1461
+ ![Autouzupełnianie](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true)
1462
+
1463
+ ![Błąd tłumaczenia](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png?raw=true)
1464
+
1465
+ Upewnij się, że Twoja konfiguracja TypeScript zawiera automatycznie generowane typy.
1466
+
1467
+ ```json5 fileName="tsconfig.json"
1468
+ {
1469
+ // ... Twoje istniejące konfiguracje TypeScript
1470
+ "include": [
1471
+ // ... Twoje istniejące konfiguracje TypeScript
1472
+ ".intlayer/**/*.ts", // Dołącz automatycznie generowane typy
1473
+ ],
1474
+ }
1475
+ ```
1476
+
1477
+ ### Konfiguracja Git
1478
+
1479
+ Aby utrzymać porządek w repozytorium i uniknąć zatwierdzania generowanych plików, zaleca się ignorowanie plików tworzonych przez Intlayer.
1480
+
1481
+ Dodaj następujące linie do pliku `.gitignore`:
1482
+
1483
+ ```plaintext fileName=".gitignore"
1484
+ # Ignoruj pliki generowane przez Intlayer
1485
+ .intlayer
1486
+ ```
1487
+
1488
+ ### Rozszerzenie VS Code
1489
+
1490
+ Aby poprawić doświadczenie programistyczne z Intlayer, możesz zainstalować oficjalne **rozszerzenie Intlayer dla VS Code**.
1491
+
1492
+ [Zainstaluj z Marketplace VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
1493
+
1494
+ To rozszerzenie oferuje:
1495
+
1496
+ - **Autouzupełnianie** kluczy tłumaczeń.
1497
+ - **Wykrywanie błędów w czasie rzeczywistym** dla brakujących tłumaczeń.
1498
+ - **Podglądy w linii** przetłumaczonej zawartości.
1499
+ - **Szybkie akcje** umożliwiające łatwe tworzenie i aktualizowanie tłumaczeń.
1500
+
1501
+ Aby uzyskać więcej informacji na temat korzystania z rozszerzenia, zapoznaj się z [dokumentacją rozszerzenia Intlayer VS Code](https://intlayer.org/doc/vs-code-extension).
1502
+
1503
+ ## Dodatkowe zasoby
1504
+
1505
+ - **Dokumentacja Intlayer:** [Repozytorium GitHub](https://github.com/aymericzip/intlayer)
1506
+ - **Przewodnik po słowniku:** [Słownik](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/dictionary/content_file.md)
1507
+ - **Dokumentacja konfiguracji:** [Przewodnik konfiguracji](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/configuration.md)
1508
+
1509
+ Postępując zgodnie z tym przewodnikiem, możesz skutecznie zintegrować Intlayer z aplikacją Next.js korzystającą z Page Router, co umożliwi solidne i skalowalne wsparcie internacjonalizacji dla Twoich projektów internetowych.
1510
+
1511
+ ### Idź dalej
1512
+
1513
+ 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).