@intlayer/docs 7.0.7 → 7.0.8-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (726) hide show
  1. package/blog/ar/i18n_using_next-i18next.md +1068 -0
  2. package/blog/ar/i18n_using_next-intl.md +768 -0
  3. package/blog/ar/intlayer_with_react-intl.md +0 -4
  4. package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +5 -4
  5. package/blog/de/i18n_using_next-i18next.md +1107 -0
  6. package/blog/de/i18n_using_next-intl.md +760 -0
  7. package/blog/de/intlayer_with_react-intl.md +0 -4
  8. package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  9. package/blog/en/i18n_using_next-i18next.md +1073 -0
  10. package/blog/en/i18n_using_next-intl.md +757 -0
  11. package/blog/en/intlayer_with_i18next.md +71 -8
  12. package/blog/en/intlayer_with_next-i18next.md +71 -8
  13. package/blog/en/intlayer_with_next-intl.md +71 -8
  14. package/blog/en/intlayer_with_react-i18next.md +69 -8
  15. package/blog/en/intlayer_with_react-intl.md +68 -9
  16. package/blog/en/intlayer_with_vue-i18n.md +68 -7
  17. package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
  18. package/blog/en/vue-i18n_vs_intlayer.md +2 -0
  19. package/blog/en-GB/i18n_using_next-i18next.md +1074 -0
  20. package/blog/en-GB/i18n_using_next-intl.md +757 -0
  21. package/blog/en-GB/intlayer_with_i18next.md +15 -6
  22. package/blog/en-GB/intlayer_with_next-i18next.md +16 -6
  23. package/blog/en-GB/intlayer_with_next-intl.md +16 -6
  24. package/blog/en-GB/intlayer_with_react-i18next.md +16 -7
  25. package/blog/en-GB/intlayer_with_react-intl.md +14 -9
  26. package/blog/en-GB/intlayer_with_vue-i18n.md +16 -7
  27. package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  28. package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
  29. package/blog/en-GB/vue-i18n_vs_intlayer.md +2 -0
  30. package/blog/es/i18n_using_next-i18next.md +1066 -0
  31. package/blog/es/i18n_using_next-intl.md +757 -0
  32. package/blog/es/intlayer_with_react-intl.md +0 -4
  33. package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  34. package/blog/fr/i18n_using_next-i18next.md +1078 -0
  35. package/blog/fr/i18n_using_next-intl.md +759 -0
  36. package/blog/fr/intlayer_with_react-intl.md +0 -4
  37. package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  38. package/blog/hi/i18n_using_next-i18next.md +1068 -0
  39. package/blog/hi/i18n_using_next-intl.md +758 -0
  40. package/blog/hi/intlayer_with_react-intl.md +0 -4
  41. package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  42. package/blog/id/i18n_using_next-i18next.md +1078 -0
  43. package/blog/id/i18n_using_next-intl.md +757 -0
  44. package/blog/id/index.md +69 -0
  45. package/blog/id/internationalization_and_SEO.md +364 -0
  46. package/blog/id/intlayer_with_react-intl.md +0 -4
  47. package/blog/id/list_i18n_technologies/CMS/drupal.md +143 -0
  48. package/blog/id/list_i18n_technologies/CMS/wix.md +167 -0
  49. package/blog/id/list_i18n_technologies/CMS/wordpress.md +188 -0
  50. package/blog/id/list_i18n_technologies/frameworks/angular.md +125 -0
  51. package/blog/id/list_i18n_technologies/frameworks/flutter.md +150 -0
  52. package/blog/id/list_i18n_technologies/frameworks/react-native.md +217 -0
  53. package/blog/id/list_i18n_technologies/frameworks/react.md +155 -0
  54. package/blog/id/list_i18n_technologies/frameworks/svelte.md +131 -0
  55. package/blog/id/list_i18n_technologies/frameworks/vue.md +130 -0
  56. package/blog/id/next-i18next_vs_next-intl_vs_intlayer.md +1500 -0
  57. package/blog/id/nextjs-multilingual-seo-comparison.md +361 -0
  58. package/blog/id/rag_powered_documentation_assistant.md +288 -0
  59. package/blog/id/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
  60. package/blog/id/vue-i18n_vs_intlayer.md +278 -0
  61. package/blog/id/what_is_internationalization.md +166 -0
  62. package/blog/it/i18n_using_next-i18next.md +1078 -0
  63. package/blog/it/i18n_using_next-intl.md +758 -0
  64. package/blog/it/intlayer_with_react-intl.md +0 -4
  65. package/blog/it/react-i18next_vs_react-intl_vs_intlayer.md +4 -0
  66. package/blog/it/vue-i18n_vs_intlayer.md +2 -0
  67. package/blog/ja/i18n_using_next-i18next.md +1078 -0
  68. package/blog/ja/i18n_using_next-intl.md +758 -0
  69. package/blog/ja/intlayer_with_react-intl.md +0 -4
  70. package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  71. package/blog/ko/i18n_using_next-i18next.md +1075 -0
  72. package/blog/ko/i18n_using_next-intl.md +759 -0
  73. package/blog/ko/intlayer_with_react-intl.md +0 -4
  74. package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  75. package/blog/pl/i18n_using_next-i18next.md +1078 -0
  76. package/blog/pl/i18n_using_next-intl.md +758 -0
  77. package/blog/pl/index.md +69 -0
  78. package/blog/pl/internationalization_and_SEO.md +363 -0
  79. package/blog/pl/intlayer_with_react-intl.md +0 -4
  80. package/blog/pl/list_i18n_technologies/CMS/drupal.md +143 -0
  81. package/blog/pl/list_i18n_technologies/CMS/wix.md +167 -0
  82. package/blog/pl/list_i18n_technologies/CMS/wordpress.md +196 -0
  83. package/blog/pl/list_i18n_technologies/frameworks/angular.md +125 -0
  84. package/blog/pl/list_i18n_technologies/frameworks/flutter.md +151 -0
  85. package/blog/pl/list_i18n_technologies/frameworks/react-native.md +217 -0
  86. package/blog/pl/list_i18n_technologies/frameworks/react.md +155 -0
  87. package/blog/pl/list_i18n_technologies/frameworks/svelte.md +131 -0
  88. package/blog/pl/list_i18n_technologies/frameworks/vue.md +130 -0
  89. package/blog/pl/next-i18next_vs_next-intl_vs_intlayer.md +1501 -0
  90. package/blog/pl/nextjs-multilingual-seo-comparison.md +362 -0
  91. package/blog/pl/rag_powered_documentation_assistant.md +288 -0
  92. package/blog/pl/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
  93. package/blog/pl/vue-i18n_vs_intlayer.md +278 -0
  94. package/blog/pl/what_is_internationalization.md +167 -0
  95. package/blog/pt/i18n_using_next-i18next.md +1067 -0
  96. package/blog/pt/i18n_using_next-intl.md +760 -0
  97. package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  98. package/blog/ru/i18n_using_next-i18next.md +1106 -0
  99. package/blog/ru/i18n_using_next-intl.md +759 -0
  100. package/blog/ru/intlayer_with_react-intl.md +0 -4
  101. package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  102. package/blog/tr/i18n_using_next-i18next.md +1078 -0
  103. package/blog/tr/i18n_using_next-intl.md +760 -0
  104. package/blog/tr/intlayer_with_react-intl.md +0 -4
  105. package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  106. package/blog/tr/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
  107. package/blog/tr/vue-i18n_vs_intlayer.md +2 -0
  108. package/blog/vi/i18n_using_next-i18next.md +1080 -0
  109. package/blog/vi/i18n_using_next-intl.md +758 -0
  110. package/blog/vi/index.md +69 -0
  111. package/blog/vi/internationalization_and_SEO.md +363 -0
  112. package/blog/vi/intlayer_with_react-intl.md +0 -4
  113. package/blog/vi/list_i18n_technologies/CMS/drupal.md +143 -0
  114. package/blog/vi/list_i18n_technologies/CMS/wix.md +167 -0
  115. package/blog/vi/list_i18n_technologies/CMS/wordpress.md +188 -0
  116. package/blog/vi/list_i18n_technologies/frameworks/angular.md +125 -0
  117. package/blog/vi/list_i18n_technologies/frameworks/flutter.md +150 -0
  118. package/blog/vi/list_i18n_technologies/frameworks/react-native.md +217 -0
  119. package/blog/vi/list_i18n_technologies/frameworks/react.md +155 -0
  120. package/blog/vi/list_i18n_technologies/frameworks/svelte.md +131 -0
  121. package/blog/vi/list_i18n_technologies/frameworks/vue.md +130 -0
  122. package/blog/vi/next-i18next_vs_next-intl_vs_intlayer.md +1520 -0
  123. package/blog/vi/nextjs-multilingual-seo-comparison.md +362 -0
  124. package/blog/vi/rag_powered_documentation_assistant.md +288 -0
  125. package/blog/vi/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
  126. package/blog/vi/vue-i18n_vs_intlayer.md +278 -0
  127. package/blog/vi/what_is_internationalization.md +168 -0
  128. package/blog/zh/i18n_using_next-i18next.md +1105 -0
  129. package/blog/zh/i18n_using_next-intl.md +758 -0
  130. package/blog/zh/intlayer_with_react-intl.md +0 -4
  131. package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  132. package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
  133. package/dist/cjs/common.cjs +0 -4
  134. package/dist/cjs/common.cjs.map +1 -1
  135. package/dist/cjs/generated/blog.entry.cjs +38 -6
  136. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  137. package/dist/cjs/generated/docs.entry.cjs +0 -6
  138. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  139. package/dist/cjs/generated/frequentQuestions.entry.cjs +0 -6
  140. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  141. package/dist/cjs/generated/legal.entry.cjs +0 -6
  142. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  143. package/dist/esm/generated/blog.entry.mjs +38 -0
  144. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  145. package/dist/types/generated/blog.entry.d.ts +2 -0
  146. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  147. package/docs/ar/component_i18n.md +1 -1
  148. package/docs/ar/configuration.md +6 -0
  149. package/docs/ar/intlayer_cli.md +8 -3
  150. package/docs/ar/intlayer_with_next-i18next.md +619 -0
  151. package/docs/ar/intlayer_with_next-intl.md +446 -0
  152. package/docs/ar/intlayer_with_nextjs_16.md +21 -0
  153. package/docs/ar/intlayer_with_tanstack.md +4 -0
  154. package/docs/ar/intlayer_with_vite+react.md +4 -0
  155. package/docs/de/component_i18n.md +1 -1
  156. package/docs/de/configuration.md +6 -0
  157. package/docs/de/intlayer_cli.md +8 -3
  158. package/docs/de/intlayer_with_next-i18next.md +627 -0
  159. package/docs/de/intlayer_with_next-intl.md +451 -0
  160. package/docs/de/intlayer_with_nextjs_16.md +21 -0
  161. package/docs/de/intlayer_with_tanstack.md +4 -0
  162. package/docs/de/intlayer_with_vite+react.md +4 -0
  163. package/docs/en/component_i18n.md +1 -1
  164. package/docs/en/intlayer_cli.md +8 -1
  165. package/docs/en/intlayer_with_astro.md +10 -2
  166. package/docs/en/intlayer_with_create_react_app.md +8 -0
  167. package/docs/en/intlayer_with_lynx+react.md +8 -0
  168. package/docs/en/intlayer_with_nestjs.md +10 -0
  169. package/docs/en/intlayer_with_nextjs_14.md +10 -2
  170. package/docs/en/intlayer_with_nextjs_15.md +21 -4
  171. package/docs/en/intlayer_with_nextjs_16.md +17 -0
  172. package/docs/en/intlayer_with_nuxt.md +8 -0
  173. package/docs/en/intlayer_with_react_native+expo.md +10 -2
  174. package/docs/en/intlayer_with_react_router_v7.md +8 -0
  175. package/docs/en/intlayer_with_tanstack.md +10 -0
  176. package/docs/en/intlayer_with_vite+preact.md +10 -2
  177. package/docs/en/intlayer_with_vite+react.md +21 -4
  178. package/docs/en/intlayer_with_vite+vue.md +10 -2
  179. package/docs/en-GB/component_i18n.md +1 -1
  180. package/docs/en-GB/configuration.md +6 -0
  181. package/docs/en-GB/intlayer_cli.md +8 -3
  182. package/docs/en-GB/intlayer_with_angular.md +4 -4
  183. package/docs/en-GB/intlayer_with_express.md +4 -4
  184. package/docs/en-GB/intlayer_with_lynx+react.md +12 -12
  185. package/{blog/en/_intlayer_with_next-i18next.md → docs/en-GB/intlayer_with_next-i18next.md} +241 -42
  186. package/{blog/en/_intlayer_with_next-intl.md → docs/en-GB/intlayer_with_next-intl.md} +144 -29
  187. package/docs/en-GB/intlayer_with_nextjs_16.md +21 -0
  188. package/docs/en-GB/intlayer_with_tanstack.md +5 -1
  189. package/docs/en-GB/intlayer_with_vite+react.md +4 -0
  190. package/docs/en-GB/packages/next-intlayer/t.md +2 -2
  191. package/docs/es/component_i18n.md +1 -1
  192. package/docs/es/configuration.md +6 -0
  193. package/docs/es/intlayer_cli.md +8 -3
  194. package/docs/es/intlayer_with_next-i18next.md +628 -0
  195. package/docs/es/intlayer_with_next-intl.md +446 -0
  196. package/docs/es/intlayer_with_nextjs_16.md +21 -0
  197. package/docs/es/intlayer_with_tanstack.md +4 -0
  198. package/docs/es/intlayer_with_vite+react.md +4 -0
  199. package/docs/fr/configuration.md +6 -0
  200. package/docs/fr/intlayer_cli.md +8 -3
  201. package/docs/fr/intlayer_with_next-i18next.md +628 -0
  202. package/docs/fr/intlayer_with_next-intl.md +446 -0
  203. package/docs/fr/intlayer_with_nextjs_16.md +23 -2
  204. package/docs/fr/intlayer_with_tanstack.md +4 -0
  205. package/docs/fr/intlayer_with_vite+react.md +4 -0
  206. package/docs/hi/component_i18n.md +1 -1
  207. package/docs/hi/configuration.md +6 -0
  208. package/docs/hi/intlayer_cli.md +8 -0
  209. package/docs/hi/intlayer_with_next-i18next.md +628 -0
  210. package/docs/hi/intlayer_with_next-intl.md +446 -0
  211. package/docs/hi/intlayer_with_nextjs_16.md +21 -0
  212. package/docs/hi/intlayer_with_tanstack.md +4 -0
  213. package/docs/hi/intlayer_with_vite+react.md +4 -0
  214. package/docs/id/CI_CD.md +198 -0
  215. package/docs/id/autoFill.md +284 -0
  216. package/docs/id/component_i18n.md +186 -0
  217. package/docs/id/configuration.md +710 -0
  218. package/docs/id/dictionary/condition.md +231 -0
  219. package/docs/id/dictionary/content_file.md +1092 -0
  220. package/docs/id/dictionary/enumeration.md +245 -0
  221. package/docs/id/dictionary/file.md +237 -0
  222. package/docs/id/dictionary/function_fetching.md +214 -0
  223. package/docs/id/dictionary/gender.md +273 -0
  224. package/docs/id/dictionary/insertion.md +192 -0
  225. package/docs/id/dictionary/markdown.md +381 -0
  226. package/docs/id/dictionary/nesting.md +273 -0
  227. package/docs/id/dictionary/translation.md +310 -0
  228. package/docs/id/formatters.md +596 -0
  229. package/docs/id/how_works_intlayer.md +256 -0
  230. package/docs/id/index.md +176 -0
  231. package/docs/id/interest_of_intlayer.md +293 -0
  232. package/docs/id/intlayer_CMS.md +549 -0
  233. package/docs/id/intlayer_cli.md +850 -0
  234. package/docs/id/intlayer_visual_editor.md +288 -0
  235. package/docs/id/intlayer_with_angular.md +694 -0
  236. package/docs/id/intlayer_with_astro.md +252 -0
  237. package/docs/id/intlayer_with_create_react_app.md +1233 -0
  238. package/docs/id/intlayer_with_express.md +411 -0
  239. package/docs/id/intlayer_with_lynx+react.md +518 -0
  240. package/docs/id/intlayer_with_nestjs.md +272 -0
  241. package/docs/id/intlayer_with_next-i18next.md +628 -0
  242. package/docs/id/intlayer_with_next-intl.md +446 -0
  243. package/docs/id/intlayer_with_nextjs_14.md +1617 -0
  244. package/docs/id/intlayer_with_nextjs_15.md +1698 -0
  245. package/docs/id/intlayer_with_nextjs_16.md +21 -0
  246. package/docs/id/intlayer_with_nextjs_page_router.md +1478 -0
  247. package/docs/id/intlayer_with_nuxt.md +808 -0
  248. package/docs/id/intlayer_with_react_native+expo.md +699 -0
  249. package/docs/id/intlayer_with_react_router_v7.md +496 -0
  250. package/docs/id/intlayer_with_tanstack.md +564 -0
  251. package/docs/id/intlayer_with_vite+preact.md +1737 -0
  252. package/docs/id/intlayer_with_vite+react.md +1413 -0
  253. package/docs/id/intlayer_with_vite+solid.md +289 -0
  254. package/docs/id/intlayer_with_vite+svelte.md +289 -0
  255. package/docs/id/intlayer_with_vite+vue.md +1088 -0
  256. package/docs/id/introduction.md +218 -0
  257. package/docs/id/locale_mapper.md +242 -0
  258. package/docs/id/mcp_server.md +211 -0
  259. package/docs/id/packages/express-intlayer/t.md +458 -0
  260. package/docs/id/packages/intlayer/getConfiguration.md +145 -0
  261. package/docs/id/packages/intlayer/getEnumeration.md +159 -0
  262. package/docs/id/packages/intlayer/getHTMLTextDir.md +122 -0
  263. package/docs/id/packages/intlayer/getLocaleLang.md +81 -0
  264. package/docs/id/packages/intlayer/getLocaleName.md +119 -0
  265. package/docs/id/packages/intlayer/getLocalizedUrl.md +309 -0
  266. package/docs/id/packages/intlayer/getMultilingualUrls.md +223 -0
  267. package/docs/id/packages/intlayer/getPathWithoutLocale.md +75 -0
  268. package/docs/id/packages/intlayer/getTranslation.md +190 -0
  269. package/docs/id/packages/intlayer/getTranslationContent.md +188 -0
  270. package/docs/id/packages/next-intlayer/t.md +352 -0
  271. package/docs/id/packages/next-intlayer/useDictionary.md +271 -0
  272. package/docs/id/packages/next-intlayer/useIntlayer.md +264 -0
  273. package/docs/id/packages/next-intlayer/useLocale.md +166 -0
  274. package/docs/id/packages/react-intlayer/t.md +303 -0
  275. package/docs/id/packages/react-intlayer/useDictionary.md +287 -0
  276. package/docs/id/packages/react-intlayer/useI18n.md +267 -0
  277. package/docs/id/packages/react-intlayer/useIntlayer.md +254 -0
  278. package/docs/id/packages/react-intlayer/useLocale.md +210 -0
  279. package/docs/id/per_locale_file.md +323 -0
  280. package/docs/id/readme.md +261 -0
  281. package/docs/id/releases/v6.md +305 -0
  282. package/docs/id/roadmap.md +362 -0
  283. package/docs/id/testing.md +202 -0
  284. package/docs/id/vs_code_extension.md +126 -0
  285. package/docs/it/component_i18n.md +1 -1
  286. package/docs/it/configuration.md +6 -0
  287. package/docs/it/intlayer_cli.md +8 -3
  288. package/docs/it/intlayer_with_next-i18next.md +628 -0
  289. package/docs/it/intlayer_with_next-intl.md +446 -0
  290. package/docs/it/intlayer_with_nextjs_16.md +21 -0
  291. package/docs/it/intlayer_with_tanstack.md +4 -0
  292. package/docs/it/intlayer_with_vite+react.md +4 -0
  293. package/docs/ja/component_i18n.md +1 -1
  294. package/docs/ja/configuration.md +6 -0
  295. package/docs/ja/intlayer_cli.md +8 -3
  296. package/docs/ja/intlayer_with_next-i18next.md +627 -0
  297. package/docs/ja/intlayer_with_next-intl.md +446 -0
  298. package/docs/ja/intlayer_with_nextjs_16.md +21 -0
  299. package/docs/ja/intlayer_with_tanstack.md +4 -0
  300. package/docs/ja/intlayer_with_vite+react.md +4 -0
  301. package/docs/ko/configuration.md +6 -0
  302. package/docs/ko/intlayer_cli.md +8 -3
  303. package/docs/ko/intlayer_with_next-i18next.md +627 -0
  304. package/docs/ko/intlayer_with_next-intl.md +446 -0
  305. package/docs/ko/intlayer_with_nextjs_16.md +21 -0
  306. package/docs/ko/intlayer_with_tanstack.md +4 -0
  307. package/docs/ko/intlayer_with_vite+react.md +4 -0
  308. package/docs/pl/CI_CD.md +198 -0
  309. package/docs/pl/autoFill.md +284 -0
  310. package/docs/pl/component_i18n.md +186 -0
  311. package/docs/pl/configuration.md +710 -0
  312. package/docs/pl/dictionary/condition.md +232 -0
  313. package/docs/pl/dictionary/content_file.md +1130 -0
  314. package/docs/pl/dictionary/enumeration.md +245 -0
  315. package/docs/pl/dictionary/file.md +234 -0
  316. package/docs/pl/dictionary/function_fetching.md +214 -0
  317. package/docs/pl/dictionary/gender.md +276 -0
  318. package/docs/pl/dictionary/insertion.md +188 -0
  319. package/docs/pl/dictionary/markdown.md +408 -0
  320. package/docs/pl/dictionary/nesting.md +273 -0
  321. package/docs/pl/dictionary/translation.md +310 -0
  322. package/docs/pl/formatters.md +596 -0
  323. package/docs/pl/how_works_intlayer.md +256 -0
  324. package/docs/pl/index.md +176 -0
  325. package/docs/pl/interest_of_intlayer.md +291 -0
  326. package/docs/pl/intlayer_CMS.md +549 -0
  327. package/docs/pl/intlayer_cli.md +857 -0
  328. package/docs/pl/intlayer_visual_editor.md +288 -0
  329. package/docs/pl/intlayer_with_angular.md +690 -0
  330. package/docs/pl/intlayer_with_astro.md +280 -0
  331. package/docs/pl/intlayer_with_create_react_app.md +1235 -0
  332. package/docs/pl/intlayer_with_express.md +411 -0
  333. package/docs/pl/intlayer_with_lynx+react.md +518 -0
  334. package/docs/pl/intlayer_with_nestjs.md +272 -0
  335. package/docs/pl/intlayer_with_next-i18next.md +628 -0
  336. package/docs/pl/intlayer_with_next-intl.md +446 -0
  337. package/docs/pl/intlayer_with_nextjs_14.md +1594 -0
  338. package/docs/pl/intlayer_with_nextjs_15.md +1701 -0
  339. package/docs/pl/intlayer_with_nextjs_16.md +21 -0
  340. package/docs/pl/intlayer_with_nextjs_page_router.md +1513 -0
  341. package/docs/pl/intlayer_with_nuxt.md +885 -0
  342. package/docs/pl/intlayer_with_react_native+expo.md +698 -0
  343. package/docs/pl/intlayer_with_react_router_v7.md +503 -0
  344. package/docs/pl/intlayer_with_tanstack.md +562 -0
  345. package/docs/pl/intlayer_with_vite+preact.md +1736 -0
  346. package/docs/pl/intlayer_with_vite+react.md +1438 -0
  347. package/docs/pl/intlayer_with_vite+solid.md +290 -0
  348. package/docs/pl/intlayer_with_vite+svelte.md +289 -0
  349. package/docs/pl/intlayer_with_vite+vue.md +1116 -0
  350. package/docs/pl/introduction.md +209 -0
  351. package/docs/pl/locale_mapper.md +242 -0
  352. package/docs/pl/mcp_server.md +211 -0
  353. package/docs/pl/packages/express-intlayer/t.md +458 -0
  354. package/docs/pl/packages/intlayer/getConfiguration.md +146 -0
  355. package/docs/pl/packages/intlayer/getEnumeration.md +160 -0
  356. package/docs/pl/packages/intlayer/getHTMLTextDir.md +121 -0
  357. package/docs/pl/packages/intlayer/getLocaleLang.md +81 -0
  358. package/docs/pl/packages/intlayer/getLocaleName.md +118 -0
  359. package/docs/pl/packages/intlayer/getLocalizedUrl.md +300 -0
  360. package/docs/pl/packages/intlayer/getMultilingualUrls.md +221 -0
  361. package/docs/pl/packages/intlayer/getPathWithoutLocale.md +75 -0
  362. package/docs/pl/packages/intlayer/getTranslation.md +190 -0
  363. package/docs/pl/packages/intlayer/getTranslationContent.md +189 -0
  364. package/docs/pl/packages/next-intlayer/t.md +353 -0
  365. package/docs/pl/packages/next-intlayer/useDictionary.md +270 -0
  366. package/docs/pl/packages/next-intlayer/useIntlayer.md +263 -0
  367. package/docs/pl/packages/next-intlayer/useLocale.md +166 -0
  368. package/docs/pl/packages/react-intlayer/t.md +303 -0
  369. package/docs/pl/packages/react-intlayer/useDictionary.md +289 -0
  370. package/docs/pl/packages/react-intlayer/useI18n.md +249 -0
  371. package/docs/pl/packages/react-intlayer/useIntlayer.md +256 -0
  372. package/docs/pl/packages/react-intlayer/useLocale.md +210 -0
  373. package/docs/pl/per_locale_file.md +321 -0
  374. package/docs/pl/readme.md +261 -0
  375. package/docs/pl/releases/v6.md +305 -0
  376. package/docs/pl/roadmap.md +362 -0
  377. package/docs/pl/testing.md +202 -0
  378. package/docs/pl/vs_code_extension.md +126 -0
  379. package/docs/pt/component_i18n.md +1 -1
  380. package/docs/pt/configuration.md +6 -0
  381. package/docs/pt/intlayer_cli.md +8 -3
  382. package/docs/pt/intlayer_with_next-i18next.md +627 -0
  383. package/docs/pt/intlayer_with_next-intl.md +446 -0
  384. package/docs/pt/intlayer_with_nextjs_16.md +21 -0
  385. package/docs/pt/intlayer_with_tanstack.md +4 -0
  386. package/docs/pt/intlayer_with_vite+react.md +4 -0
  387. package/docs/ru/component_i18n.md +1 -1
  388. package/docs/ru/configuration.md +6 -0
  389. package/docs/ru/intlayer_cli.md +301 -22
  390. package/docs/ru/intlayer_with_next-i18next.md +629 -0
  391. package/docs/ru/intlayer_with_next-intl.md +448 -0
  392. package/docs/ru/intlayer_with_nextjs_16.md +21 -0
  393. package/docs/ru/intlayer_with_tanstack.md +4 -0
  394. package/docs/ru/intlayer_with_vite+react.md +4 -0
  395. package/docs/tr/component_i18n.md +1 -1
  396. package/docs/tr/configuration.md +6 -0
  397. package/docs/tr/intlayer_cli.md +8 -0
  398. package/docs/tr/intlayer_with_next-i18next.md +627 -0
  399. package/docs/tr/intlayer_with_next-intl.md +446 -0
  400. package/docs/tr/intlayer_with_nextjs_16.md +21 -0
  401. package/docs/tr/intlayer_with_tanstack.md +4 -0
  402. package/docs/tr/intlayer_with_vite+react.md +4 -0
  403. package/docs/vi/CI_CD.md +198 -0
  404. package/docs/vi/autoFill.md +284 -0
  405. package/docs/vi/component_i18n.md +186 -0
  406. package/docs/vi/configuration.md +710 -0
  407. package/docs/vi/dictionary/condition.md +237 -0
  408. package/docs/vi/dictionary/content_file.md +1115 -0
  409. package/docs/vi/dictionary/enumeration.md +255 -0
  410. package/docs/vi/dictionary/file.md +234 -0
  411. package/docs/vi/dictionary/function_fetching.md +212 -0
  412. package/docs/vi/dictionary/gender.md +275 -0
  413. package/docs/vi/dictionary/insertion.md +191 -0
  414. package/docs/vi/dictionary/markdown.md +381 -0
  415. package/docs/vi/dictionary/nesting.md +273 -0
  416. package/docs/vi/dictionary/translation.md +309 -0
  417. package/docs/vi/formatters.md +595 -0
  418. package/docs/vi/how_works_intlayer.md +256 -0
  419. package/docs/vi/index.md +174 -0
  420. package/docs/vi/interest_of_intlayer.md +292 -0
  421. package/docs/vi/intlayer_CMS.md +549 -0
  422. package/docs/vi/intlayer_cli.md +850 -0
  423. package/docs/vi/intlayer_visual_editor.md +288 -0
  424. package/docs/vi/intlayer_with_angular.md +692 -0
  425. package/docs/vi/intlayer_with_astro.md +252 -0
  426. package/docs/vi/intlayer_with_create_react_app.md +1230 -0
  427. package/docs/vi/intlayer_with_express.md +409 -0
  428. package/docs/vi/intlayer_with_lynx+react.md +520 -0
  429. package/docs/vi/intlayer_with_nestjs.md +272 -0
  430. package/docs/vi/intlayer_with_next-i18next.md +628 -0
  431. package/docs/vi/intlayer_with_next-intl.md +446 -0
  432. package/docs/vi/intlayer_with_nextjs_14.md +1584 -0
  433. package/docs/vi/intlayer_with_nextjs_15.md +1738 -0
  434. package/docs/vi/intlayer_with_nextjs_16.md +21 -0
  435. package/docs/vi/intlayer_with_nextjs_page_router.md +1504 -0
  436. package/docs/vi/intlayer_with_nuxt.md +821 -0
  437. package/docs/vi/intlayer_with_react_native+expo.md +700 -0
  438. package/docs/vi/intlayer_with_react_router_v7.md +498 -0
  439. package/docs/vi/intlayer_with_tanstack.md +562 -0
  440. package/docs/vi/intlayer_with_vite+preact.md +1722 -0
  441. package/docs/vi/intlayer_with_vite+react.md +1407 -0
  442. package/docs/vi/intlayer_with_vite+solid.md +287 -0
  443. package/docs/vi/intlayer_with_vite+svelte.md +289 -0
  444. package/docs/vi/intlayer_with_vite+vue.md +1071 -0
  445. package/docs/vi/introduction.md +215 -0
  446. package/docs/vi/locale_mapper.md +242 -0
  447. package/docs/vi/mcp_server.md +211 -0
  448. package/docs/vi/packages/express-intlayer/t.md +457 -0
  449. package/docs/vi/packages/intlayer/getConfiguration.md +145 -0
  450. package/docs/vi/packages/intlayer/getEnumeration.md +162 -0
  451. package/docs/vi/packages/intlayer/getHTMLTextDir.md +121 -0
  452. package/docs/vi/packages/intlayer/getLocaleLang.md +81 -0
  453. package/docs/vi/packages/intlayer/getLocaleName.md +129 -0
  454. package/docs/vi/packages/intlayer/getLocalizedUrl.md +309 -0
  455. package/docs/vi/packages/intlayer/getMultilingualUrls.md +221 -0
  456. package/docs/vi/packages/intlayer/getPathWithoutLocale.md +75 -0
  457. package/docs/vi/packages/intlayer/getTranslation.md +201 -0
  458. package/docs/vi/packages/intlayer/getTranslationContent.md +188 -0
  459. package/docs/vi/packages/next-intlayer/t.md +352 -0
  460. package/docs/vi/packages/next-intlayer/useDictionary.md +273 -0
  461. package/docs/vi/packages/next-intlayer/useIntlayer.md +264 -0
  462. package/docs/vi/packages/next-intlayer/useLocale.md +166 -0
  463. package/docs/vi/packages/react-intlayer/t.md +304 -0
  464. package/docs/vi/packages/react-intlayer/useDictionary.md +288 -0
  465. package/docs/vi/packages/react-intlayer/useI18n.md +295 -0
  466. package/docs/vi/packages/react-intlayer/useIntlayer.md +256 -0
  467. package/docs/vi/packages/react-intlayer/useLocale.md +210 -0
  468. package/docs/vi/per_locale_file.md +326 -0
  469. package/docs/vi/readme.md +261 -0
  470. package/docs/vi/releases/v6.md +305 -0
  471. package/docs/vi/roadmap.md +346 -0
  472. package/docs/vi/testing.md +202 -0
  473. package/docs/vi/vs_code_extension.md +126 -0
  474. package/docs/zh/configuration.md +6 -0
  475. package/docs/zh/intlayer_cli.md +8 -3
  476. package/docs/zh/intlayer_with_next-i18next.md +628 -0
  477. package/docs/zh/intlayer_with_next-intl.md +448 -0
  478. package/docs/zh/intlayer_with_nextjs_16.md +21 -0
  479. package/docs/zh/intlayer_with_tanstack.md +4 -0
  480. package/docs/zh/intlayer_with_vite+react.md +4 -0
  481. package/frequent_questions/ar/SSR_Next_no_[locale].md +1 -2
  482. package/frequent_questions/ar/array_as_content_declaration.md +1 -2
  483. package/frequent_questions/ar/build_dictionaries.md +1 -2
  484. package/frequent_questions/ar/build_error_CI_CD.md +1 -2
  485. package/frequent_questions/ar/bun_set_up.md +1 -2
  486. package/frequent_questions/ar/customized_locale_list.md +1 -2
  487. package/frequent_questions/ar/domain_routing.md +1 -2
  488. package/frequent_questions/ar/esbuild_error.md +1 -2
  489. package/frequent_questions/ar/get_locale_cookie.md +1 -2
  490. package/frequent_questions/ar/intlayer_command_undefined.md +1 -2
  491. package/frequent_questions/ar/locale_incorect_in_url.md +1 -2
  492. package/frequent_questions/ar/static_rendering.md +1 -3
  493. package/frequent_questions/ar/translated_path_url.md +1 -2
  494. package/frequent_questions/ar/unknown_command.md +1 -2
  495. package/frequent_questions/de/SSR_Next_no_[locale].md +1 -2
  496. package/frequent_questions/de/array_as_content_declaration.md +1 -2
  497. package/frequent_questions/de/build_dictionaries.md +1 -2
  498. package/frequent_questions/de/build_error_CI_CD.md +1 -2
  499. package/frequent_questions/de/bun_set_up.md +1 -2
  500. package/frequent_questions/de/customized_locale_list.md +1 -2
  501. package/frequent_questions/de/domain_routing.md +1 -2
  502. package/frequent_questions/de/esbuild_error.md +1 -2
  503. package/frequent_questions/de/get_locale_cookie.md +1 -2
  504. package/frequent_questions/de/intlayer_command_undefined.md +1 -2
  505. package/frequent_questions/de/locale_incorect_in_url.md +1 -2
  506. package/frequent_questions/de/static_rendering.md +1 -3
  507. package/frequent_questions/de/translated_path_url.md +1 -2
  508. package/frequent_questions/de/unknown_command.md +1 -2
  509. package/frequent_questions/en/SSR_Next_no_[locale].md +1 -2
  510. package/frequent_questions/en/array_as_content_declaration.md +1 -2
  511. package/frequent_questions/en/build_dictionaries.md +1 -2
  512. package/frequent_questions/en/build_error_CI_CD.md +1 -2
  513. package/frequent_questions/en/bun_set_up.md +1 -2
  514. package/frequent_questions/en/customized_locale_list.md +1 -2
  515. package/frequent_questions/en/domain_routing.md +1 -2
  516. package/frequent_questions/en/esbuild_error.md +1 -2
  517. package/frequent_questions/en/get_locale_cookie.md +1 -2
  518. package/frequent_questions/en/intlayer_command_undefined.md +1 -2
  519. package/frequent_questions/en/locale_incorect_in_url.md +1 -2
  520. package/frequent_questions/en/static_rendering.md +1 -3
  521. package/frequent_questions/en/translated_path_url.md +1 -2
  522. package/frequent_questions/en/unknown_command.md +1 -2
  523. package/frequent_questions/en-GB/SSR_Next_no_[locale].md +1 -2
  524. package/frequent_questions/en-GB/array_as_content_declaration.md +1 -2
  525. package/frequent_questions/en-GB/build_dictionaries.md +1 -2
  526. package/frequent_questions/en-GB/build_error_CI_CD.md +1 -2
  527. package/frequent_questions/en-GB/bun_set_up.md +1 -2
  528. package/frequent_questions/en-GB/customized_locale_list.md +1 -2
  529. package/frequent_questions/en-GB/domain_routing.md +1 -2
  530. package/frequent_questions/en-GB/esbuild_error.md +1 -2
  531. package/frequent_questions/en-GB/get_locale_cookie.md +1 -2
  532. package/frequent_questions/en-GB/intlayer_command_undefined.md +1 -2
  533. package/frequent_questions/en-GB/locale_incorect_in_url.md +1 -2
  534. package/frequent_questions/en-GB/static_rendering.md +1 -3
  535. package/frequent_questions/en-GB/translated_path_url.md +1 -2
  536. package/frequent_questions/en-GB/unknown_command.md +1 -2
  537. package/frequent_questions/es/SSR_Next_no_[locale].md +1 -2
  538. package/frequent_questions/es/array_as_content_declaration.md +1 -2
  539. package/frequent_questions/es/build_dictionaries.md +1 -2
  540. package/frequent_questions/es/build_error_CI_CD.md +1 -2
  541. package/frequent_questions/es/bun_set_up.md +1 -2
  542. package/frequent_questions/es/customized_locale_list.md +1 -2
  543. package/frequent_questions/es/domain_routing.md +1 -2
  544. package/frequent_questions/es/esbuild_error.md +1 -2
  545. package/frequent_questions/es/get_locale_cookie.md +1 -2
  546. package/frequent_questions/es/intlayer_command_undefined.md +1 -2
  547. package/frequent_questions/es/locale_incorect_in_url.md +1 -2
  548. package/frequent_questions/es/static_rendering.md +1 -3
  549. package/frequent_questions/es/translated_path_url.md +1 -2
  550. package/frequent_questions/es/unknown_command.md +1 -2
  551. package/frequent_questions/fr/SSR_Next_no_[locale].md +1 -2
  552. package/frequent_questions/fr/array_as_content_declaration.md +1 -2
  553. package/frequent_questions/fr/build_dictionaries.md +1 -2
  554. package/frequent_questions/fr/build_error_CI_CD.md +1 -2
  555. package/frequent_questions/fr/bun_set_up.md +1 -2
  556. package/frequent_questions/fr/customized_locale_list.md +1 -2
  557. package/frequent_questions/fr/domain_routing.md +1 -2
  558. package/frequent_questions/fr/esbuild_error.md +1 -2
  559. package/frequent_questions/fr/get_locale_cookie.md +1 -2
  560. package/frequent_questions/fr/intlayer_command_undefined.md +1 -2
  561. package/frequent_questions/fr/locale_incorect_in_url.md +1 -2
  562. package/frequent_questions/fr/static_rendering.md +1 -3
  563. package/frequent_questions/fr/translated_path_url.md +1 -2
  564. package/frequent_questions/fr/unknown_command.md +1 -2
  565. package/frequent_questions/hi/SSR_Next_no_[locale].md +1 -2
  566. package/frequent_questions/hi/array_as_content_declaration.md +1 -2
  567. package/frequent_questions/hi/build_dictionaries.md +1 -2
  568. package/frequent_questions/hi/build_error_CI_CD.md +1 -2
  569. package/frequent_questions/hi/bun_set_up.md +1 -2
  570. package/frequent_questions/hi/customized_locale_list.md +1 -2
  571. package/frequent_questions/hi/domain_routing.md +1 -2
  572. package/frequent_questions/hi/esbuild_error.md +1 -2
  573. package/frequent_questions/hi/get_locale_cookie.md +1 -2
  574. package/frequent_questions/hi/intlayer_command_undefined.md +1 -2
  575. package/frequent_questions/hi/locale_incorect_in_url.md +1 -2
  576. package/frequent_questions/hi/static_rendering.md +1 -3
  577. package/frequent_questions/hi/translated_path_url.md +1 -2
  578. package/frequent_questions/hi/unknown_command.md +1 -2
  579. package/frequent_questions/id/SSR_Next_no_[locale].md +104 -0
  580. package/frequent_questions/id/array_as_content_declaration.md +71 -0
  581. package/frequent_questions/id/build_dictionaries.md +58 -0
  582. package/frequent_questions/id/build_error_CI_CD.md +74 -0
  583. package/frequent_questions/id/bun_set_up.md +53 -0
  584. package/frequent_questions/id/customized_locale_list.md +64 -0
  585. package/frequent_questions/id/domain_routing.md +113 -0
  586. package/frequent_questions/id/esbuild_error.md +29 -0
  587. package/frequent_questions/id/get_locale_cookie.md +142 -0
  588. package/frequent_questions/id/intlayer_command_undefined.md +155 -0
  589. package/frequent_questions/id/locale_incorect_in_url.md +73 -0
  590. package/frequent_questions/id/static_rendering.md +44 -0
  591. package/frequent_questions/id/translated_path_url.md +55 -0
  592. package/frequent_questions/id/unknown_command.md +97 -0
  593. package/frequent_questions/it/SSR_Next_no_[locale].md +1 -2
  594. package/frequent_questions/it/array_as_content_declaration.md +1 -2
  595. package/frequent_questions/it/build_dictionaries.md +1 -2
  596. package/frequent_questions/it/build_error_CI_CD.md +1 -2
  597. package/frequent_questions/it/bun_set_up.md +1 -2
  598. package/frequent_questions/it/customized_locale_list.md +1 -2
  599. package/frequent_questions/it/domain_routing.md +1 -2
  600. package/frequent_questions/it/esbuild_error.md +1 -2
  601. package/frequent_questions/it/get_locale_cookie.md +1 -2
  602. package/frequent_questions/it/intlayer_command_undefined.md +1 -2
  603. package/frequent_questions/it/locale_incorect_in_url.md +1 -2
  604. package/frequent_questions/it/static_rendering.md +1 -3
  605. package/frequent_questions/it/translated_path_url.md +1 -2
  606. package/frequent_questions/it/unknown_command.md +1 -2
  607. package/frequent_questions/ja/SSR_Next_no_[locale].md +1 -2
  608. package/frequent_questions/ja/array_as_content_declaration.md +1 -2
  609. package/frequent_questions/ja/build_dictionaries.md +1 -2
  610. package/frequent_questions/ja/build_error_CI_CD.md +1 -2
  611. package/frequent_questions/ja/bun_set_up.md +1 -2
  612. package/frequent_questions/ja/customized_locale_list.md +1 -2
  613. package/frequent_questions/ja/domain_routing.md +1 -2
  614. package/frequent_questions/ja/esbuild_error.md +1 -2
  615. package/frequent_questions/ja/get_locale_cookie.md +1 -2
  616. package/frequent_questions/ja/intlayer_command_undefined.md +1 -2
  617. package/frequent_questions/ja/locale_incorect_in_url.md +1 -2
  618. package/frequent_questions/ja/static_rendering.md +1 -3
  619. package/frequent_questions/ja/translated_path_url.md +1 -2
  620. package/frequent_questions/ja/unknown_command.md +1 -2
  621. package/frequent_questions/ko/SSR_Next_no_[locale].md +1 -2
  622. package/frequent_questions/ko/array_as_content_declaration.md +1 -2
  623. package/frequent_questions/ko/build_dictionaries.md +1 -2
  624. package/frequent_questions/ko/build_error_CI_CD.md +1 -2
  625. package/frequent_questions/ko/bun_set_up.md +1 -2
  626. package/frequent_questions/ko/customized_locale_list.md +1 -2
  627. package/frequent_questions/ko/domain_routing.md +1 -2
  628. package/frequent_questions/ko/esbuild_error.md +1 -2
  629. package/frequent_questions/ko/get_locale_cookie.md +1 -2
  630. package/frequent_questions/ko/intlayer_command_undefined.md +1 -2
  631. package/frequent_questions/ko/locale_incorect_in_url.md +1 -2
  632. package/frequent_questions/ko/static_rendering.md +1 -3
  633. package/frequent_questions/ko/translated_path_url.md +1 -2
  634. package/frequent_questions/ko/unknown_command.md +1 -2
  635. package/frequent_questions/pl/SSR_Next_no_[locale].md +104 -0
  636. package/frequent_questions/pl/array_as_content_declaration.md +71 -0
  637. package/frequent_questions/pl/build_dictionaries.md +58 -0
  638. package/frequent_questions/pl/build_error_CI_CD.md +74 -0
  639. package/frequent_questions/pl/bun_set_up.md +54 -0
  640. package/frequent_questions/pl/customized_locale_list.md +64 -0
  641. package/frequent_questions/pl/domain_routing.md +113 -0
  642. package/frequent_questions/pl/esbuild_error.md +29 -0
  643. package/frequent_questions/pl/get_locale_cookie.md +142 -0
  644. package/frequent_questions/pl/intlayer_command_undefined.md +155 -0
  645. package/frequent_questions/pl/locale_incorect_in_url.md +73 -0
  646. package/frequent_questions/pl/static_rendering.md +44 -0
  647. package/frequent_questions/pl/translated_path_url.md +55 -0
  648. package/frequent_questions/pl/unknown_command.md +97 -0
  649. package/frequent_questions/pt/SSR_Next_no_[locale].md +1 -2
  650. package/frequent_questions/pt/array_as_content_declaration.md +1 -2
  651. package/frequent_questions/pt/build_dictionaries.md +1 -2
  652. package/frequent_questions/pt/build_error_CI_CD.md +1 -2
  653. package/frequent_questions/pt/bun_set_up.md +1 -2
  654. package/frequent_questions/pt/customized_locale_list.md +1 -2
  655. package/frequent_questions/pt/domain_routing.md +1 -2
  656. package/frequent_questions/pt/esbuild_error.md +1 -2
  657. package/frequent_questions/pt/get_locale_cookie.md +1 -2
  658. package/frequent_questions/pt/intlayer_command_undefined.md +1 -2
  659. package/frequent_questions/pt/locale_incorect_in_url.md +1 -2
  660. package/frequent_questions/pt/static_rendering.md +1 -3
  661. package/frequent_questions/pt/translated_path_url.md +1 -2
  662. package/frequent_questions/pt/unknown_command.md +1 -2
  663. package/frequent_questions/ru/SSR_Next_no_[locale].md +1 -2
  664. package/frequent_questions/ru/array_as_content_declaration.md +1 -2
  665. package/frequent_questions/ru/build_dictionaries.md +1 -2
  666. package/frequent_questions/ru/build_error_CI_CD.md +1 -2
  667. package/frequent_questions/ru/bun_set_up.md +1 -2
  668. package/frequent_questions/ru/customized_locale_list.md +1 -2
  669. package/frequent_questions/ru/domain_routing.md +1 -2
  670. package/frequent_questions/ru/esbuild_error.md +1 -2
  671. package/frequent_questions/ru/get_locale_cookie.md +1 -2
  672. package/frequent_questions/ru/intlayer_command_undefined.md +1 -2
  673. package/frequent_questions/ru/locale_incorect_in_url.md +1 -2
  674. package/frequent_questions/ru/static_rendering.md +1 -2
  675. package/frequent_questions/ru/translated_path_url.md +1 -2
  676. package/frequent_questions/ru/unknown_command.md +1 -2
  677. package/frequent_questions/tr/SSR_Next_no_[locale].md +1 -2
  678. package/frequent_questions/tr/array_as_content_declaration.md +1 -2
  679. package/frequent_questions/tr/build_dictionaries.md +1 -2
  680. package/frequent_questions/tr/build_error_CI_CD.md +1 -2
  681. package/frequent_questions/tr/bun_set_up.md +1 -2
  682. package/frequent_questions/tr/customized_locale_list.md +1 -2
  683. package/frequent_questions/tr/domain_routing.md +1 -2
  684. package/frequent_questions/tr/esbuild_error.md +1 -2
  685. package/frequent_questions/tr/get_locale_cookie.md +1 -2
  686. package/frequent_questions/tr/intlayer_command_undefined.md +1 -2
  687. package/frequent_questions/tr/locale_incorect_in_url.md +1 -2
  688. package/frequent_questions/tr/static_rendering.md +1 -2
  689. package/frequent_questions/tr/translated_path_url.md +1 -2
  690. package/frequent_questions/tr/unknown_command.md +1 -2
  691. package/frequent_questions/vi/SSR_Next_no_[locale].md +106 -0
  692. package/frequent_questions/vi/array_as_content_declaration.md +71 -0
  693. package/frequent_questions/vi/build_dictionaries.md +58 -0
  694. package/frequent_questions/vi/build_error_CI_CD.md +74 -0
  695. package/frequent_questions/vi/bun_set_up.md +53 -0
  696. package/frequent_questions/vi/customized_locale_list.md +64 -0
  697. package/frequent_questions/vi/domain_routing.md +113 -0
  698. package/frequent_questions/vi/esbuild_error.md +29 -0
  699. package/frequent_questions/vi/get_locale_cookie.md +142 -0
  700. package/frequent_questions/vi/intlayer_command_undefined.md +155 -0
  701. package/frequent_questions/vi/locale_incorect_in_url.md +73 -0
  702. package/frequent_questions/vi/static_rendering.md +44 -0
  703. package/frequent_questions/vi/translated_path_url.md +55 -0
  704. package/frequent_questions/vi/unknown_command.md +97 -0
  705. package/frequent_questions/zh/SSR_Next_no_[locale].md +1 -2
  706. package/frequent_questions/zh/array_as_content_declaration.md +1 -2
  707. package/frequent_questions/zh/build_dictionaries.md +1 -2
  708. package/frequent_questions/zh/build_error_CI_CD.md +1 -2
  709. package/frequent_questions/zh/bun_set_up.md +1 -2
  710. package/frequent_questions/zh/customized_locale_list.md +1 -2
  711. package/frequent_questions/zh/domain_routing.md +1 -2
  712. package/frequent_questions/zh/esbuild_error.md +1 -2
  713. package/frequent_questions/zh/get_locale_cookie.md +1 -2
  714. package/frequent_questions/zh/intlayer_command_undefined.md +1 -2
  715. package/frequent_questions/zh/locale_incorect_in_url.md +1 -2
  716. package/frequent_questions/zh/static_rendering.md +1 -3
  717. package/frequent_questions/zh/translated_path_url.md +1 -2
  718. package/frequent_questions/zh/unknown_command.md +1 -2
  719. package/legal/id/privacy_notice.md +83 -0
  720. package/legal/id/terms_of_service.md +55 -0
  721. package/legal/pl/privacy_notice.md +83 -0
  722. package/legal/pl/terms_of_service.md +55 -0
  723. package/legal/vi/privacy_notice.md +83 -0
  724. package/legal/vi/terms_of_service.md +55 -0
  725. package/package.json +19 -18
  726. package/src/generated/blog.entry.ts +38 -0
