@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
@@ -27,6 +27,14 @@ history:
27
27
 
28
28
  # Intlayer CLI
29
29
 
30
+ ---
31
+
32
+ ## 目录
33
+
34
+ <TOC/>
35
+
36
+ ---
37
+
30
38
  ## 安装包
31
39
 
32
40
  使用 npm 安装必要的包:
@@ -371,7 +379,6 @@ npx intlayer doc translate
371
379
  > 示例:`npx intlayer doc translate --excluded-glob-pattern "docs/internal/**"`
372
380
 
373
381
  - **`--skip-if-modified-before [skipIfModifiedBefore]`**:如果文件在指定时间之前被修改,则跳过该文件。
374
-
375
382
  - 可以是绝对时间,如 "2025-12-05"(字符串或日期对象)
376
383
  - 也可以是相对时间,单位为毫秒,例如 `1 * 60 * 60 * 1000`(1小时)
377
384
  - 此选项通过 `fs.stat` 方法检查文件的更新时间,因此可能会受到 Git 或其他修改文件工具的影响。
@@ -379,7 +386,6 @@ npx intlayer doc translate
379
386
  > 示例:`npx intlayer doc translate --skip-if-modified-before "2025-12-05"`
380
387
 
381
388
  - **`--skip-if-modified-after [skipIfModifiedAfter]`**:如果文件在指定时间内被修改,则跳过该文件。
382
-
383
389
  - 可以是绝对时间,如 "2025-12-05"(字符串或日期对象)
384
390
  - 可以是相对时间,单位为毫秒,例如 `1 * 60 * 60 * 1000`(1 小时)
385
391
  - 此选项通过 `fs.stat` 方法检查文件的更新时间,因此可能会受到 Git 或其他修改文件工具的影响。
@@ -430,7 +436,6 @@ npx intlayer doc translate
430
436
  **自定义指令选项:**
431
437
 
432
438
  - **`--custom-instructions [customInstructions]`**:添加到提示中的自定义指令。用于应用有关格式、URL 翻译等的特定规则。
433
-
434
439
  - 可以是绝对时间,如 "2025-12-05"(字符串或日期)
435
440
  - 可以是相对时间,单位为毫秒,如 `1 * 60 * 60 * 1000`(1 小时)
436
441
  - 此选项通过 `fs.stat` 方法检查文件的更新时间,因此可能会受到 Git 或其他修改文件工具的影响。