@@ -181,6 +181,6 @@ Veja as comparações e padrões no resumo focado em Next.js: https://intlayer.o
181
181
  - React Router v7: https://intlayer.org/doc/environment/vite-and-react/react-router-v7
182
182
  - Início TanStack: https://intlayer.org/doc/environment/vite-and-react/tanstack-start
183
183
  - Configuração do Next.js: https://intlayer.org/doc/environment/nextjs
184
- - Por que Intlayer vs. next-intl vs. next-i18next: https://intlayer.org/blog/next-i18next-vs-next-intl-vs-intlayer
184
+ - Por que Intlayer vs. next-intl vs. next-i18next - https://intlayer.org/blog/next-i18next-vs-next-intl-vs-intlayer
185
185
 
186
186
  Estas páginas incluem configuração completa, provedores, roteamento e auxiliares de SEO.
@@ -39,6 +39,12 @@ Os arquivos de configuração do Intlayer permitem a personalização de vários
39
39
 
40
40
  ---
41
41
 
42
+ ## Índice
43
+
44
+ <TOC/>
45
+
46
+ ---
47
+
42
48
  ## Suporte a Arquivos de Configuração
43
49
 
44
50
  O Intlayer aceita formatos de arquivos de configuração JSON, JS, MJS e TS:
@@ -27,6 +27,14 @@ history:
27
27
 
28
28
  # Intlayer CLI
29
29
 
30
+ ---
31
+
32
+ ## Sumário
33
+
34
+ <TOC/>
35
+
36
+ ---
37
+
30
38
  ## Instalar Pacote
31
39
 
32
40
  Instale os pacotes necessários usando npm:
@@ -373,7 +381,6 @@ npx intlayer doc translate
373
381
  > Exemplo: `npx intlayer doc translate --excluded-glob-pattern "docs/internal/**"`
374
382
 
375
383
  - **`--skip-if-modified-before [skipIfModifiedBefore]`**: Pula o arquivo se ele foi modificado antes do tempo especificado.
376
-
377
384
  - Pode ser um tempo absoluto como "2025-12-05" (string ou Date)
378
385
  - Pode ser um tempo relativo em ms `1 * 60 * 60 * 1000` (1 hora)
379
386
  - Esta opção verifica o tempo de atualização do arquivo usando o método `fs.stat`. Portanto, pode ser impactada pelo Git ou outras ferramentas que modificam o arquivo.
@@ -381,7 +388,6 @@ npx intlayer doc translate
381
388
  > Exemplo: `npx intlayer doc translate --skip-if-modified-before "2025-12-05"`
382
389
 
383
390
  - **`--skip-if-modified-after [skipIfModifiedAfter]`**: Pula o arquivo se ele foi modificado dentro do tempo especificado.