@@ -0,0 +1,628 @@
1
+ ---
2
+ createdAt: 2025-10-05
3
+ updatedAt: 2025-10-05
4
+ title: 如何使用 next-i18next 翻译你的 Next.js 15 —— 2025 年国际化 (i18n) 指南
5
+ description: 一个实用且适用于生产环境的指南,教你如何使用 i18next/next-i18next 国际化 Next.js 15 App Router 应用,并通过 Intlayer 进行增强。
6
+ keywords:
7
+ - 国际化
8
+ - 文档
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
+ # 使用 Intlayer 翻译你的 Next.js 15 next-i18next 网站 | 国际化 (i18n)
22
+
23
+ ### 本指南适用对象
24
+
25
+ - **初级**:按照步骤操作并复制代码块,你将获得一个可用的多语言应用。
26
+ - **中级**:使用检查清单和最佳实践提示,避免常见陷阱。
27
+ - **高级**:浏览高层结构、SEO 和自动化部分;你会发现合理的默认设置和扩展点。
28
+
29
+ ### 你将构建的内容
30
+
31
+ - 带有本地化路由的 App Router 项目(例如 `/`、`/fr/...`)
32
+ - 包含 locales、默认语言、RTL 支持的 i18n 配置
33
+ - 服务器端 i18n 初始化和客户端提供者
34
+ - 按需加载的命名空间翻译
35
+ - 支持 `hreflang`、本地化 `sitemap` 和 `robots` 的 SEO
36
+ - 用于语言路由的中间件
37
+ - 集成 Intlayer 以自动化翻译工作流(测试、AI 填充、JSON 同步)
38
+
39
+ > 注意:next-i18next 是构建在 i18next 之上的。本指南使用与 next-i18next 在 App Router 中兼容的 i18next 原语,同时保持架构简单且适合生产环境。
40
+ > 如需更全面的比较,请参见 [next-i18next vs next-i18next vs Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/zh/next-i18next_vs_next-i18next_vs_intlayer.md)。
41
+
42
+ ---
43
+
44
+ ## 1) 项目结构
45
+
46
+ 安装 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
+ 从清晰的结构开始。保持消息按语言环境和命名空间分开。
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
+ 检查清单(中高级):
86
+
87
+ - 每个语言环境每个命名空间保持一个 JSON 文件
88
+ - 不要过度集中消息;使用小型的页面/功能范围命名空间
89
+ - 避免一次导入所有语言环境;只加载你需要的
90
+
91
+ ---
92
+
93
+ ## 2) 安装依赖
94
+
95
+ ```bash
96
+ bash
97
+ pnpm add i18next react-i18next i18next-resources-to-backend
98
+ ```
99
+
100
+ 如果您计划使用 next-i18next 的 API 或配置互操作,还需执行:
101
+
102
+ ```bash
103
+ pnpm add next-i18next
104
+ ```
105
+
106
+ ---
107
+
108
+ ## 3) 核心 i18n 配置
109
+
110
+ 定义 locales、默认 locale、RTL 以及本地化路径/URL 的辅助函数。
111
+
112
+ ```ts fileName="i18n.config.ts"
113
+ export const locales = ["en", "fr"] as const;
114
+ export type Locale = (typeof locales)[number];
115
+
116
+ export const defaultLocale: Locale = "en";
117
+
118
+ export const rtlLocales = ["ar", "he", "fa", "ur"] as const;
119
+ export const isRtl = (locale: string) =>
120
+ (rtlLocales as readonly string[]).includes(locale);
121
+
122
+ export function localizedPath(locale: string, path: string) {
123
+ return locale === defaultLocale ? path : "/" + locale + path;
124
+ }
125
+
126
+ const ORIGIN = "https://example.com";
127
+ export function abs(locale: string, path: string) {
128
+ return ORIGIN + localizedPath(locale, path);
129
+ }
130
+ ```
131
+
132
+ 高级提示:如果你使用 `next-i18next.config.js`,请确保它与 `i18n.config.ts` 保持一致,以避免偏差。
133
+
134
+ ---
135
+
136
+ ## 4) 服务器端 i18n 初始化
137
+
138
+ 在服务器端初始化 i18next,使用动态后端仅导入所需的 locale/namespace JSON。
139
+
140
+ ```ts fileName="src/app/i18n/server.ts"
141
+ import { createInstance } from "i18next";
142
+ import { initReactI18next } from "react-i18next/initReactI18next";
143
+ import resourcesToBackend from "i18next-resources-to-backend";
144
+ import { defaultLocale } from "@/i18n.config";
145
+
146
+ // 从 src/locales/<locale>/<namespace>.json 加载 JSON 资源
147
+ const backend = resourcesToBackend(
148
+ (locale: string, namespace: string) =>
149
+ import(`../../locales/${locale}/${namespace}.json`)
150
+ );
151
+
152
+ export async function initI18next(
153
+ locale: string,
154
+ namespaces: string[] = ["common"]
155
+ ) {
156
+ const i18n = createInstance();
157
+ await i18n
158
+ .use(initReactI18next)
159
+ .use(backend)
160
+ .init({
161
+ lng: locale,
162
+ fallbackLng: defaultLocale,
163
+ ns: namespaces,
164
+ defaultNS: "common",
165
+ interpolation: { escapeValue: false },
166
+ react: { useSuspense: false },
167
+ });
168
+ return i18n;
169
+ }
170
+ ```
171
+
172
+ 中间提示:保持每页的命名空间列表简短以限制负载。避免使用全局的“捕获所有”包。
173
+
174
+ ---
175
+
176
+ ## 5) React 组件的客户端提供者
177
+
178
+ 使用一个提供者包裹客户端组件,该提供者与服务器配置相对应,并且只加载请求的命名空间。
179
+
180
+ ```tsx fileName="src/components/I18nProvider.tsx"
181
+ "use client";
182
+
183
+ import * as React from "react";
184
+ import { I18nextProvider } from "react-i18next";
185
+ import { createInstance } from "i18next";
186
+ import { initReactI18next } from "react-i18next/initReactI18next";
187
+ import resourcesToBackend from "i18next-resources-to-backend";
188
+ import { defaultLocale } from "@/i18n.config";
189
+
190
+ const backend = resourcesToBackend(
191
+ (locale: string, namespace: string) =>
192
+ import(`../../locales/${locale}/${namespace}.json`)
193
+ );
194
+
195
+ type Props = {
196
+ locale: string;
197
+ namespaces?: string[];
198
+ resources?: Record<string, any>; // { ns: bundle }
199
+ children: React.ReactNode;
200
+ };
201
+
202
+ export default function I18nProvider({
203
+ locale,
204
+ namespaces = ["common"],
205
+ resources,
206
+ children,
207
+ }: Props) {
208
+ const [i18n] = React.useState(() => {
209
+ const i = createInstance();
210
+
211
+ i.use(initReactI18next)
212
+ .use(backend)
213
+ .init({
214
+ lng: locale,
215
+ fallbackLng: defaultLocale,
216
+ ns: namespaces,
217
+ resources: resources ? { [locale]: resources } : undefined,
218
+ defaultNS: "common",
219
+ interpolation: { escapeValue: false },
220
+ react: { useSuspense: false },
221
+ });
222
+
223
+ return i;
224
+ });
225
+
226
+ return <I18nextProvider i18n={i18n}>{children}</I18nextProvider>;
227
+ }
228
+ ```
229
+
230
+ 初级提示:您不需要将所有消息传递给客户端。只需从页面的命名空间开始。
231
+
232
+ ---
233
+
234
+ ## 6) 本地化布局和路由
235
+
236
+ 设置语言和方向,并为每个语言预生成路由,以支持静态渲染。
237
+
238
+ ```tsx fileName="src/app/[locale]/layout.tsx"
239
+ import type { ReactNode } from "react";
240
+ import { locales, defaultLocale, isRtl, type Locale } from "@/i18n.config";
241
+
242
+ export const dynamicParams = false;
243
+
244
+ export function generateStaticParams() {
245
+ return locales.map((locale) => ({ locale }));
246
+ }
247
+
248
+ export default function LocaleLayout({
249
+ children,
250
+ params,
251
+ }: {
252
+ children: ReactNode;
253
+ params: { locale: string };
254
+ }) {
255
+ const locale: Locale = (locales as readonly string[]).includes(params.locale)
256
+ ? (params.locale as any)
257
+ : defaultLocale;
258
+
259
+ const dir = isRtl(locale) ? "rtl" : "ltr";
260
+
261
+ return (
262
+ <html lang={locale} dir={dir}>
263
+ <body>{children}</body>
264
+ </html>
265
+ );
266
+ }
267
+ ```
268
+
269
+ ---
270
+
271
+ ## 7) 服务器端 + 客户端使用示例页面
272
+
273
+ ```tsx fileName="src/app/[locale]/about.tsx"
274
+ import I18nProvider from "@/components/I18nProvider";
275
+ import { initI18next } from "@/app/i18n/server";
276
+ import type { Locale } from "@/i18n.config";
277
+ import ClientComponent from "@/components/ClientComponent";
278
+ import ServerComponent from "@/components/ServerComponent";
279
+
280
+ // 强制页面静态渲染
281
+ export const dynamic = "force-static";
282
+
283
+ export default async function AboutPage({
284
+ params: { locale },
285
+ }: {
286
+ params: { locale: Locale };
287
+ }) {
288
+ const namespaces = ["common", "about"] as const;
289
+
290
+ const i18n = await initI18next(locale, [...namespaces]);
291
+ const tAbout = i18n.getFixedT(locale, "about");
292
+
293
+ return (
294
+ <I18nProvider locale={locale} namespaces={[...namespaces]}>
295
+ <main>
296
+ <h1>{tAbout("title")}</h1>
297
+
298
+ <ClientComponent />
299
+ <ServerComponent t={tAbout} locale={locale} count={0} />
300
+ </main>
301
+ </I18nProvider>
302
+ );
303
+ }
304
+ ```
305
+
306
+ 翻译(每个命名空间一个 JSON,位于 `src/locales/...` 下):
307
+
308
+ ```json fileName="src/locales/zh/about.json"
309
+ {
310
+ "title": "关于",
311
+ "description": "关于页面描述",
312
+ "counter": {
313
+ "label": "计数器",
314
+ "increment": "增加"
315
+ }
316
+ }
317
+ ```
318
+
319
+ ```json fileName="src/locales/fr/about.json"
320
+ {
321
+ "title": "À propos",
322
+ "description": "Description de la page À propos",
323
+ "counter": {
324
+ "label": "Compteur",
325
+ "increment": "Incrémenter"
326
+ }
327
+ }
328
+ ```
329
+
330
+ 客户端组件(仅加载所需的命名空间):
331
+
332
+ ```tsx fileName="src/components/ClientComponent.tsx"
333
+ "use client";
334
+
335
+ import React, { useState } from "react";
336
+ import { useTranslation } from "react-i18next";
337
+
338
+ const ClientComponent = () => {
339
+ const { t, i18n } = useTranslation("about");
340
+ const [count, setCount] = useState(0);
341
+
342
+ const numberFormat = new Intl.NumberFormat(i18n.language);
343
+
344
+ return (
345
+ <div>
346
+ <p>{numberFormat.format(count)}</p>
347
+ <button
348
+ aria-label={t("counter.label")}
349
+ onClick={() => setCount((c) => c + 1)}
350
+ >
351
+ {t("counter.increment")}
352
+ </button>
353
+ </div>
354
+ );
355
+ };
356
+
357
+ export default ClientComponent;
358
+ ```
359
+
360
+ > 确保页面/提供者只包含你需要的命名空间(例如,`about`)。
361
+ > 如果你使用的是 React 版本低于 19,建议对像 `Intl.NumberFormat` 这样开销较大的格式化器进行缓存。
362
+
363
+ 嵌套在客户端边界下的同步服务器组件:
364
+
365
+ ```tsx fileName="src/components/ServerComponent.tsx"
366
+ type ServerComponentProps = {
367
+ t: (key: string) => string; // 翻译函数
368
+ locale: string; // 当前语言环境
369
+ count: number; // 计数值
370
+ };
371
+
372
+ const ServerComponent = ({ t, locale, count }: ServerComponentProps) => {
373
+ const formatted = new Intl.NumberFormat(locale).format(count);
374
+
375
+ return (
376
+ <div>
377
+ <p>{formatted}</p>
378
+ <button aria-label={t("counter.label")}>{t("counter.increment")}</button>
379
+ </div>
380
+ );
381
+ };
382
+
383
+ export default ServerComponent;
384
+ ```
385
+
386
+ ---
387
+
388
+ ## 8) SEO:元数据,Hreflang,站点地图,Robots
389
+
390
+ 翻译内容是提升覆盖范围的一种手段。请彻底配置多语言SEO。
391
+
392
+ 最佳实践:
393
+
394
+ - 在根节点设置 `lang` 和 `dir`
395
+ - 为每个语言添加 `alternates.languages`(加上 `x-default`)
396
+ - 在 `sitemap.xml` 中列出翻译后的URL并使用 `hreflang`
397
+ - 在 `robots.txt` 中排除本地化的私有区域(例如 `/fr/admin`)
398
+
399
+ ```tsx fileName="src/app/[locale]/about/layout.tsx"
400
+ import type { Metadata } from "next";
401
+ import { locales, defaultLocale, localizedPath } from "@/i18n.config";
402
+
403
+ export async function generateMetadata({
404
+ params,
405
+ }: {
406
+ params: { locale: string };
407
+ }): Promise<Metadata> {
408
+ const { locale } = params;
409
+
410
+ // 从 src/locales 导入正确的 JSON 包
411
+ const messages = (await import("@/locales/" + locale + "/about.json"))
412
+ .default;
413
+
414
+ const languages = Object.fromEntries(
415
+ locales.map((locale) => [locale, localizedPath(locale, "/about")])
416
+ );
417
+
418
+ return {
419
+ title: messages.title,
420
+ description: messages.description,
421
+ alternates: {
422
+ canonical: localizedPath(locale, "/about"),
423
+ languages: { ...languages, "x-default": "/about" },
424
+ },
425
+ };
426
+ }
427
+
428
+ export default async function AboutPage() {
429
+ return <h1>关于</h1>;
430
+ }
431
+ ```
432
+
433
+ ```ts fileName="src/app/sitemap.ts"
434
+ import type { MetadataRoute } from "next";
435
+ import { locales, defaultLocale, abs } from "@/i18n.config";
436
+
437
+ export default function sitemap(): MetadataRoute.Sitemap {
438
+ const languages = Object.fromEntries(
439
+ locales.map((locale) => [locale, abs(locale, "/about")])
440
+ );
441
+
442
+ return [
443
+ {
444
+ url: abs(defaultLocale, "/about"),
445
+ lastModified: new Date(),
446
+ changeFrequency: "monthly",
447
+ priority: 0.7,
448
+ alternates: { languages },
449
+ },
450
+ ];
451
+ }
452
+ ```
453
+
454
+ ```ts fileName="src/app/robots.ts"
455
+ import type { MetadataRoute } from "next";
456
+ import { locales, defaultLocale, localizedPath } from "@/i18n.config";
457
+
458
+ const ORIGIN = "https://example.com";
459
+
460
+ const expandAllLocales = (path: string) => [
461
+ localizedPath(defaultLocale, path),
462
+ ...locales
463
+ .filter((locale) => locale !== defaultLocale)
464
+ .map((locale) => localizedPath(locale, path)),
465
+ ];
466
+
467
+ export default function robots(): MetadataRoute.Robots {
468
+ const disallow = [
469
+ ...expandAllLocales("/dashboard"),
470
+ ...expandAllLocales("/admin"),
471
+ ];
472
+
473
+ return {
474
+ rules: { userAgent: "*", allow: ["/"], disallow },
475
+ host: ORIGIN,
476
+ sitemap: ORIGIN + "/sitemap.xml",
477
+ };
478
+ }
479
+ ```
480
+
481
+ ---
482
+
483
+ ## 9) 用于本地化路由的中间件
484
+
485
+ 检测语言环境,如果缺失则重定向到本地化路由。
486
+
487
+ ```ts fileName="src/middleware.ts"
488
+ import { NextResponse, type NextRequest } from "next/server";
489
+ import { defaultLocale, locales } from "@/i18n.config";
490
+
491
+ const PUBLIC_FILE = /\.[^/]+$/; // 排除带扩展名的文件
492
+
493
+ export function middleware(request: NextRequest) {
494
+ const { pathname } = request.nextUrl;
495
+
496
+ if (
497
+ pathname.startsWith("/_next") ||
498
+ pathname.startsWith("/api") ||
499
+ pathname.startsWith("/static") ||
500
+ PUBLIC_FILE.test(pathname)
501
+ ) {
502
+ return;
503
+ }
504
+
505
+ const hasLocale = locales.some(
506
+ (locale) =>
507
+ pathname === "/" + locale || pathname.startsWith("/" + locale + "/")
508
+ );
509
+ if (!hasLocale) {
510
+ const locale = defaultLocale;
511
+ const url = request.nextUrl.clone();
512
+ url.pathname = "/" + locale + (pathname === "/" ? "" : pathname);
513
+ return NextResponse.redirect(url);
514
+ }
515
+ }
516
+
517
+ export const config = {
518
+ matcher: [
519
+ // 匹配所有路径,除了以这些开头的路径和带有扩展名的文件
520
+ "/((?!api|_next|static|.*\\..*).*)",
521
+ ],
522
+ };
523
+ ```
524
+
525
+ ---
526
+
527
+ ## 10) 性能和开发体验最佳实践
528
+
529
+ - **设置 html 的 `lang` 和 `dir` 属性**:已在 `src/app/[locale]/layout.tsx` 中完成。
530
+ - **按命名空间拆分消息**:保持包体积小(如 `common.json`、`about.json` 等)。
531
+ - **最小化客户端负载**:在页面中只向 provider 传递所需的命名空间。
532
+ - **优先使用静态页面**:针对每个 locale 使用 `export const dynamic = 'force-static'` 和 `generateStaticParams`。
533
+ - **同步服务器组件**:传递预计算的字符串/格式,而不是在渲染时进行异步调用。
534
+ - **对重操作进行记忆化**:尤其是在旧版本 React 的客户端代码中。
535
+ - **缓存和头部设置**:尽可能优先使用静态或 `revalidate`,而非动态渲染。
536
+
537
+ ---
538
+
539
+ ## 11) 测试和持续集成(CI)
540
+
541
+ - 为使用 `t` 的组件添加单元测试,确保键存在。
542
+ - 验证每个命名空间在所有语言环境中具有相同的键。
543
+ - 在 CI 过程中部署前显示缺失的键。
544
+
545
+ Intlayer 将自动化完成大部分这些工作(见下一节)。
546
+
547
+ ---
548
+
549
+ ## 12) 在顶部添加 Intlayer(自动化)
550
+
551
+ Intlayer 帮助你保持 JSON 翻译同步,测试缺失的键,并在需要时使用 AI 填充。
552
+
553
+ 安装 intlayer 依赖:
554
+
555
+ ```bash packageManager="npm"
556
+ npm install intlayer @intlayer/sync-json-plugin -D
557
+ ```
558
+
559
+ ```bash packageManager="pnpm"
560
+ pnpm add intlayer @intlayer/sync-json-plugin -D
561
+ ```
562
+
563
+ ```bash packageManager="yarn"
564
+ yarn add intlayer @intlayer/sync-json-plugin -D
565
+ ```
566
+
567
+ ```ts fileName="intlayer.config.ts"
568
+ import { type IntlayerConfig, Locales } from "intlayer";
569
+ import { locales, defaultLocale } from "@/i18n";
570
+ import { syncJSON } from "@intlayer/sync-json";
571
+
572
+ export const locales = [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH];
573
+
574
+ const config: IntlayerConfig = {
575
+ internationalization: {
576
+ locales,
577
+ defaultLocale,
578
+ },
579
+ ai: {
580
+ apiKey: process.env.OPENAI_API_KEY,
581
+ },
582
+ plugins: [
583
+ syncJSON({
584
+ source: ({ locale }) => `./locales/${locale}.json`,
585
+ }),
586
+ ],
587
+ };
588
+
589
+ export default config;
590
+ ```
591
+
592
+ 添加 package 脚本:
593
+
594
+ ```json fileName="package.json"
595
+ {
596
+ "scripts": {
597
+ "i18n:fill": "intlayer fill",
598
+ "i18n:test": "intlayer test"
599
+ }
600
+ }
601
+ ```
602
+
603
+ 常见流程:
604
+
605
+ - 在 CI 中运行 `pnpm i18n:test`,以在缺少键时使构建失败
606
+ - 在本地运行 `pnpm i18n:fill`,为新添加的键提供 AI 翻译建议
607
+
608
+ > 你可以提供 CLI 参数;请参阅[Intlayer CLI 文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_cli.md)。
609
+
610
+ ---
611
+
612
+ ## 13) 故障排除
613
+
614
+ - **找不到键**:确保页面/提供者列出了正确的命名空间,并且 JSON 文件存在于 `src/locales/<locale>/<namespace>.json` 目录下。
615
+ - **语言错误/闪现英文**:仔细检查 `middleware.ts` 中的语言环境检测以及提供者的 `lng` 设置。
616
+ - **RTL 布局问题**:确认 `dir` 是由 `isRtl(locale)` 得出,并且你的 CSS 支持 `[dir="rtl"]`。
617
+ - **SEO 替代语言缺失**:确认 `alternates.languages` 包含所有语言环境和 `x-default`。
618
+ - **包体积过大**:进一步拆分命名空间,避免在客户端导入整个 `locales` 目录树。
619
+
620
+ ---
621
+
622
+ ## 14) 接下来做什么
623
+
624
+ - 随着功能的增长,添加更多的语言环境和命名空间
625
+ - 本地化错误页面、电子邮件和基于 API 的内容
626
+ - 扩展 Intlayer 工作流,实现自动打开翻译更新的 PR
627
+
628
+ 如果您需要一个入门模板,可以尝试:`https://github.com/aymericzip/intlayer-next-i18next-template`。