384
-
385
391
  - Pode ser um horário absoluto como "2025-12-05" (string ou Date)
386
392
  - Pode ser um horário relativo em ms `1 * 60 * 60 * 1000` (1 hora)
387
393
  - Esta opção verifica o horário de atualização do arquivo usando o método `fs.stat`. Portanto, pode ser impactada pelo Git ou outras ferramentas que modificam o arquivo.
@@ -432,7 +438,6 @@ npx intlayer doc translate
432
438
  **Opções de instruções personalizadas:**
433
439
 
434
440
  - **`--custom-instructions [customInstructions]`**: Instruções personalizadas adicionadas ao prompt. Útil para aplicar regras específicas relacionadas à formatação, tradução de URLs, etc.
435
-
436
441
  - Pode ser um tempo absoluto como "2025-12-05" (string ou Date)
437
442
  - Pode ser um tempo relativo em ms `1 * 60 * 60 * 1000` (1 hora)
438
443
  - Esta opção verifica o tempo de atualização do arquivo usando o método `fs.stat`. Portanto, pode ser impactada pelo Git ou outras ferramentas que modificam o arquivo.
@@ -0,0 +1,627 @@
1
+ ---
2
+ createdAt: 2025-10-05
3
+ updatedAt: 2025-10-05
4
+ title: Como traduzir seu Next.js 15 usando next-i18next – guia i18n 2025
5
+ description: Um guia prático e pronto para produção para internacionalizar um app Next.js 15 App Router com i18next/next-i18next e aprimorá-lo com Intlayer.
6
+ keywords:
7
+ - Internacionalização
8
+ - Documentação
9
+ - Intlayer
10
+ - Next.js 15
11
+ - next-i18next
12
+ - i18next
13
+ - JavaScript
14
+ - React
15
+ slugs:
16
+ - doc
17
+ - next-i18next
18
+ applicationTemplate: https://github.com/aymericzip/intlayer-next-i18next-template
19
+ ---
20
+
21
+ # Traduza seu Next.js 15 usando next-i18next com Intlayer | Internacionalização (i18n)
22
+
23
+ ### Para quem este guia é destinado
24
+
25
+ - **Júnior**: Siga os passos exatos e copie os blocos de código. Você terá um app multilíngue funcionando.
26
+ - **Pleno**: Use as listas de verificação e os destaques de melhores práticas para evitar armadilhas comuns.
27
+ - **Sênior**: Leia rapidamente a estrutura de alto nível, SEO e seções de automação; você encontrará padrões sensatos e pontos de extensão.
28
+
29
+ ### O que você vai construir
30
+
31
+ - Projeto App Router com rotas localizadas (ex.: `/`, `/fr/...`)
32
+ - Configuração i18n com locais, local padrão, suporte RTL
33
+ - Inicialização i18n no servidor e um provider no cliente
34
+ - Traduções com namespaces carregadas sob demanda
35
+ - SEO com `hreflang`, `sitemap` localizado, `robots`
36
+ - Middleware para roteamento por localidade
37
+ - Integração Intlayer para automatizar fluxos de trabalho de tradução (testes, preenchimento por IA, sincronização JSON)
38
+
39
+ > Nota: next-i18next é construído sobre o i18next. Este guia utiliza as primitivas do i18next compatíveis com o next-i18next no App Router, mantendo a arquitetura simples e pronta para produção.
40
+ > Para uma comparação mais ampla, veja [next-i18next vs next-i18next vs Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pt/next-i18next_vs_next-i18next_vs_intlayer.md).
41
+
42
+ ---
43
+
44
+ ## 1) Estrutura do projeto
45
+
46
+ Instale as dependências do next-i18next -
47
+
48
+ ```bash packageManager="npm"
49
+ npm install next-i18next i18next react-i18next i18next-resources-to-backend
50
+ ```
51
+
52
+ ```bash packageManager="pnpm"
53
+ pnpm add next-i18next i18next react-i18next i18next-resources-to-backend
54
+ ```
55
+
56
+ ```bash packageManager="yarn"
57
+ yarn add next-i18next i18next react-i18next i18next-resources-to-backend
58
+ ```
59
+
60
+ Comece com uma estrutura clara. Mantenha as mensagens divididas por localidade e namespace.
61
+
62
+ ```bash
63
+ .
64
+ ├── i18n.config.ts
65
+ └── src
66
+ ├── locales
67
+ │ ├── en
68
+ │ │ ├── common.json
69
+ │ │ └── about.json
70
+ │ └── fr
71
+ │ ├── common.json
72
+ │ └── about.json
73
+ ├── app
74
+ │ ├── i18n
75
+ │ │ └── server.ts
76
+ │ └── [locale]
77
+ │ ├── layout.tsx
78
+ │ └── about.tsx
79
+ └── components
80
+ ├── I18nProvider.tsx
81
+ ├── ClientComponent.tsx
82
+ └── ServerComponent.tsx
83
+ ```
84
+
85
+ Checklist (nível médio/sênior):
86
+
87
+ - Mantenha um JSON por namespace por localidade
88
+ - Não centralize excessivamente as mensagens; use namespaces pequenos, escopados por página/feature
89
+ - Evite importar todas as localidades de uma vez; carregue apenas o que você precisa
90
+
91
+ ---
92
+
93
+ ## 2) Instalar dependências
94
+
95
+ ```bash
96
+ pnpm add i18next react-i18next i18next-resources-to-backend
97
+ ```
98
+
99
+ Se você planeja usar as APIs do next-i18next ou interoperabilidade de configuração, também:
100
+
101
+ ```bash
102
+ pnpm add next-i18next
103
+ ```
104
+
105
+ ---
106
+
107
+ ## 3) Configuração principal do i18n
108
+
109
+ Defina as localidades, localidade padrão, RTL e auxiliares para caminhos/URLs localizados.
110
+
111
+ ```ts fileName="i18n.config.ts"
112
+ export const locales = ["en", "fr"] as const;
113
+ export type Locale = (typeof locales)[number];
114
+
115
+ export const defaultLocale: Locale = "en";
116
+
117
+ export const rtlLocales = ["ar", "he", "fa", "ur"] as const;
118
+ export const isRtl = (locale: string) =>
119
+ (rtlLocales as readonly string[]).includes(locale);
120
+
121
+ export function localizedPath(locale: string, path: string) {
122
+ return locale === defaultLocale ? path : "/" + locale + path;
123
+ }
124
+
125
+ const ORIGIN = "https://example.com";
126
+ export function abs(locale: string, path: string) {
127
+ return ORIGIN + localizedPath(locale, path);
128
+ }
129
+ ```
130
+
131
+ Nota importante: Se você usar `next-i18next.config.js`, mantenha-o alinhado com `i18n.config.ts` para evitar divergências.
132
+
133
+ ---
134
+
135
+ ## 4) Inicialização do i18n no lado do servidor
136
+
137
+ Inicialize o i18next no servidor com um backend dinâmico que importa apenas o JSON necessário para a localidade/namespace.
138
+
139
+ ```ts fileName="src/app/i18n/server.ts"
140
+ import { createInstance } from "i18next";
141
+ import { initReactI18next } from "react-i18next/initReactI18next";
142
+ import resourcesToBackend from "i18next-resources-to-backend";
143
+ import { defaultLocale } from "@/i18n.config";
144
+
145
+ // Carrega recursos JSON de src/locales/<locale>/<namespace>.json
146
+ const backend = resourcesToBackend(
147
+ (locale: string, namespace: string) =>
148
+ import(`../../locales/${locale}/${namespace}.json`)
149
+ );
150
+
151
+ export async function initI18next(
152
+ locale: string,
153
+ namespaces: string[] = ["common"]
154
+ ) {
155
+ const i18n = createInstance();
156
+ await i18n
157
+ .use(initReactI18next)
158
+ .use(backend)
159
+ .init({
160
+ lng: locale,
161
+ fallbackLng: defaultLocale,
162
+ ns: namespaces,
163
+ defaultNS: "common",
164
+ interpolation: { escapeValue: false },
165
+ react: { useSuspense: false },
166
+ });
167
+ return i18n;
168
+ }
169
+ ```
170
+
171
+ Nota intermediária: Mantenha a lista de namespaces curta por página para limitar o payload. Evite bundles globais “catch-all”.
172
+
173
+ ---
174
+
175
+ ## 5) Provedor cliente para componentes React
176
+
177
+ Envolva os componentes cliente com um provedor que espelha a configuração do servidor e carrega apenas os namespaces solicitados.
178
+
179
+ ```tsx fileName="src/components/I18nProvider.tsx"
180
+ "use client";
181
+
182
+ import * as React from "react";
183
+ import { I18nextProvider } from "react-i18next";
184
+ import { createInstance } from "i18next";
185
+ import { initReactI18next } from "react-i18next/initReactI18next";
186
+ import resourcesToBackend from "i18next-resources-to-backend";
187
+ import { defaultLocale } from "@/i18n.config";
188
+
189
+ const backend = resourcesToBackend(
190
+ (locale: string, namespace: string) =>
191
+ import(`../../locales/${locale}/${namespace}.json`)
192
+ );
193
+
194
+ type Props = {
195
+ locale: string;
196
+ namespaces?: string[];
197
+ resources?: Record<string, any>; // { ns: pacote }
198
+ children: React.ReactNode;
199
+ };
200
+
201
+ export default function I18nProvider({
202
+ locale,
203
+ namespaces = ["common"],
204
+ resources,
205
+ children,
206
+ }: Props) {
207
+ const [i18n] = React.useState(() => {
208
+ const i = createInstance();
209
+
210
+ i.use(initReactI18next)
211
+ .use(backend)
212
+ .init({
213
+ lng: locale,
214
+ fallbackLng: defaultLocale,
215
+ ns: namespaces,
216
+ resources: resources ? { [locale]: resources } : undefined,
217
+ defaultNS: "common",
218
+ interpolation: { escapeValue: false },
219
+ react: { useSuspense: false },
220
+ });
221
+
222
+ return i;
223
+ });
224
+
225
+ return <I18nextProvider i18n={i18n}>{children}</I18nextProvider>;
226
+ }
227
+ ```
228
+
229
+ Dica para iniciantes: Você não precisa passar todas as mensagens para o cliente. Comece apenas com os namespaces da página.
230
+
231
+ ---
232
+
233
+ ## 6) Layout e rotas localizados
234
+
235
+ Defina o idioma e a direção, e pré-genere rotas por localidade para favorecer a renderização estática.
236
+
237
+ ```tsx fileName="src/app/[locale]/layout.tsx"
238
+ import type { ReactNode } from "react";
239
+ import { locales, defaultLocale, isRtl, type Locale } from "@/i18n.config";
240
+
241
+ export const dynamicParams = false;
242
+
243
+ export function generateStaticParams() {
244
+ return locales.map((locale) => ({ locale }));
245
+ }
246
+
247
+ export default function LocaleLayout({
248
+ children,
249
+ params,
250
+ }: {
251
+ children: ReactNode;
252
+ params: { locale: string };
253
+ }) {
254
+ const locale: Locale = (locales as readonly string[]).includes(params.locale)
255
+ ? (params.locale as any)
256
+ : defaultLocale;
257
+
258
+ const dir = isRtl(locale) ? "rtl" : "ltr";
259
+
260
+ return (
261
+ <html lang={locale} dir={dir}>
262
+ <body>{children}</body>
263
+ </html>
264
+ );
265
+ }
266
+ ```
267
+
268
+ ---
269
+
270
+ ## 7) Exemplo de página com uso no servidor + cliente
271
+
272
+ ```tsx fileName="src/app/[locale]/about.tsx"
273
+ import I18nProvider from "@/components/I18nProvider";
274
+ import { initI18next } from "@/app/i18n/server";
275
+ import type { Locale } from "@/i18n.config";
276
+ import ClientComponent from "@/components/ClientComponent";
277
+ import ServerComponent from "@/components/ServerComponent";
278
+
279
+ // Forçar renderização estática para a página
280
+ export const dynamic = "force-static";
281
+
282
+ export default async function AboutPage({
283
+ params: { locale },
284
+ }: {
285
+ params: { locale: Locale };
286
+ }) {
287
+ const namespaces = ["common", "about"] as const;
288
+
289
+ const i18n = await initI18next(locale, [...namespaces]);
290
+ const tAbout = i18n.getFixedT(locale, "about");
291
+
292
+ return (
293
+ <I18nProvider locale={locale} namespaces={[...namespaces]}>
294
+ <main>
295
+ <h1>{tAbout("title")}</h1>
296
+
297
+ <ClientComponent />
298
+ <ServerComponent t={tAbout} locale={locale} count={0} />
299
+ </main>
300
+ </I18nProvider>
301
+ );
302
+ }
303
+ ```
304
+
305
+ Traduções (um JSON por namespace em `src/locales/...`):
306
+
307
+ ```json fileName="src/locales/pt/about.json"
308
+ {
309
+ "title": "Sobre",
310
+ "description": "Descrição da página Sobre",
311
+ "counter": {
312
+ "label": "Contador",
313
+ "increment": "Incrementar"
314
+ }
315
+ }
316
+ ```
317
+
318
+ ```json fileName="src/locales/fr/about.json"
319
+ {
320
+ "title": "À propos",
321
+ "description": "Description de la page À propos",
322
+ "counter": {
323
+ "label": "Compteur",
324
+ "increment": "Incrémenter"
325
+ }
326
+ }
327
+ ```
328
+
329
+ Componente cliente (carrega apenas o namespace necessário):
330
+
331
+ ```tsx fileName="src/components/ClientComponent.tsx"
332
+ "use client";
333
+
334
+ import React, { useState } from "react";
335
+ import { useTranslation } from "react-i18next";
336
+
337
+ const ClientComponent = () => {
338
+ const { t, i18n } = useTranslation("about");
339
+ const [count, setCount] = useState(0);
340
+
341
+ const numberFormat = new Intl.NumberFormat(i18n.language);
342
+
343
+ return (
344
+ <div>
345
+ <p>{numberFormat.format(count)}</p>
346
+ <button
347
+ aria-label={t("counter.label")}
348
+ onClick={() => setCount((c) => c + 1)}
349
+ >
350
+ {t("counter.increment")}
351
+ </button>
352
+ </div>
353
+ );
354
+ };
355
+
356
+ export default ClientComponent;
357
+ ```
358
+
359
+ > Garanta que a página/provider inclua apenas os namespaces que você precisa (ex: `about`).
360
+ > Se você usar React < 19, memorize formatadores pesados como `Intl.NumberFormat`.
361
+
362
+ Componente de servidor síncrono embutido sob uma fronteira de cliente:
363
+
364
+ ```tsx fileName="src/components/ServerComponent.tsx"
365
+ type ServerComponentProps = {
366
+ t: (key: string) => string;
367
+ locale: string;
368
+ count: number;
369
+ };
370
+
371
+ const ServerComponent = ({ t, locale, count }: ServerComponentProps) => {
372
+ const formatted = new Intl.NumberFormat(locale).format(count);
373
+
374
+ return (
375
+ <div>
376
+ <p>{formatted}</p>
377
+ <button aria-label={t("counter.label")}>{t("counter.increment")}</button>
378
+ </div>
379
+ );
380
+ };
381
+
382
+ export default ServerComponent;
383
+ ```
384
+
385
+ ---
386
+
387
+ ## 8) SEO: Metadados, Hreflang, Sitemap, Robots
388
+
389
+ Traduzir conteúdo é uma forma de ampliar o alcance. Configure o SEO multilíngue de forma completa.
390
+
391
+ Melhores práticas:
392
+
393
+ - Defina `lang` e `dir` na raiz
394
+ - Adicione `alternates.languages` para cada locale (+ `x-default`)
395
+ - Liste URLs traduzidas no `sitemap.xml` e use `hreflang`
396
+ - Exclua áreas privadas localizadas (ex.: `/fr/admin`) no `robots.txt`
397
+
398
+ ```tsx fileName="src/app/[locale]/about/layout.tsx"
399
+ import type { Metadata } from "next";
400
+ import { locales, defaultLocale, localizedPath } from "@/i18n.config";
401
+
402
+ export async function generateMetadata({
403
+ params,
404
+ }: {
405
+ params: { locale: string };
406
+ }): Promise<Metadata> {
407
+ const { locale } = params;
408
+
409
+ // Importa o pacote JSON correto de src/locales
410
+ const messages = (await import("@/locales/" + locale + "/about.json"))
411
+ .default;
412
+
413
+ const languages = Object.fromEntries(
414
+ locales.map((locale) => [locale, localizedPath(locale, "/about")])
415
+ );
416
+
417
+ return {
418
+ title: messages.title,
419
+ description: messages.description,
420
+ alternates: {
421
+ canonical: localizedPath(locale, "/about"),
422
+ languages: { ...languages, "x-default": "/about" },
423
+ },
424
+ };
425
+ }
426
+
427
+ export default async function AboutPage() {
428
+ return <h1>Sobre</h1>;
429
+ }
430
+ ```
431
+
432
+ ```ts fileName="src/app/sitemap.ts"
433
+ import type { MetadataRoute } from "next";
434
+ import { locales, defaultLocale, abs } from "@/i18n.config";
435
+
436
+ export default function sitemap(): MetadataRoute.Sitemap {
437
+ const languages = Object.fromEntries(
438
+ locales.map((locale) => [locale, abs(locale, "/about")])
439
+ );
440
+
441
+ return [
442
+ {
443
+ url: abs(defaultLocale, "/about"),
444
+ lastModified: new Date(),
445
+ changeFrequency: "monthly",
446
+ priority: 0.7,
447
+ alternates: { languages },
448
+ },
449
+ ];
450
+ }
451
+ ```
452
+
453
+ ```ts fileName="src/app/robots.ts"
454
+ import type { MetadataRoute } from "next";
455
+ import { locales, defaultLocale, localizedPath } from "@/i18n.config";
456
+
457
+ const ORIGIN = "https://example.com";
458
+
459
+ const expandAllLocales = (path: string) => [
460
+ localizedPath(defaultLocale, path),
461
+ ...locales
462
+ .filter((locale) => locale !== defaultLocale)
463
+ .map((locale) => localizedPath(locale, path)),
464
+ ];
465
+
466
+ export default function robots(): MetadataRoute.Robots {
467
+ const disallow = [
468
+ ...expandAllLocales("/dashboard"),
469
+ ...expandAllLocales("/admin"),
470
+ ];
471
+
472
+ return {
473
+ rules: { userAgent: "*", allow: ["/"], disallow },
474
+ host: ORIGIN,
475
+ sitemap: ORIGIN + "/sitemap.xml",
476
+ };
477
+ }
478
+ ```
479
+
480
+ ---
481
+
482
+ ## 9) Middleware para roteamento de locale
483
+
484
+ Detecta o locale e redireciona para uma rota localizada caso esteja ausente.
485
+
486
+ ```ts fileName="src/middleware.ts"
487
+ import { NextResponse, type NextRequest } from "next/server";
488
+ import { defaultLocale, locales } from "@/i18n.config";
489
+
490
+ const PUBLIC_FILE = /\.[^/]+$/; // exclui arquivos com extensões
491
+
492
+ export function middleware(request: NextRequest) {
493
+ const { pathname } = request.nextUrl;
494
+
495
+ if (
496
+ pathname.startsWith("/_next") ||
497
+ pathname.startsWith("/api") ||
498
+ pathname.startsWith("/static") ||
499
+ PUBLIC_FILE.test(pathname)
500
+ ) {
501
+ return;
502
+ }
503
+
504
+ const hasLocale = locales.some(
505
+ (locale) =>
506
+ pathname === "/" + locale || pathname.startsWith("/" + locale + "/")
507
+ );
508
+ if (!hasLocale) {
509
+ const locale = defaultLocale;
510
+ const url = request.nextUrl.clone();
511
+ url.pathname = "/" + locale + (pathname === "/" ? "" : pathname);
512
+ return NextResponse.redirect(url);
513
+ }
514
+ }
515
+
516
+ export const config = {
517
+ matcher: [
518
+ // Corresponder a todos os caminhos, exceto os que começam com estes e arquivos com uma extensão
519
+ "/((?!api|_next|static|.*\\..*).*)",
520
+ ],
521
+ };
522
+ ```
523
+
524
+ ---
525
+
526
+ ## 10) Melhores práticas de desempenho e DX
527
+
528
+ - **Definir `lang` e `dir` no html**: Feito em `src/app/[locale]/layout.tsx`.
529
+ - **Dividir mensagens por namespace**: Mantenha os bundles pequenos (`common.json`, `about.json`, etc.).
530
+ - **Minimizar payload no cliente**: Nas páginas, passe apenas os namespaces necessários para o provider.
531
+ - **Preferir páginas estáticas**: Use `export const dynamic = 'force-static'` e `generateStaticParams` por locale.
532
+ - **Sincronizar componentes do servidor**: Passe strings/formatações pré-computadas em vez de chamadas assíncronas na renderização.
533
+ - **Memoizar operações pesadas**: Especialmente no código cliente para versões antigas do React.
534
+ - **Cache e headers**: Prefira estático ou `revalidate` em vez de renderização dinâmica quando possível.
535
+
536
+ ---
537
+
538
+ ## 11) Testes e CI
539
+
540
+ - Adicione testes unitários para componentes que usam `t` para garantir que as chaves existam.
541
+ - Validar que cada namespace tenha as mesmas chaves em todas as localidades.
542
+ - Exibir chaves faltantes durante o CI antes do deploy.
543
+
544
+ O Intlayer automatizará grande parte disso (veja a próxima seção).
545
+
546
+ ---
547
+
548
+ ## 12) Adicionar Intlayer por cima (automação)
549
+
550
+ O Intlayer ajuda você a manter as traduções JSON sincronizadas, testar chaves faltantes e preencher com IA quando desejado.
551
+
552
+ Instale as dependências do intlayer:
553
+
554
+ ```bash packageManager="npm"
555
+ npm install intlayer @intlayer/sync-json-plugin -D
556
+ ```
557
+
558
+ ```bash packageManager="pnpm"
559
+ pnpm add intlayer @intlayer/sync-json-plugin -D
560
+ ```
561
+
562
+ ```bash packageManager="yarn"
563
+ yarn add intlayer @intlayer/sync-json-plugin -D
564
+ ```
565
+
566
+ ```ts fileName="intlayer.config.ts"
567
+ import { type IntlayerConfig, Locales } from "intlayer";
568
+ import { locales, defaultLocale } from "@/i18n";
569
+ import { syncJSON } from "@intlayer/sync-json";
570
+
571
+ export const locales = [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH];
572
+
573
+ const config: IntlayerConfig = {
574
+ internationalization: {
575
+ locales,
576
+ defaultLocale,
577
+ },
578
+ ai: {
579
+ apiKey: process.env.OPENAI_API_KEY,
580
+ },
581
+ plugins: [
582
+ syncJSON({
583
+ source: ({ locale }) => `./locales/${locale}.json`,
584
+ }),
585
+ ],
586
+ };
587
+
588
+ export default config;
589
+ ```
590
+
591
+ Adicione scripts no package:
592
+
593
+ ```json fileName="package.json"
594
+ {
595
+ "scripts": {
596
+ "i18n:fill": "intlayer fill",
597
+ "i18n:test": "intlayer test"
598
+ }
599
+ }
600
+ ```
601
+
602
+ Fluxos comuns:
603
+
604
+ - `pnpm i18n:test` no CI para falhar builds em caso de chaves faltantes
605
+ - `pnpm i18n:fill` localmente para propor traduções com AI para chaves recém-adicionadas
606
+
607
+ > Você pode fornecer argumentos para a CLI; consulte a [documentação da CLI do Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/intlayer_cli.md).
608
+
609
+ ---
610
+
611
+ ## 13) Solução de problemas
612
+
613
+ - **Chaves não encontradas**: Verifique se a página/provedor lista os namespaces corretos e se o arquivo JSON existe em `src/locales/<locale>/<namespace>.json`.
614
+ - **Idioma errado/piscar de inglês**: Verifique novamente a detecção de locale em `middleware.ts` e o `lng` do provedor.
615
+ - **Problemas de layout RTL**: Confirme que `dir` é derivado de `isRtl(locale)` e que seu CSS respeita `[dir="rtl"]`.
616
+ - **Alternativas de SEO ausentes**: Confirme que `alternates.languages` inclui todos os locales e `x-default`.
617
+ - **Bundles muito grandes**: Divida os namespaces ainda mais e evite importar árvores inteiras de `locales` no cliente.
618
+
619
+ ---
620
+
621
+ ## 14) O que vem a seguir
622
+
623
+ - Adicione mais locales e namespaces conforme as funcionalidades crescem
624
+ - Localize páginas de erro, emails e conteúdo gerado por API
625
+ - Estenda os workflows do Intlayer para abrir PRs automaticamente para atualizações de tradução
626
+
627
+ Se preferir um starter, experimente o template: `https://github.com/aymericzip/intlayer-next-i18next-template`.