@intlayer/docs 7.0.6 → 7.0.8-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (726) hide show
  1. package/blog/ar/i18n_using_next-i18next.md +1068 -0
  2. package/blog/ar/i18n_using_next-intl.md +768 -0
  3. package/blog/ar/intlayer_with_react-intl.md +0 -4
  4. package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +5 -4
  5. package/blog/de/i18n_using_next-i18next.md +1107 -0
  6. package/blog/de/i18n_using_next-intl.md +760 -0
  7. package/blog/de/intlayer_with_react-intl.md +0 -4
  8. package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  9. package/blog/en/i18n_using_next-i18next.md +1073 -0
  10. package/blog/en/i18n_using_next-intl.md +757 -0
  11. package/blog/en/intlayer_with_i18next.md +71 -8
  12. package/blog/en/intlayer_with_next-i18next.md +71 -8
  13. package/blog/en/intlayer_with_next-intl.md +71 -8
  14. package/blog/en/intlayer_with_react-i18next.md +69 -8
  15. package/blog/en/intlayer_with_react-intl.md +68 -9
  16. package/blog/en/intlayer_with_vue-i18n.md +68 -7
  17. package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
  18. package/blog/en/vue-i18n_vs_intlayer.md +2 -0
  19. package/blog/en-GB/i18n_using_next-i18next.md +1074 -0
  20. package/blog/en-GB/i18n_using_next-intl.md +757 -0
  21. package/blog/en-GB/intlayer_with_i18next.md +15 -6
  22. package/blog/en-GB/intlayer_with_next-i18next.md +16 -6
  23. package/blog/en-GB/intlayer_with_next-intl.md +16 -6
  24. package/blog/en-GB/intlayer_with_react-i18next.md +16 -7
  25. package/blog/en-GB/intlayer_with_react-intl.md +14 -9
  26. package/blog/en-GB/intlayer_with_vue-i18n.md +16 -7
  27. package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  28. package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
  29. package/blog/en-GB/vue-i18n_vs_intlayer.md +2 -0
  30. package/blog/es/i18n_using_next-i18next.md +1066 -0
  31. package/blog/es/i18n_using_next-intl.md +757 -0
  32. package/blog/es/intlayer_with_react-intl.md +0 -4
  33. package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  34. package/blog/fr/i18n_using_next-i18next.md +1078 -0
  35. package/blog/fr/i18n_using_next-intl.md +759 -0
  36. package/blog/fr/intlayer_with_react-intl.md +0 -4
  37. package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  38. package/blog/hi/i18n_using_next-i18next.md +1068 -0
  39. package/blog/hi/i18n_using_next-intl.md +758 -0
  40. package/blog/hi/intlayer_with_react-intl.md +0 -4
  41. package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  42. package/blog/id/i18n_using_next-i18next.md +1078 -0
  43. package/blog/id/i18n_using_next-intl.md +757 -0
  44. package/blog/id/index.md +69 -0
  45. package/blog/id/internationalization_and_SEO.md +364 -0
  46. package/blog/id/intlayer_with_react-intl.md +0 -4
  47. package/blog/id/list_i18n_technologies/CMS/drupal.md +143 -0
  48. package/blog/id/list_i18n_technologies/CMS/wix.md +167 -0
  49. package/blog/id/list_i18n_technologies/CMS/wordpress.md +188 -0
  50. package/blog/id/list_i18n_technologies/frameworks/angular.md +125 -0
  51. package/blog/id/list_i18n_technologies/frameworks/flutter.md +150 -0
  52. package/blog/id/list_i18n_technologies/frameworks/react-native.md +217 -0
  53. package/blog/id/list_i18n_technologies/frameworks/react.md +155 -0
  54. package/blog/id/list_i18n_technologies/frameworks/svelte.md +131 -0
  55. package/blog/id/list_i18n_technologies/frameworks/vue.md +130 -0
  56. package/blog/id/next-i18next_vs_next-intl_vs_intlayer.md +1500 -0
  57. package/blog/id/nextjs-multilingual-seo-comparison.md +361 -0
  58. package/blog/id/rag_powered_documentation_assistant.md +288 -0
  59. package/blog/id/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
  60. package/blog/id/vue-i18n_vs_intlayer.md +278 -0
  61. package/blog/id/what_is_internationalization.md +166 -0
  62. package/blog/it/i18n_using_next-i18next.md +1078 -0
  63. package/blog/it/i18n_using_next-intl.md +758 -0
  64. package/blog/it/intlayer_with_react-intl.md +0 -4
  65. package/blog/it/react-i18next_vs_react-intl_vs_intlayer.md +4 -0
  66. package/blog/it/vue-i18n_vs_intlayer.md +2 -0
  67. package/blog/ja/i18n_using_next-i18next.md +1078 -0
  68. package/blog/ja/i18n_using_next-intl.md +758 -0
  69. package/blog/ja/intlayer_with_react-intl.md +0 -4
  70. package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  71. package/blog/ko/i18n_using_next-i18next.md +1075 -0
  72. package/blog/ko/i18n_using_next-intl.md +759 -0
  73. package/blog/ko/intlayer_with_react-intl.md +0 -4
  74. package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  75. package/blog/pl/i18n_using_next-i18next.md +1078 -0
  76. package/blog/pl/i18n_using_next-intl.md +758 -0
  77. package/blog/pl/index.md +69 -0
  78. package/blog/pl/internationalization_and_SEO.md +363 -0
  79. package/blog/pl/intlayer_with_react-intl.md +0 -4
  80. package/blog/pl/list_i18n_technologies/CMS/drupal.md +143 -0
  81. package/blog/pl/list_i18n_technologies/CMS/wix.md +167 -0
  82. package/blog/pl/list_i18n_technologies/CMS/wordpress.md +196 -0
  83. package/blog/pl/list_i18n_technologies/frameworks/angular.md +125 -0
  84. package/blog/pl/list_i18n_technologies/frameworks/flutter.md +151 -0
  85. package/blog/pl/list_i18n_technologies/frameworks/react-native.md +217 -0
  86. package/blog/pl/list_i18n_technologies/frameworks/react.md +155 -0
  87. package/blog/pl/list_i18n_technologies/frameworks/svelte.md +131 -0
  88. package/blog/pl/list_i18n_technologies/frameworks/vue.md +130 -0
  89. package/blog/pl/next-i18next_vs_next-intl_vs_intlayer.md +1501 -0
  90. package/blog/pl/nextjs-multilingual-seo-comparison.md +362 -0
  91. package/blog/pl/rag_powered_documentation_assistant.md +288 -0
  92. package/blog/pl/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
  93. package/blog/pl/vue-i18n_vs_intlayer.md +278 -0
  94. package/blog/pl/what_is_internationalization.md +167 -0
  95. package/blog/pt/i18n_using_next-i18next.md +1067 -0
  96. package/blog/pt/i18n_using_next-intl.md +760 -0
  97. package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  98. package/blog/ru/i18n_using_next-i18next.md +1106 -0
  99. package/blog/ru/i18n_using_next-intl.md +759 -0
  100. package/blog/ru/intlayer_with_react-intl.md +0 -4
  101. package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  102. package/blog/tr/i18n_using_next-i18next.md +1078 -0
  103. package/blog/tr/i18n_using_next-intl.md +760 -0
  104. package/blog/tr/intlayer_with_react-intl.md +0 -4
  105. package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  106. package/blog/tr/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
  107. package/blog/tr/vue-i18n_vs_intlayer.md +2 -0
  108. package/blog/vi/i18n_using_next-i18next.md +1080 -0
  109. package/blog/vi/i18n_using_next-intl.md +758 -0
  110. package/blog/vi/index.md +69 -0
  111. package/blog/vi/internationalization_and_SEO.md +363 -0
  112. package/blog/vi/intlayer_with_react-intl.md +0 -4
  113. package/blog/vi/list_i18n_technologies/CMS/drupal.md +143 -0
  114. package/blog/vi/list_i18n_technologies/CMS/wix.md +167 -0
  115. package/blog/vi/list_i18n_technologies/CMS/wordpress.md +188 -0
  116. package/blog/vi/list_i18n_technologies/frameworks/angular.md +125 -0
  117. package/blog/vi/list_i18n_technologies/frameworks/flutter.md +150 -0
  118. package/blog/vi/list_i18n_technologies/frameworks/react-native.md +217 -0
  119. package/blog/vi/list_i18n_technologies/frameworks/react.md +155 -0
  120. package/blog/vi/list_i18n_technologies/frameworks/svelte.md +131 -0
  121. package/blog/vi/list_i18n_technologies/frameworks/vue.md +130 -0
  122. package/blog/vi/next-i18next_vs_next-intl_vs_intlayer.md +1520 -0
  123. package/blog/vi/nextjs-multilingual-seo-comparison.md +362 -0
  124. package/blog/vi/rag_powered_documentation_assistant.md +288 -0
  125. package/blog/vi/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
  126. package/blog/vi/vue-i18n_vs_intlayer.md +278 -0
  127. package/blog/vi/what_is_internationalization.md +168 -0
  128. package/blog/zh/i18n_using_next-i18next.md +1105 -0
  129. package/blog/zh/i18n_using_next-intl.md +758 -0
  130. package/blog/zh/intlayer_with_react-intl.md +0 -4
  131. package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  132. package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
  133. package/dist/cjs/common.cjs +0 -4
  134. package/dist/cjs/common.cjs.map +1 -1
  135. package/dist/cjs/generated/blog.entry.cjs +38 -6
  136. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  137. package/dist/cjs/generated/docs.entry.cjs +0 -6
  138. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  139. package/dist/cjs/generated/frequentQuestions.entry.cjs +0 -6
  140. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  141. package/dist/cjs/generated/legal.entry.cjs +0 -6
  142. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  143. package/dist/esm/generated/blog.entry.mjs +38 -0
  144. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  145. package/dist/types/generated/blog.entry.d.ts +2 -0
  146. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  147. package/docs/ar/component_i18n.md +1 -1
  148. package/docs/ar/configuration.md +6 -0
  149. package/docs/ar/intlayer_cli.md +8 -3
  150. package/docs/ar/intlayer_with_next-i18next.md +619 -0
  151. package/docs/ar/intlayer_with_next-intl.md +446 -0
  152. package/docs/ar/intlayer_with_nextjs_16.md +21 -0
  153. package/docs/ar/intlayer_with_tanstack.md +4 -0
  154. package/docs/ar/intlayer_with_vite+react.md +4 -0
  155. package/docs/de/component_i18n.md +1 -1
  156. package/docs/de/configuration.md +6 -0
  157. package/docs/de/intlayer_cli.md +8 -3
  158. package/docs/de/intlayer_with_next-i18next.md +627 -0
  159. package/docs/de/intlayer_with_next-intl.md +451 -0
  160. package/docs/de/intlayer_with_nextjs_16.md +21 -0
  161. package/docs/de/intlayer_with_tanstack.md +4 -0
  162. package/docs/de/intlayer_with_vite+react.md +4 -0
  163. package/docs/en/component_i18n.md +1 -1
  164. package/docs/en/intlayer_cli.md +8 -1
  165. package/docs/en/intlayer_with_astro.md +10 -2
  166. package/docs/en/intlayer_with_create_react_app.md +8 -0
  167. package/docs/en/intlayer_with_lynx+react.md +8 -0
  168. package/docs/en/intlayer_with_nestjs.md +10 -0
  169. package/docs/en/intlayer_with_nextjs_14.md +10 -2
  170. package/docs/en/intlayer_with_nextjs_15.md +21 -4
  171. package/docs/en/intlayer_with_nextjs_16.md +17 -0
  172. package/docs/en/intlayer_with_nuxt.md +8 -0
  173. package/docs/en/intlayer_with_react_native+expo.md +10 -2
  174. package/docs/en/intlayer_with_react_router_v7.md +8 -0
  175. package/docs/en/intlayer_with_tanstack.md +10 -0
  176. package/docs/en/intlayer_with_vite+preact.md +10 -2
  177. package/docs/en/intlayer_with_vite+react.md +21 -4
  178. package/docs/en/intlayer_with_vite+vue.md +10 -2
  179. package/docs/en-GB/component_i18n.md +1 -1
  180. package/docs/en-GB/configuration.md +6 -0
  181. package/docs/en-GB/intlayer_cli.md +8 -3
  182. package/docs/en-GB/intlayer_with_angular.md +4 -4
  183. package/docs/en-GB/intlayer_with_express.md +4 -4
  184. package/docs/en-GB/intlayer_with_lynx+react.md +12 -12
  185. package/{blog/en/_intlayer_with_next-i18next.md → docs/en-GB/intlayer_with_next-i18next.md} +241 -42
  186. package/{blog/en/_intlayer_with_next-intl.md → docs/en-GB/intlayer_with_next-intl.md} +144 -29
  187. package/docs/en-GB/intlayer_with_nextjs_16.md +21 -0
  188. package/docs/en-GB/intlayer_with_tanstack.md +5 -1
  189. package/docs/en-GB/intlayer_with_vite+react.md +4 -0
  190. package/docs/en-GB/packages/next-intlayer/t.md +2 -2
  191. package/docs/es/component_i18n.md +1 -1
  192. package/docs/es/configuration.md +6 -0
  193. package/docs/es/intlayer_cli.md +8 -3
  194. package/docs/es/intlayer_with_next-i18next.md +628 -0
  195. package/docs/es/intlayer_with_next-intl.md +446 -0
  196. package/docs/es/intlayer_with_nextjs_16.md +21 -0
  197. package/docs/es/intlayer_with_tanstack.md +4 -0
  198. package/docs/es/intlayer_with_vite+react.md +4 -0
  199. package/docs/fr/configuration.md +6 -0
  200. package/docs/fr/intlayer_cli.md +8 -3
  201. package/docs/fr/intlayer_with_next-i18next.md +628 -0
  202. package/docs/fr/intlayer_with_next-intl.md +446 -0
  203. package/docs/fr/intlayer_with_nextjs_16.md +23 -2
  204. package/docs/fr/intlayer_with_tanstack.md +4 -0
  205. package/docs/fr/intlayer_with_vite+react.md +4 -0
  206. package/docs/hi/component_i18n.md +1 -1
  207. package/docs/hi/configuration.md +6 -0
  208. package/docs/hi/intlayer_cli.md +8 -0
  209. package/docs/hi/intlayer_with_next-i18next.md +628 -0
  210. package/docs/hi/intlayer_with_next-intl.md +446 -0
  211. package/docs/hi/intlayer_with_nextjs_16.md +21 -0
  212. package/docs/hi/intlayer_with_tanstack.md +4 -0
  213. package/docs/hi/intlayer_with_vite+react.md +4 -0
  214. package/docs/id/CI_CD.md +198 -0
  215. package/docs/id/autoFill.md +284 -0
  216. package/docs/id/component_i18n.md +186 -0
  217. package/docs/id/configuration.md +710 -0
  218. package/docs/id/dictionary/condition.md +231 -0
  219. package/docs/id/dictionary/content_file.md +1092 -0
  220. package/docs/id/dictionary/enumeration.md +245 -0
  221. package/docs/id/dictionary/file.md +237 -0
  222. package/docs/id/dictionary/function_fetching.md +214 -0
  223. package/docs/id/dictionary/gender.md +273 -0
  224. package/docs/id/dictionary/insertion.md +192 -0
  225. package/docs/id/dictionary/markdown.md +381 -0
  226. package/docs/id/dictionary/nesting.md +273 -0
  227. package/docs/id/dictionary/translation.md +310 -0
  228. package/docs/id/formatters.md +596 -0
  229. package/docs/id/how_works_intlayer.md +256 -0
  230. package/docs/id/index.md +176 -0
  231. package/docs/id/interest_of_intlayer.md +293 -0
  232. package/docs/id/intlayer_CMS.md +549 -0
  233. package/docs/id/intlayer_cli.md +850 -0
  234. package/docs/id/intlayer_visual_editor.md +288 -0
  235. package/docs/id/intlayer_with_angular.md +694 -0
  236. package/docs/id/intlayer_with_astro.md +252 -0
  237. package/docs/id/intlayer_with_create_react_app.md +1233 -0
  238. package/docs/id/intlayer_with_express.md +411 -0
  239. package/docs/id/intlayer_with_lynx+react.md +518 -0
  240. package/docs/id/intlayer_with_nestjs.md +272 -0
  241. package/docs/id/intlayer_with_next-i18next.md +628 -0
  242. package/docs/id/intlayer_with_next-intl.md +446 -0
  243. package/docs/id/intlayer_with_nextjs_14.md +1617 -0
  244. package/docs/id/intlayer_with_nextjs_15.md +1698 -0
  245. package/docs/id/intlayer_with_nextjs_16.md +21 -0
  246. package/docs/id/intlayer_with_nextjs_page_router.md +1478 -0
  247. package/docs/id/intlayer_with_nuxt.md +808 -0
  248. package/docs/id/intlayer_with_react_native+expo.md +699 -0
  249. package/docs/id/intlayer_with_react_router_v7.md +496 -0
  250. package/docs/id/intlayer_with_tanstack.md +564 -0
  251. package/docs/id/intlayer_with_vite+preact.md +1737 -0
  252. package/docs/id/intlayer_with_vite+react.md +1413 -0
  253. package/docs/id/intlayer_with_vite+solid.md +289 -0
  254. package/docs/id/intlayer_with_vite+svelte.md +289 -0
  255. package/docs/id/intlayer_with_vite+vue.md +1088 -0
  256. package/docs/id/introduction.md +218 -0
  257. package/docs/id/locale_mapper.md +242 -0
  258. package/docs/id/mcp_server.md +211 -0
  259. package/docs/id/packages/express-intlayer/t.md +458 -0
  260. package/docs/id/packages/intlayer/getConfiguration.md +145 -0
  261. package/docs/id/packages/intlayer/getEnumeration.md +159 -0
  262. package/docs/id/packages/intlayer/getHTMLTextDir.md +122 -0
  263. package/docs/id/packages/intlayer/getLocaleLang.md +81 -0
  264. package/docs/id/packages/intlayer/getLocaleName.md +119 -0
  265. package/docs/id/packages/intlayer/getLocalizedUrl.md +309 -0
  266. package/docs/id/packages/intlayer/getMultilingualUrls.md +223 -0
  267. package/docs/id/packages/intlayer/getPathWithoutLocale.md +75 -0
  268. package/docs/id/packages/intlayer/getTranslation.md +190 -0
  269. package/docs/id/packages/intlayer/getTranslationContent.md +188 -0
  270. package/docs/id/packages/next-intlayer/t.md +352 -0
  271. package/docs/id/packages/next-intlayer/useDictionary.md +271 -0
  272. package/docs/id/packages/next-intlayer/useIntlayer.md +264 -0
  273. package/docs/id/packages/next-intlayer/useLocale.md +166 -0
  274. package/docs/id/packages/react-intlayer/t.md +303 -0
  275. package/docs/id/packages/react-intlayer/useDictionary.md +287 -0
  276. package/docs/id/packages/react-intlayer/useI18n.md +267 -0
  277. package/docs/id/packages/react-intlayer/useIntlayer.md +254 -0
  278. package/docs/id/packages/react-intlayer/useLocale.md +210 -0
  279. package/docs/id/per_locale_file.md +323 -0
  280. package/docs/id/readme.md +261 -0
  281. package/docs/id/releases/v6.md +305 -0
  282. package/docs/id/roadmap.md +362 -0
  283. package/docs/id/testing.md +202 -0
  284. package/docs/id/vs_code_extension.md +126 -0
  285. package/docs/it/component_i18n.md +1 -1
  286. package/docs/it/configuration.md +6 -0
  287. package/docs/it/intlayer_cli.md +8 -3
  288. package/docs/it/intlayer_with_next-i18next.md +628 -0
  289. package/docs/it/intlayer_with_next-intl.md +446 -0
  290. package/docs/it/intlayer_with_nextjs_16.md +21 -0
  291. package/docs/it/intlayer_with_tanstack.md +4 -0
  292. package/docs/it/intlayer_with_vite+react.md +4 -0
  293. package/docs/ja/component_i18n.md +1 -1
  294. package/docs/ja/configuration.md +6 -0
  295. package/docs/ja/intlayer_cli.md +8 -3
  296. package/docs/ja/intlayer_with_next-i18next.md +627 -0
  297. package/docs/ja/intlayer_with_next-intl.md +446 -0
  298. package/docs/ja/intlayer_with_nextjs_16.md +21 -0
  299. package/docs/ja/intlayer_with_tanstack.md +4 -0
  300. package/docs/ja/intlayer_with_vite+react.md +4 -0
  301. package/docs/ko/configuration.md +6 -0
  302. package/docs/ko/intlayer_cli.md +8 -3
  303. package/docs/ko/intlayer_with_next-i18next.md +627 -0
  304. package/docs/ko/intlayer_with_next-intl.md +446 -0
  305. package/docs/ko/intlayer_with_nextjs_16.md +21 -0
  306. package/docs/ko/intlayer_with_tanstack.md +4 -0
  307. package/docs/ko/intlayer_with_vite+react.md +4 -0
  308. package/docs/pl/CI_CD.md +198 -0
  309. package/docs/pl/autoFill.md +284 -0
  310. package/docs/pl/component_i18n.md +186 -0
  311. package/docs/pl/configuration.md +710 -0
  312. package/docs/pl/dictionary/condition.md +232 -0
  313. package/docs/pl/dictionary/content_file.md +1130 -0
  314. package/docs/pl/dictionary/enumeration.md +245 -0
  315. package/docs/pl/dictionary/file.md +234 -0
  316. package/docs/pl/dictionary/function_fetching.md +214 -0
  317. package/docs/pl/dictionary/gender.md +276 -0
  318. package/docs/pl/dictionary/insertion.md +188 -0
  319. package/docs/pl/dictionary/markdown.md +408 -0
  320. package/docs/pl/dictionary/nesting.md +273 -0
  321. package/docs/pl/dictionary/translation.md +310 -0
  322. package/docs/pl/formatters.md +596 -0
  323. package/docs/pl/how_works_intlayer.md +256 -0
  324. package/docs/pl/index.md +176 -0
  325. package/docs/pl/interest_of_intlayer.md +291 -0
  326. package/docs/pl/intlayer_CMS.md +549 -0
  327. package/docs/pl/intlayer_cli.md +857 -0
  328. package/docs/pl/intlayer_visual_editor.md +288 -0
  329. package/docs/pl/intlayer_with_angular.md +690 -0
  330. package/docs/pl/intlayer_with_astro.md +280 -0
  331. package/docs/pl/intlayer_with_create_react_app.md +1235 -0
  332. package/docs/pl/intlayer_with_express.md +411 -0
  333. package/docs/pl/intlayer_with_lynx+react.md +518 -0
  334. package/docs/pl/intlayer_with_nestjs.md +272 -0
  335. package/docs/pl/intlayer_with_next-i18next.md +628 -0
  336. package/docs/pl/intlayer_with_next-intl.md +446 -0
  337. package/docs/pl/intlayer_with_nextjs_14.md +1594 -0
  338. package/docs/pl/intlayer_with_nextjs_15.md +1701 -0
  339. package/docs/pl/intlayer_with_nextjs_16.md +21 -0
  340. package/docs/pl/intlayer_with_nextjs_page_router.md +1513 -0
  341. package/docs/pl/intlayer_with_nuxt.md +885 -0
  342. package/docs/pl/intlayer_with_react_native+expo.md +698 -0
  343. package/docs/pl/intlayer_with_react_router_v7.md +503 -0
  344. package/docs/pl/intlayer_with_tanstack.md +562 -0
  345. package/docs/pl/intlayer_with_vite+preact.md +1736 -0
  346. package/docs/pl/intlayer_with_vite+react.md +1438 -0
  347. package/docs/pl/intlayer_with_vite+solid.md +290 -0
  348. package/docs/pl/intlayer_with_vite+svelte.md +289 -0
  349. package/docs/pl/intlayer_with_vite+vue.md +1116 -0
  350. package/docs/pl/introduction.md +209 -0
  351. package/docs/pl/locale_mapper.md +242 -0
  352. package/docs/pl/mcp_server.md +211 -0
  353. package/docs/pl/packages/express-intlayer/t.md +458 -0
  354. package/docs/pl/packages/intlayer/getConfiguration.md +146 -0
  355. package/docs/pl/packages/intlayer/getEnumeration.md +160 -0
  356. package/docs/pl/packages/intlayer/getHTMLTextDir.md +121 -0
  357. package/docs/pl/packages/intlayer/getLocaleLang.md +81 -0
  358. package/docs/pl/packages/intlayer/getLocaleName.md +118 -0
  359. package/docs/pl/packages/intlayer/getLocalizedUrl.md +300 -0
  360. package/docs/pl/packages/intlayer/getMultilingualUrls.md +221 -0
  361. package/docs/pl/packages/intlayer/getPathWithoutLocale.md +75 -0
  362. package/docs/pl/packages/intlayer/getTranslation.md +190 -0
  363. package/docs/pl/packages/intlayer/getTranslationContent.md +189 -0
  364. package/docs/pl/packages/next-intlayer/t.md +353 -0
  365. package/docs/pl/packages/next-intlayer/useDictionary.md +270 -0
  366. package/docs/pl/packages/next-intlayer/useIntlayer.md +263 -0
  367. package/docs/pl/packages/next-intlayer/useLocale.md +166 -0
  368. package/docs/pl/packages/react-intlayer/t.md +303 -0
  369. package/docs/pl/packages/react-intlayer/useDictionary.md +289 -0
  370. package/docs/pl/packages/react-intlayer/useI18n.md +249 -0
  371. package/docs/pl/packages/react-intlayer/useIntlayer.md +256 -0
  372. package/docs/pl/packages/react-intlayer/useLocale.md +210 -0
  373. package/docs/pl/per_locale_file.md +321 -0
  374. package/docs/pl/readme.md +261 -0
  375. package/docs/pl/releases/v6.md +305 -0
  376. package/docs/pl/roadmap.md +362 -0
  377. package/docs/pl/testing.md +202 -0
  378. package/docs/pl/vs_code_extension.md +126 -0
  379. package/docs/pt/component_i18n.md +1 -1
  380. package/docs/pt/configuration.md +6 -0
  381. package/docs/pt/intlayer_cli.md +8 -3
  382. package/docs/pt/intlayer_with_next-i18next.md +627 -0
  383. package/docs/pt/intlayer_with_next-intl.md +446 -0
  384. package/docs/pt/intlayer_with_nextjs_16.md +21 -0
  385. package/docs/pt/intlayer_with_tanstack.md +4 -0
  386. package/docs/pt/intlayer_with_vite+react.md +4 -0
  387. package/docs/ru/component_i18n.md +1 -1
  388. package/docs/ru/configuration.md +6 -0
  389. package/docs/ru/intlayer_cli.md +301 -22
  390. package/docs/ru/intlayer_with_next-i18next.md +629 -0
  391. package/docs/ru/intlayer_with_next-intl.md +448 -0
  392. package/docs/ru/intlayer_with_nextjs_16.md +21 -0
  393. package/docs/ru/intlayer_with_tanstack.md +4 -0
  394. package/docs/ru/intlayer_with_vite+react.md +4 -0
  395. package/docs/tr/component_i18n.md +1 -1
  396. package/docs/tr/configuration.md +6 -0
  397. package/docs/tr/intlayer_cli.md +8 -0
  398. package/docs/tr/intlayer_with_next-i18next.md +627 -0
  399. package/docs/tr/intlayer_with_next-intl.md +446 -0
  400. package/docs/tr/intlayer_with_nextjs_16.md +21 -0
  401. package/docs/tr/intlayer_with_tanstack.md +4 -0
  402. package/docs/tr/intlayer_with_vite+react.md +4 -0
  403. package/docs/vi/CI_CD.md +198 -0
  404. package/docs/vi/autoFill.md +284 -0
  405. package/docs/vi/component_i18n.md +186 -0
  406. package/docs/vi/configuration.md +710 -0
  407. package/docs/vi/dictionary/condition.md +237 -0
  408. package/docs/vi/dictionary/content_file.md +1115 -0
  409. package/docs/vi/dictionary/enumeration.md +255 -0
  410. package/docs/vi/dictionary/file.md +234 -0
  411. package/docs/vi/dictionary/function_fetching.md +212 -0
  412. package/docs/vi/dictionary/gender.md +275 -0
  413. package/docs/vi/dictionary/insertion.md +191 -0
  414. package/docs/vi/dictionary/markdown.md +381 -0
  415. package/docs/vi/dictionary/nesting.md +273 -0
  416. package/docs/vi/dictionary/translation.md +309 -0
  417. package/docs/vi/formatters.md +595 -0
  418. package/docs/vi/how_works_intlayer.md +256 -0
  419. package/docs/vi/index.md +174 -0
  420. package/docs/vi/interest_of_intlayer.md +292 -0
  421. package/docs/vi/intlayer_CMS.md +549 -0
  422. package/docs/vi/intlayer_cli.md +850 -0
  423. package/docs/vi/intlayer_visual_editor.md +288 -0
  424. package/docs/vi/intlayer_with_angular.md +692 -0
  425. package/docs/vi/intlayer_with_astro.md +252 -0
  426. package/docs/vi/intlayer_with_create_react_app.md +1230 -0
  427. package/docs/vi/intlayer_with_express.md +409 -0
  428. package/docs/vi/intlayer_with_lynx+react.md +520 -0
  429. package/docs/vi/intlayer_with_nestjs.md +272 -0
  430. package/docs/vi/intlayer_with_next-i18next.md +628 -0
  431. package/docs/vi/intlayer_with_next-intl.md +446 -0
  432. package/docs/vi/intlayer_with_nextjs_14.md +1584 -0
  433. package/docs/vi/intlayer_with_nextjs_15.md +1738 -0
  434. package/docs/vi/intlayer_with_nextjs_16.md +21 -0
  435. package/docs/vi/intlayer_with_nextjs_page_router.md +1504 -0
  436. package/docs/vi/intlayer_with_nuxt.md +821 -0
  437. package/docs/vi/intlayer_with_react_native+expo.md +700 -0
  438. package/docs/vi/intlayer_with_react_router_v7.md +498 -0
  439. package/docs/vi/intlayer_with_tanstack.md +562 -0
  440. package/docs/vi/intlayer_with_vite+preact.md +1722 -0
  441. package/docs/vi/intlayer_with_vite+react.md +1407 -0
  442. package/docs/vi/intlayer_with_vite+solid.md +287 -0
  443. package/docs/vi/intlayer_with_vite+svelte.md +289 -0
  444. package/docs/vi/intlayer_with_vite+vue.md +1071 -0
  445. package/docs/vi/introduction.md +215 -0
  446. package/docs/vi/locale_mapper.md +242 -0
  447. package/docs/vi/mcp_server.md +211 -0
  448. package/docs/vi/packages/express-intlayer/t.md +457 -0
  449. package/docs/vi/packages/intlayer/getConfiguration.md +145 -0
  450. package/docs/vi/packages/intlayer/getEnumeration.md +162 -0
  451. package/docs/vi/packages/intlayer/getHTMLTextDir.md +121 -0
  452. package/docs/vi/packages/intlayer/getLocaleLang.md +81 -0
  453. package/docs/vi/packages/intlayer/getLocaleName.md +129 -0
  454. package/docs/vi/packages/intlayer/getLocalizedUrl.md +309 -0
  455. package/docs/vi/packages/intlayer/getMultilingualUrls.md +221 -0
  456. package/docs/vi/packages/intlayer/getPathWithoutLocale.md +75 -0
  457. package/docs/vi/packages/intlayer/getTranslation.md +201 -0
  458. package/docs/vi/packages/intlayer/getTranslationContent.md +188 -0
  459. package/docs/vi/packages/next-intlayer/t.md +352 -0
  460. package/docs/vi/packages/next-intlayer/useDictionary.md +273 -0
  461. package/docs/vi/packages/next-intlayer/useIntlayer.md +264 -0
  462. package/docs/vi/packages/next-intlayer/useLocale.md +166 -0
  463. package/docs/vi/packages/react-intlayer/t.md +304 -0
  464. package/docs/vi/packages/react-intlayer/useDictionary.md +288 -0
  465. package/docs/vi/packages/react-intlayer/useI18n.md +295 -0
  466. package/docs/vi/packages/react-intlayer/useIntlayer.md +256 -0
  467. package/docs/vi/packages/react-intlayer/useLocale.md +210 -0
  468. package/docs/vi/per_locale_file.md +326 -0
  469. package/docs/vi/readme.md +261 -0
  470. package/docs/vi/releases/v6.md +305 -0
  471. package/docs/vi/roadmap.md +346 -0
  472. package/docs/vi/testing.md +202 -0
  473. package/docs/vi/vs_code_extension.md +126 -0
  474. package/docs/zh/configuration.md +6 -0
  475. package/docs/zh/intlayer_cli.md +8 -3
  476. package/docs/zh/intlayer_with_next-i18next.md +628 -0
  477. package/docs/zh/intlayer_with_next-intl.md +448 -0
  478. package/docs/zh/intlayer_with_nextjs_16.md +21 -0
  479. package/docs/zh/intlayer_with_tanstack.md +4 -0
  480. package/docs/zh/intlayer_with_vite+react.md +4 -0
  481. package/frequent_questions/ar/SSR_Next_no_[locale].md +1 -2
  482. package/frequent_questions/ar/array_as_content_declaration.md +1 -2
  483. package/frequent_questions/ar/build_dictionaries.md +1 -2
  484. package/frequent_questions/ar/build_error_CI_CD.md +1 -2
  485. package/frequent_questions/ar/bun_set_up.md +1 -2
  486. package/frequent_questions/ar/customized_locale_list.md +1 -2
  487. package/frequent_questions/ar/domain_routing.md +1 -2
  488. package/frequent_questions/ar/esbuild_error.md +1 -2
  489. package/frequent_questions/ar/get_locale_cookie.md +1 -2
  490. package/frequent_questions/ar/intlayer_command_undefined.md +1 -2
  491. package/frequent_questions/ar/locale_incorect_in_url.md +1 -2
  492. package/frequent_questions/ar/static_rendering.md +1 -3
  493. package/frequent_questions/ar/translated_path_url.md +1 -2
  494. package/frequent_questions/ar/unknown_command.md +1 -2
  495. package/frequent_questions/de/SSR_Next_no_[locale].md +1 -2
  496. package/frequent_questions/de/array_as_content_declaration.md +1 -2
  497. package/frequent_questions/de/build_dictionaries.md +1 -2
  498. package/frequent_questions/de/build_error_CI_CD.md +1 -2
  499. package/frequent_questions/de/bun_set_up.md +1 -2
  500. package/frequent_questions/de/customized_locale_list.md +1 -2
  501. package/frequent_questions/de/domain_routing.md +1 -2
  502. package/frequent_questions/de/esbuild_error.md +1 -2
  503. package/frequent_questions/de/get_locale_cookie.md +1 -2
  504. package/frequent_questions/de/intlayer_command_undefined.md +1 -2
  505. package/frequent_questions/de/locale_incorect_in_url.md +1 -2
  506. package/frequent_questions/de/static_rendering.md +1 -3
  507. package/frequent_questions/de/translated_path_url.md +1 -2
  508. package/frequent_questions/de/unknown_command.md +1 -2
  509. package/frequent_questions/en/SSR_Next_no_[locale].md +1 -2
  510. package/frequent_questions/en/array_as_content_declaration.md +1 -2
  511. package/frequent_questions/en/build_dictionaries.md +1 -2
  512. package/frequent_questions/en/build_error_CI_CD.md +1 -2
  513. package/frequent_questions/en/bun_set_up.md +1 -2
  514. package/frequent_questions/en/customized_locale_list.md +1 -2
  515. package/frequent_questions/en/domain_routing.md +1 -2
  516. package/frequent_questions/en/esbuild_error.md +1 -2
  517. package/frequent_questions/en/get_locale_cookie.md +1 -2
  518. package/frequent_questions/en/intlayer_command_undefined.md +1 -2
  519. package/frequent_questions/en/locale_incorect_in_url.md +1 -2
  520. package/frequent_questions/en/static_rendering.md +1 -3
  521. package/frequent_questions/en/translated_path_url.md +1 -2
  522. package/frequent_questions/en/unknown_command.md +1 -2
  523. package/frequent_questions/en-GB/SSR_Next_no_[locale].md +1 -2
  524. package/frequent_questions/en-GB/array_as_content_declaration.md +1 -2
  525. package/frequent_questions/en-GB/build_dictionaries.md +1 -2
  526. package/frequent_questions/en-GB/build_error_CI_CD.md +1 -2
  527. package/frequent_questions/en-GB/bun_set_up.md +1 -2
  528. package/frequent_questions/en-GB/customized_locale_list.md +1 -2
  529. package/frequent_questions/en-GB/domain_routing.md +1 -2
  530. package/frequent_questions/en-GB/esbuild_error.md +1 -2
  531. package/frequent_questions/en-GB/get_locale_cookie.md +1 -2
  532. package/frequent_questions/en-GB/intlayer_command_undefined.md +1 -2
  533. package/frequent_questions/en-GB/locale_incorect_in_url.md +1 -2
  534. package/frequent_questions/en-GB/static_rendering.md +1 -3
  535. package/frequent_questions/en-GB/translated_path_url.md +1 -2
  536. package/frequent_questions/en-GB/unknown_command.md +1 -2
  537. package/frequent_questions/es/SSR_Next_no_[locale].md +1 -2
  538. package/frequent_questions/es/array_as_content_declaration.md +1 -2
  539. package/frequent_questions/es/build_dictionaries.md +1 -2
  540. package/frequent_questions/es/build_error_CI_CD.md +1 -2
  541. package/frequent_questions/es/bun_set_up.md +1 -2
  542. package/frequent_questions/es/customized_locale_list.md +1 -2
  543. package/frequent_questions/es/domain_routing.md +1 -2
  544. package/frequent_questions/es/esbuild_error.md +1 -2
  545. package/frequent_questions/es/get_locale_cookie.md +1 -2
  546. package/frequent_questions/es/intlayer_command_undefined.md +1 -2
  547. package/frequent_questions/es/locale_incorect_in_url.md +1 -2
  548. package/frequent_questions/es/static_rendering.md +1 -3
  549. package/frequent_questions/es/translated_path_url.md +1 -2
  550. package/frequent_questions/es/unknown_command.md +1 -2
  551. package/frequent_questions/fr/SSR_Next_no_[locale].md +1 -2
  552. package/frequent_questions/fr/array_as_content_declaration.md +1 -2
  553. package/frequent_questions/fr/build_dictionaries.md +1 -2
  554. package/frequent_questions/fr/build_error_CI_CD.md +1 -2
  555. package/frequent_questions/fr/bun_set_up.md +1 -2
  556. package/frequent_questions/fr/customized_locale_list.md +1 -2
  557. package/frequent_questions/fr/domain_routing.md +1 -2
  558. package/frequent_questions/fr/esbuild_error.md +1 -2
  559. package/frequent_questions/fr/get_locale_cookie.md +1 -2
  560. package/frequent_questions/fr/intlayer_command_undefined.md +1 -2
  561. package/frequent_questions/fr/locale_incorect_in_url.md +1 -2
  562. package/frequent_questions/fr/static_rendering.md +1 -3
  563. package/frequent_questions/fr/translated_path_url.md +1 -2
  564. package/frequent_questions/fr/unknown_command.md +1 -2
  565. package/frequent_questions/hi/SSR_Next_no_[locale].md +1 -2
  566. package/frequent_questions/hi/array_as_content_declaration.md +1 -2
  567. package/frequent_questions/hi/build_dictionaries.md +1 -2
  568. package/frequent_questions/hi/build_error_CI_CD.md +1 -2
  569. package/frequent_questions/hi/bun_set_up.md +1 -2
  570. package/frequent_questions/hi/customized_locale_list.md +1 -2
  571. package/frequent_questions/hi/domain_routing.md +1 -2
  572. package/frequent_questions/hi/esbuild_error.md +1 -2
  573. package/frequent_questions/hi/get_locale_cookie.md +1 -2
  574. package/frequent_questions/hi/intlayer_command_undefined.md +1 -2
  575. package/frequent_questions/hi/locale_incorect_in_url.md +1 -2
  576. package/frequent_questions/hi/static_rendering.md +1 -3
  577. package/frequent_questions/hi/translated_path_url.md +1 -2
  578. package/frequent_questions/hi/unknown_command.md +1 -2
  579. package/frequent_questions/id/SSR_Next_no_[locale].md +104 -0
  580. package/frequent_questions/id/array_as_content_declaration.md +71 -0
  581. package/frequent_questions/id/build_dictionaries.md +58 -0
  582. package/frequent_questions/id/build_error_CI_CD.md +74 -0
  583. package/frequent_questions/id/bun_set_up.md +53 -0
  584. package/frequent_questions/id/customized_locale_list.md +64 -0
  585. package/frequent_questions/id/domain_routing.md +113 -0
  586. package/frequent_questions/id/esbuild_error.md +29 -0
  587. package/frequent_questions/id/get_locale_cookie.md +142 -0
  588. package/frequent_questions/id/intlayer_command_undefined.md +155 -0
  589. package/frequent_questions/id/locale_incorect_in_url.md +73 -0
  590. package/frequent_questions/id/static_rendering.md +44 -0
  591. package/frequent_questions/id/translated_path_url.md +55 -0
  592. package/frequent_questions/id/unknown_command.md +97 -0
  593. package/frequent_questions/it/SSR_Next_no_[locale].md +1 -2
  594. package/frequent_questions/it/array_as_content_declaration.md +1 -2
  595. package/frequent_questions/it/build_dictionaries.md +1 -2
  596. package/frequent_questions/it/build_error_CI_CD.md +1 -2
  597. package/frequent_questions/it/bun_set_up.md +1 -2
  598. package/frequent_questions/it/customized_locale_list.md +1 -2
  599. package/frequent_questions/it/domain_routing.md +1 -2
  600. package/frequent_questions/it/esbuild_error.md +1 -2
  601. package/frequent_questions/it/get_locale_cookie.md +1 -2
  602. package/frequent_questions/it/intlayer_command_undefined.md +1 -2
  603. package/frequent_questions/it/locale_incorect_in_url.md +1 -2
  604. package/frequent_questions/it/static_rendering.md +1 -3
  605. package/frequent_questions/it/translated_path_url.md +1 -2
  606. package/frequent_questions/it/unknown_command.md +1 -2
  607. package/frequent_questions/ja/SSR_Next_no_[locale].md +1 -2
  608. package/frequent_questions/ja/array_as_content_declaration.md +1 -2
  609. package/frequent_questions/ja/build_dictionaries.md +1 -2
  610. package/frequent_questions/ja/build_error_CI_CD.md +1 -2
  611. package/frequent_questions/ja/bun_set_up.md +1 -2
  612. package/frequent_questions/ja/customized_locale_list.md +1 -2
  613. package/frequent_questions/ja/domain_routing.md +1 -2
  614. package/frequent_questions/ja/esbuild_error.md +1 -2
  615. package/frequent_questions/ja/get_locale_cookie.md +1 -2
  616. package/frequent_questions/ja/intlayer_command_undefined.md +1 -2
  617. package/frequent_questions/ja/locale_incorect_in_url.md +1 -2
  618. package/frequent_questions/ja/static_rendering.md +1 -3
  619. package/frequent_questions/ja/translated_path_url.md +1 -2
  620. package/frequent_questions/ja/unknown_command.md +1 -2
  621. package/frequent_questions/ko/SSR_Next_no_[locale].md +1 -2
  622. package/frequent_questions/ko/array_as_content_declaration.md +1 -2
  623. package/frequent_questions/ko/build_dictionaries.md +1 -2
  624. package/frequent_questions/ko/build_error_CI_CD.md +1 -2
  625. package/frequent_questions/ko/bun_set_up.md +1 -2
  626. package/frequent_questions/ko/customized_locale_list.md +1 -2
  627. package/frequent_questions/ko/domain_routing.md +1 -2
  628. package/frequent_questions/ko/esbuild_error.md +1 -2
  629. package/frequent_questions/ko/get_locale_cookie.md +1 -2
  630. package/frequent_questions/ko/intlayer_command_undefined.md +1 -2
  631. package/frequent_questions/ko/locale_incorect_in_url.md +1 -2
  632. package/frequent_questions/ko/static_rendering.md +1 -3
  633. package/frequent_questions/ko/translated_path_url.md +1 -2
  634. package/frequent_questions/ko/unknown_command.md +1 -2
  635. package/frequent_questions/pl/SSR_Next_no_[locale].md +104 -0
  636. package/frequent_questions/pl/array_as_content_declaration.md +71 -0
  637. package/frequent_questions/pl/build_dictionaries.md +58 -0
  638. package/frequent_questions/pl/build_error_CI_CD.md +74 -0
  639. package/frequent_questions/pl/bun_set_up.md +54 -0
  640. package/frequent_questions/pl/customized_locale_list.md +64 -0
  641. package/frequent_questions/pl/domain_routing.md +113 -0
  642. package/frequent_questions/pl/esbuild_error.md +29 -0
  643. package/frequent_questions/pl/get_locale_cookie.md +142 -0
  644. package/frequent_questions/pl/intlayer_command_undefined.md +155 -0
  645. package/frequent_questions/pl/locale_incorect_in_url.md +73 -0
  646. package/frequent_questions/pl/static_rendering.md +44 -0
  647. package/frequent_questions/pl/translated_path_url.md +55 -0
  648. package/frequent_questions/pl/unknown_command.md +97 -0
  649. package/frequent_questions/pt/SSR_Next_no_[locale].md +1 -2
  650. package/frequent_questions/pt/array_as_content_declaration.md +1 -2
  651. package/frequent_questions/pt/build_dictionaries.md +1 -2
  652. package/frequent_questions/pt/build_error_CI_CD.md +1 -2
  653. package/frequent_questions/pt/bun_set_up.md +1 -2
  654. package/frequent_questions/pt/customized_locale_list.md +1 -2
  655. package/frequent_questions/pt/domain_routing.md +1 -2
  656. package/frequent_questions/pt/esbuild_error.md +1 -2
  657. package/frequent_questions/pt/get_locale_cookie.md +1 -2
  658. package/frequent_questions/pt/intlayer_command_undefined.md +1 -2
  659. package/frequent_questions/pt/locale_incorect_in_url.md +1 -2
  660. package/frequent_questions/pt/static_rendering.md +1 -3
  661. package/frequent_questions/pt/translated_path_url.md +1 -2
  662. package/frequent_questions/pt/unknown_command.md +1 -2
  663. package/frequent_questions/ru/SSR_Next_no_[locale].md +1 -2
  664. package/frequent_questions/ru/array_as_content_declaration.md +1 -2
  665. package/frequent_questions/ru/build_dictionaries.md +1 -2
  666. package/frequent_questions/ru/build_error_CI_CD.md +1 -2
  667. package/frequent_questions/ru/bun_set_up.md +1 -2
  668. package/frequent_questions/ru/customized_locale_list.md +1 -2
  669. package/frequent_questions/ru/domain_routing.md +1 -2
  670. package/frequent_questions/ru/esbuild_error.md +1 -2
  671. package/frequent_questions/ru/get_locale_cookie.md +1 -2
  672. package/frequent_questions/ru/intlayer_command_undefined.md +1 -2
  673. package/frequent_questions/ru/locale_incorect_in_url.md +1 -2
  674. package/frequent_questions/ru/static_rendering.md +1 -2
  675. package/frequent_questions/ru/translated_path_url.md +1 -2
  676. package/frequent_questions/ru/unknown_command.md +1 -2
  677. package/frequent_questions/tr/SSR_Next_no_[locale].md +1 -2
  678. package/frequent_questions/tr/array_as_content_declaration.md +1 -2
  679. package/frequent_questions/tr/build_dictionaries.md +1 -2
  680. package/frequent_questions/tr/build_error_CI_CD.md +1 -2
  681. package/frequent_questions/tr/bun_set_up.md +1 -2
  682. package/frequent_questions/tr/customized_locale_list.md +1 -2
  683. package/frequent_questions/tr/domain_routing.md +1 -2
  684. package/frequent_questions/tr/esbuild_error.md +1 -2
  685. package/frequent_questions/tr/get_locale_cookie.md +1 -2
  686. package/frequent_questions/tr/intlayer_command_undefined.md +1 -2
  687. package/frequent_questions/tr/locale_incorect_in_url.md +1 -2
  688. package/frequent_questions/tr/static_rendering.md +1 -2
  689. package/frequent_questions/tr/translated_path_url.md +1 -2
  690. package/frequent_questions/tr/unknown_command.md +1 -2
  691. package/frequent_questions/vi/SSR_Next_no_[locale].md +106 -0
  692. package/frequent_questions/vi/array_as_content_declaration.md +71 -0
  693. package/frequent_questions/vi/build_dictionaries.md +58 -0
  694. package/frequent_questions/vi/build_error_CI_CD.md +74 -0
  695. package/frequent_questions/vi/bun_set_up.md +53 -0
  696. package/frequent_questions/vi/customized_locale_list.md +64 -0
  697. package/frequent_questions/vi/domain_routing.md +113 -0
  698. package/frequent_questions/vi/esbuild_error.md +29 -0
  699. package/frequent_questions/vi/get_locale_cookie.md +142 -0
  700. package/frequent_questions/vi/intlayer_command_undefined.md +155 -0
  701. package/frequent_questions/vi/locale_incorect_in_url.md +73 -0
  702. package/frequent_questions/vi/static_rendering.md +44 -0
  703. package/frequent_questions/vi/translated_path_url.md +55 -0
  704. package/frequent_questions/vi/unknown_command.md +97 -0
  705. package/frequent_questions/zh/SSR_Next_no_[locale].md +1 -2
  706. package/frequent_questions/zh/array_as_content_declaration.md +1 -2
  707. package/frequent_questions/zh/build_dictionaries.md +1 -2
  708. package/frequent_questions/zh/build_error_CI_CD.md +1 -2
  709. package/frequent_questions/zh/bun_set_up.md +1 -2
  710. package/frequent_questions/zh/customized_locale_list.md +1 -2
  711. package/frequent_questions/zh/domain_routing.md +1 -2
  712. package/frequent_questions/zh/esbuild_error.md +1 -2
  713. package/frequent_questions/zh/get_locale_cookie.md +1 -2
  714. package/frequent_questions/zh/intlayer_command_undefined.md +1 -2
  715. package/frequent_questions/zh/locale_incorect_in_url.md +1 -2
  716. package/frequent_questions/zh/static_rendering.md +1 -3
  717. package/frequent_questions/zh/translated_path_url.md +1 -2
  718. package/frequent_questions/zh/unknown_command.md +1 -2
  719. package/legal/id/privacy_notice.md +83 -0
  720. package/legal/id/terms_of_service.md +55 -0
  721. package/legal/pl/privacy_notice.md +83 -0
  722. package/legal/pl/terms_of_service.md +55 -0
  723. package/legal/vi/privacy_notice.md +83 -0
  724. package/legal/vi/terms_of_service.md +55 -0
  725. package/package.json +19 -18
  726. package/src/generated/blog.entry.ts +38 -0
@@ -0,0 +1,361 @@
1
+ ---
2
+ createdAt: 2025-09-28
3
+ updatedAt: 2025-09-28
4
+ title: SEO dan i18n di Next.js
5
+ description: Pelajari cara mengatur SEO multibahasa di aplikasi Next.js Anda menggunakan next-intl, next-i18next, dan Intlayer.
6
+ keywords:
7
+ - Intlayer
8
+ - SEO
9
+ - Internasionalisasi
10
+ - Next.js
11
+ - i18n
12
+ - JavaScript
13
+ - React
14
+ - next-intl
15
+ - next-i18next
16
+ slugs:
17
+ - blog
18
+ - blog-seo-i18n-nextjs
19
+ ---
20
+
21
+ # SEO dan i18n di Next.js: Menerjemahkan saja tidak cukup
22
+
23
+ Ketika pengembang memikirkan internasionalisasi (i18n), refleks pertama sering kali adalah: _menerjemahkan konten_. Namun orang biasanya lupa bahwa tujuan utama internasionalisasi adalah membuat situs web Anda lebih terlihat oleh dunia.
24
+ Jika aplikasi Next.js multibahasa Anda tidak memberi tahu mesin pencari bagaimana cara merayapi dan memahami versi bahasa yang berbeda, sebagian besar upaya Anda mungkin tidak terlihat.
25
+
26
+ Dalam blog ini, kita akan mengeksplorasi **mengapa i18n adalah kekuatan super SEO** dan bagaimana mengimplementasikannya dengan benar di Next.js menggunakan `next-intl`, `next-i18next`, dan `Intlayer`.
27
+
28
+ ---
29
+
30
+ ## Mengapa SEO dan i18n
31
+
32
+ Menambahkan bahasa bukan hanya tentang UX. Ini juga merupakan tuas yang kuat untuk **visibilitas organik**. Berikut alasannya:
33
+
34
+ 1. **Penemuan yang lebih baik:** Mesin pencari mengindeks versi lokal dan memberi peringkat untuk pengguna yang mencari dalam bahasa asli mereka.
35
+ 2. **Menghindari konten duplikat:** Tag kanonik dan alternatif yang tepat memberi tahu crawler halaman mana yang milik locale mana.
36
+ 3. **UX yang lebih baik:** Pengunjung langsung mendarat di versi situs Anda yang tepat.
37
+ 4. **Keunggulan kompetitif:** Sedikit situs yang mengimplementasikan SEO multibahasa dengan baik yang berarti Anda bisa menonjol.
38
+
39
+ ---
40
+
41
+ ## Praktik Terbaik untuk SEO Multibahasa di Next.js
42
+
43
+ Berikut adalah daftar periksa yang harus diimplementasikan setiap aplikasi multibahasa:
44
+
45
+ - **Atur tag meta `hreflang` di `<head>`**
46
+ Membantu Google memahami versi mana yang ada untuk setiap bahasa.
47
+
48
+ - **Daftarkan semua halaman terjemahan di `sitemap.xml`**
49
+ Gunakan skema `xhtml` agar perayap dapat dengan mudah menemukan alternatif.
50
+
51
+ - **Kecualikan rute privat/lokal di `robots.txt`**
52
+ Contoh: jangan biarkan `/dashboard`, `/fr/dashboard`, `/es/dashboard` diindeks.
53
+
54
+ - **Gunakan tautan yang dilokalkan**
55
+ Contoh: `<a href="/fr/about">À propos</a>` daripada menautkan ke `/about` default.
56
+
57
+ Ini adalah langkah sederhana — tetapi melewatkannya dapat mengurangi visibilitas Anda.
58
+
59
+ ---
60
+
61
+ ## Contoh Implementasi
62
+
63
+ Pengembang sering lupa untuk merujuk halaman mereka dengan benar di berbagai locale, jadi mari kita lihat bagaimana ini bekerja dalam praktik dengan berbagai pustaka.
64
+
65
+ ### **next-intl**
66
+
67
+ <Tabs>
68
+ <TabItem label="next-intl">
69
+
70
+ ```tsx fileName="src/app/[locale]/about/layout.tsx
71
+ import type { Metadata } from "next";
72
+ import { locales, defaultLocale } from "@/i18n";
73
+ import { getTranslations, unstable_setRequestLocale } from "next-intl/server";
74
+
75
+ function localizedPath(locale: string, path: string) {
76
+ return locale === defaultLocale ? path : `/${locale}${path}`;
77
+ }
78
+
79
+ export async function generateMetadata({
80
+ params,
81
+ }: {
82
+ params: { locale: string };
83
+ }): Promise<Metadata> {
84
+ const { locale } = params;
85
+ const t = await getTranslations({ locale, namespace: "about" });
86
+
87
+ const url = "/about";
88
+ const languages = Object.fromEntries(
89
+ locales.map((l) => [l, localizedPath(l, url)])
90
+ );
91
+
92
+ return {
93
+ title: t("title"),
94
+ description: t("description"),
95
+ alternates: {
96
+ canonical: localizedPath(locale, url),
97
+ languages: { ...languages, "x-default": url },
98
+ },
99
+ };
100
+ }
101
+
102
+ // ... Sisa kode halaman
103
+ ```
104
+
105
+ ```tsx fileName="src/app/sitemap.ts"
106
+ import type { MetadataRoute } from "next";
107
+ import { locales, defaultLocale } from "@/i18n";
108
+
109
+ const origin = "https://example.com";
110
+
111
+ const formatterLocalizedPath = (locale: string, path: string) =>
112
+ locale === defaultLocale ? `${origin}${path}` : `${origin}/${locale}${path}`;
113
+
114
+ export default function sitemap(): MetadataRoute.Sitemap {
115
+ const aboutLanguages = Object.fromEntries(
116
+ locales.map((l) => [l, formatterLocalizedPath(l, "/about")])
117
+ );
118
+
119
+ return [
120
+ {
121
+ url: formatterLocalizedPath(defaultLocale, "/about"),
122
+ lastModified: new Date(),
123
+ changeFrequency: "monthly",
124
+ priority: 0.7,
125
+ alternates: { languages: aboutLanguages },
126
+ },
127
+ ];
128
+ }
129
+ ```
130
+
131
+ ```tsx fileName="src/app/robots.ts"
132
+ import type { MetadataRoute } from "next";
133
+ import { locales, defaultLocale } from "@/i18n";
134
+
135
+ const origin = "https://example.com";
136
+ const withAllLocales = (path: string) => [
137
+ path,
138
+ ...locales.filter((l) => l !== defaultLocale).map((l) => `/${l}${path}`),
139
+ ];
140
+
141
+ export default function robots(): MetadataRoute.Robots {
142
+ const disallow = [
143
+ ...withAllLocales("/dashboard"),
144
+ ...withAllLocales("/admin"),
145
+ ];
146
+
147
+ return {
148
+ rules: { userAgent: "*", allow: ["/"], disallow },
149
+ host: origin,
150
+ sitemap: `${origin}/sitemap.xml`,
151
+ };
152
+ }
153
+ ```
154
+
155
+ ### **next-i18next**
156
+
157
+ </TabItem>
158
+ <TabItem label="next-i18next">
159
+
160
+ ```ts fileName="i18n.config.ts"
161
+ export const locales = ["en", "fr"] as const;
162
+ export type Locale = (typeof locales)[number];
163
+ export const defaultLocale: Locale = "en";
164
+
165
+ /** Prefix path dengan locale kecuali jika itu adalah locale default */
166
+ export function localizedPath(locale: string, path: string) {
167
+ return locale === defaultLocale ? path : `/${locale}${path}`;
168
+ }
169
+
170
+ /** Helper URL absolut */
171
+ const ORIGIN = "https://example.com";
172
+ export function abs(locale: string, path: string) {
173
+ return `${ORIGIN}${localizedPath(locale, path)}`;
174
+ }
175
+ ```
176
+
177
+ ```tsx fileName="src/app/[locale]/about/layout.tsx"
178
+ import type { Metadata } from "next";
179
+ import { locales, defaultLocale, localizedPath } from "@/i18n.config";
180
+
181
+ export async function generateMetadata({
182
+ params,
183
+ }: {
184
+ params: { locale: string };
185
+ }): Promise<Metadata> {
186
+ const { locale } = params;
187
+
188
+ // Mengimpor file JSON yang sesuai secara dinamis
189
+ const messages = (await import(`@/../public/locales/${locale}/about.json`))
190
+ .default;
191
+
192
+ const languages = Object.fromEntries(
193
+ locales.map((l) => [l, localizedPath(l, "/about")])
194
+ );
195
+
196
+ return {
197
+ title: messages.title,
198
+ description: messages.description,
199
+ alternates: {
200
+ canonical: localizedPath(locale, "/about"),
201
+ languages: { ...languages, "x-default": "/about" },
202
+ },
203
+ };
204
+ }
205
+
206
+ export default async function AboutPage() {
207
+ return <h1>Tentang</h1>;
208
+ }
209
+ ```
210
+
211
+ ```ts fileName="src/app/sitemap.ts"
212
+ import type { MetadataRoute } from "next";
213
+ import { locales, defaultLocale, abs } from "@/i18n.config";
214
+
215
+ export default function sitemap(): MetadataRoute.Sitemap {
216
+ const languages = Object.fromEntries(
217
+ locales.map((l) => [l, abs(l, "/about")])
218
+ );
219
+ return [
220
+ {
221
+ url: abs(defaultLocale, "/about"),
222
+ lastModified: new Date(),
223
+ changeFrequency: "monthly", // Frekuensi perubahan halaman
224
+ priority: 0.7, // Prioritas halaman dalam sitemap
225
+ alternates: { languages }, // Alternatif bahasa untuk halaman ini
226
+ },
227
+ ];
228
+ }
229
+ ```
230
+
231
+ ```ts fileName="src/app/robots.ts"
232
+ import type { MetadataRoute } from "next";
233
+ import { locales, defaultLocale, localizedPath } from "@/i18n.config";
234
+
235
+ const ORIGIN = "https://example.com";
236
+
237
+ const expandAllLocales = (path: string) => [
238
+ localizedPath(defaultLocale, path),
239
+ ...locales
240
+ .filter((l) => l !== defaultLocale)
241
+ .map((l) => localizedPath(l, path)),
242
+ ];
243
+
244
+ export default function robots(): MetadataRoute.Robots {
245
+ const disallow = [
246
+ ...expandAllLocales("/dashboard"),
247
+ ...expandAllLocales("/admin"),
248
+ ];
249
+
250
+ return {
251
+ rules: { userAgent: "*", allow: ["/"], disallow },
252
+ host: ORIGIN,
253
+ sitemap: `${ORIGIN}/sitemap.xml`,
254
+ };
255
+ }
256
+ ```
257
+
258
+ ### **Intlayer**
259
+
260
+ </TabItem>
261
+ <TabItem label="intlayer">
262
+
263
+ ````typescript fileName="src/app/[locale]/about/layout.tsx"
264
+ import { getIntlayer, getMultilingualUrls } from "intlayer";
265
+ import type { Metadata } from "next";
266
+ import type { LocalPromiseParams } from "next-intlayer";
267
+
268
+ export const generateMetadata = async ({
269
+ params,
270
+ }: LocalPromiseParams): Promise<Metadata> => {
271
+ const { locale } = await params;
272
+
273
+ const metadata = getIntlayer("page-metadata", locale);
274
+
275
+ /**
276
+ * Menghasilkan objek yang berisi semua url untuk setiap locale.
277
+ *
278
+ * Contoh:
279
+ * ```ts
280
+ * getMultilingualUrls('/about');
281
+ *
282
+ * // Mengembalikan
283
+ * // {
284
+ * // en: '/about',
285
+ * // fr: '/fr/about',
286
+ * // es: '/es/about',
287
+ * // }
288
+ * ```
289
+ */
290
+ const multilingualUrls = getMultilingualUrls("/about");
291
+
292
+ return {
293
+ ...metadata,
294
+ alternates: {
295
+ canonical: multilingualUrls[locale as keyof typeof multilingualUrls],
296
+ languages: { ...multilingualUrls, "x-default": "/about" },
297
+ },
298
+ };
299
+ };
300
+
301
+ // ... Sisa kode halaman
302
+ ````
303
+
304
+ ```tsx fileName="src/app/sitemap.ts"
305
+ import { getMultilingualUrls } from "intlayer";
306
+ import type { MetadataRoute } from "next";
307
+
308
+ const sitemap = (): MetadataRoute.Sitemap => [
309
+ {
310
+ url: "https://example.com/about",
311
+ alternates: {
312
+ languages: { ...getMultilingualUrls("https://example.com/about") },
313
+ },
314
+ },
315
+ ];
316
+ ```
317
+
318
+ ```tsx fileName="src/app/robots.ts"
319
+ import { getMultilingualUrls } from "intlayer";
320
+ import type { MetadataRoute } from "next";
321
+
322
+ const getAllMultilingualUrls = (urls: string[]) =>
323
+ urls.flatMap((url) => Object.values(getMultilingualUrls(url)) as string[]);
324
+
325
+ // Mendapatkan semua URL multibahasa dari daftar URL yang diberikan
326
+ const robots = (): MetadataRoute.Robots => ({
327
+ rules: {
328
+ userAgent: "*",
329
+ allow: ["/"],
330
+ disallow: getAllMultilingualUrls(["/dashboard"]), // Melarang akses ke semua versi multibahasa dari /dashboard
331
+ },
332
+ host: "https://example.com",
333
+ sitemap: `https://example.com/sitemap.xml`,
334
+ });
335
+
336
+ export default robots;
337
+ ```
338
+
339
+ > Intlayer menyediakan fungsi `getMultilingualUrls` untuk menghasilkan URL multibahasa untuk sitemap Anda.
340
+
341
+ </TabItem>
342
+ </Tabs>
343
+
344
+ ---
345
+
346
+ ## Kesimpulan
347
+
348
+ Mengelola i18n dengan benar di Next.js bukan hanya soal menerjemahkan teks, tetapi juga memastikan mesin pencari dan pengguna tahu versi konten mana yang harus disajikan.
349
+ Mengatur hreflang, sitemap, dan aturan robots adalah yang mengubah terjemahan menjadi nilai SEO yang nyata.
350
+
351
+ Meskipun next-intl dan next-i18next memberikan cara yang solid untuk menghubungkan ini, biasanya mereka memerlukan banyak pengaturan manual agar tetap konsisten di seluruh locale.
352
+
353
+ Di sinilah Intlayer benar-benar bersinar:
354
+
355
+ Ini dilengkapi dengan helper bawaan seperti getMultilingualUrls, membuat integrasi hreflang, sitemap, dan robots hampir tanpa usaha.
356
+
357
+ Metadata tetap terpusat alih-alih tersebar di berbagai file JSON atau utilitas kustom.
358
+
359
+ Ini dirancang khusus untuk Next.js sejak awal, sehingga Anda menghabiskan lebih sedikit waktu untuk debugging konfigurasi dan lebih banyak waktu untuk pengiriman.
360
+
361
+ Jika tujuan Anda bukan hanya menerjemahkan tetapi juga mengembangkan SEO multibahasa tanpa hambatan, Intlayer memberikan pengaturan yang paling bersih dan paling tahan masa depan.
@@ -0,0 +1,288 @@
1
+ ---
2
+ createdAt: 2025-09-10
3
+ updatedAt: 2025-09-10
4
+ title: Membangun Asisten Dokumentasi Bertenaga RAG (Chunking, Embeddings, dan Pencarian)
5
+ description: Membangun Asisten Dokumentasi Bertenaga RAG (Chunking, Embeddings, dan Pencarian)
6
+ keywords:
7
+ - RAG
8
+ - Dokumentasi
9
+ - Asisten
10
+ - Chunking
11
+ - Embeddings
12
+ - Pencarian
13
+ slugs:
14
+ - blog
15
+ - rag-powered-documentation-assistant
16
+ ---
17
+
18
+ # Membangun Asisten Dokumentasi Bertenaga RAG (Chunking, Embeddings, dan Pencarian)
19
+
20
+ ## Apa yang Anda dapatkan
21
+
22
+ Saya membangun asisten dokumentasi bertenaga RAG dan mengemasnya menjadi boilerplate yang dapat Anda gunakan segera.
23
+
24
+ - Dilengkapi dengan aplikasi siap pakai (Next.js + OpenAI API)
25
+ - Termasuk pipeline RAG yang berfungsi (chunking, embeddings, cosine similarity)
26
+ - Menyediakan UI chatbot lengkap yang dibangun dengan React
27
+ - Semua komponen UI sepenuhnya dapat diedit dengan Tailwind CSS
28
+ - Mencatat setiap kueri pengguna untuk membantu mengidentifikasi dokumen yang hilang, titik sakit pengguna, dan peluang produk
29
+
30
+ 👉 [Demo langsung](https://intlayer.org/doc/why) 👉 [Boilerplate kode](https://github.com/aymericzip/smart_doc_RAG)
31
+
32
+ ## Pendahuluan
33
+
34
+ Jika Anda pernah tersesat dalam dokumentasi, menggulir tanpa henti mencari satu jawaban, Anda tahu betapa menyakitkannya hal itu. Dokumentasi berguna, tetapi bersifat statis dan pencariannya sering terasa canggung.
35
+
36
+ Di sinilah **RAG (Retrieval-Augmented Generation)** berperan. Alih-alih memaksa pengguna menggali teks, kita dapat menggabungkan **retrieval** (menemukan bagian dokumen yang tepat) dengan **generation** (membiarkan LLM menjelaskannya secara alami).
37
+
38
+ Dalam postingan ini, saya akan memandu Anda bagaimana saya membangun chatbot dokumentasi yang didukung oleh RAG dan bagaimana ini tidak hanya membantu pengguna menemukan jawaban lebih cepat, tetapi juga memberikan tim produk cara baru untuk memahami titik sakit pengguna.
39
+
40
+ ## Mengapa Menggunakan RAG untuk Dokumentasi?
41
+
42
+ RAG telah menjadi pendekatan populer karena suatu alasan: ini adalah salah satu cara paling praktis untuk membuat model bahasa besar benar-benar berguna.
43
+
44
+ Untuk dokumentasi, manfaatnya jelas:
45
+
46
+ - Jawaban instan: pengguna bertanya dalam bahasa alami, dan mendapatkan balasan yang relevan.
47
+ - Konteks yang lebih baik: model hanya melihat bagian dokumen yang paling relevan, mengurangi halusinasi.
48
+ - Pencarian yang terasa manusiawi: lebih seperti gabungan Algolia + FAQ + chatbot dalam satu.
49
+ - Siklus umpan balik: dengan menyimpan kueri, Anda mengungkap apa yang benar-benar menjadi kesulitan pengguna.
50
+
51
+ Poin terakhir ini sangat penting. Sistem RAG tidak hanya menjawab pertanyaan, tetapi juga memberi tahu Anda apa yang orang tanyakan. Itu berarti:
52
+
53
+ - Anda menemukan informasi yang hilang dalam dokumentasi Anda.
54
+ - Anda melihat permintaan fitur yang mulai muncul.
55
+ - Anda menemukan pola yang bahkan dapat memandu strategi produk.
56
+
57
+ Jadi, RAG bukan hanya alat dukungan. Ini juga merupakan **mesin penemuan produk**.
58
+
59
+ ## Cara Kerja Pipeline RAG
60
+
61
+ ![Pipeline RAG](https://github.com/aymericzip/intlayer/blob/main/docs/assets/rag_flow.svg)
62
+
63
+ Secara garis besar, berikut resep yang saya gunakan:
64
+
65
+ 1. **Memecah dokumentasi** File Markdown besar dibagi menjadi beberapa bagian. Pemecahan ini memungkinkan hanya bagian dokumentasi yang relevan yang digunakan sebagai konteks.
66
+ 2. **Menghasilkan embeddings** Setiap potongan diubah menjadi vektor menggunakan API embedding OpenAI (text-embedding-3-large) atau basis data vektor (Chroma, Qdrant, Pinecone).
67
+ 3. **Pengindeksan & penyimpanan** Embeddings disimpan dalam file JSON sederhana (untuk demo saya), tetapi dalam produksi, Anda kemungkinan akan menggunakan basis data vektor.
68
+ 4. **Pengambilan (R dalam RAG)** Query pengguna diubah menjadi embedding, kemiripan kosinus dihitung, dan potongan yang paling cocok diambil.
69
+ 5. **Augmentasi + Generasi (AG dalam RAG)** Potongan-potongan tersebut disuntikkan ke dalam prompt untuk ChatGPT, sehingga model menjawab dengan konteks dokumen yang sebenarnya.
70
+ 6. **Mencatat query untuk umpan balik** Setiap query pengguna disimpan. Ini sangat berharga untuk memahami titik masalah, dokumen yang hilang, atau peluang baru.
71
+
72
+ ## Langkah 1: Membaca Dokumen
73
+
74
+ Langkah pertama sangat sederhana: saya membutuhkan cara untuk memindai folder docs/ untuk semua file .md. Menggunakan Node.js dan glob, saya mengambil konten dari setiap file Markdown ke dalam memori.
75
+
76
+ Ini menjaga pipeline tetap fleksibel: alih-alih Markdown, Anda bisa mengambil dokumen dari database, CMS, atau bahkan API.
77
+
78
+ ## Langkah 2: Memecah Dokumentasi menjadi Potongan
79
+
80
+ Mengapa memecah? Karena model bahasa memiliki **batas konteks**. Memberi mereka seluruh buku dokumen tidak akan berhasil.
81
+
82
+ Jadi idenya adalah memecah teks menjadi potongan yang dapat dikelola (misalnya 500 token setiap potongan) dengan tumpang tindih (misalnya 100 token). Tumpang tindih memastikan kontinuitas sehingga Anda tidak kehilangan makna di batas potongan.
83
+
84
+ <p align="center">
85
+ <img width="480" alt="Sumber data yang dapat diandalkan" src="https://github.com/user-attachments/assets/ee548851-7206-4cc6-821e-de8a4366c6a3" />
86
+ </p>
87
+
88
+ **Contoh:**
89
+
90
+ - Chunk 1 → “…perpustakaan tua yang banyak orang lupa. Rak-raknya yang menjulang penuh dengan buku…”
91
+ - Chunk 2 → “…rak-rak penuh dengan buku dari setiap genre yang bisa dibayangkan, masing-masing membisikkan cerita…”
92
+
93
+ Tumpang tindih ini memastikan kedua chunk mengandung konteks bersama, sehingga pengambilan tetap koheren.
94
+
95
+ Pertukaran ini (ukuran chunk vs tumpang tindih) adalah kunci untuk efisiensi RAG:
96
+
97
+ - Terlalu kecil → Anda mendapatkan noise.
98
+ - Terlalu besar → Anda membengkakkan ukuran konteks.
99
+
100
+ ## Langkah 3: Menghasilkan Embeddings
101
+
102
+ Setelah dokumen dipecah menjadi chunk, kita menghasilkan **embeddings** — vektor berdimensi tinggi yang mewakili setiap chunk.
103
+
104
+ Saya menggunakan model OpenAI text-embedding-3-large, tetapi Anda bisa menggunakan model embedding modern lainnya.
105
+
106
+ **Contoh embedding:**
107
+
108
+ ```js
109
+ [
110
+ -0.0002630692, -0.029749284, 0.010225477, -0.009224428, -0.0065269712,
111
+ -0.002665544, 0.003214777, 0.04235309, -0.033162255, -0.00080789323,
112
+ //...+1533 elemen
113
+ ];
114
+ ```
115
+
116
+ Setiap vektor adalah sidik jari matematis dari teks, memungkinkan pencarian kemiripan.
117
+
118
+ ## Langkah 4: Pengindeksan & Penyimpanan Embedding
119
+
120
+ Untuk menghindari pembuatan ulang embedding berkali-kali, saya menyimpannya di embeddings.json.
121
+
122
+ Dalam produksi, Anda kemungkinan ingin menggunakan basis data vektor seperti:
123
+
124
+ - Chroma
125
+ - Qdrant
126
+ - Pinecone
127
+ - FAISS, Weaviate, Milvus, dll.
128
+
129
+ Basis data vektor menangani pengindeksan, skalabilitas, dan pencarian cepat. Namun untuk prototipe saya, JSON lokal sudah cukup.
130
+
131
+ ## Langkah 5: Pengambilan dengan Cosine Similarity
132
+
133
+ Ketika pengguna mengajukan pertanyaan:
134
+
135
+ 1. Buat embedding untuk query.
136
+ 2. Bandingkan dengan semua embedding dokumen menggunakan **cosine similarity**.
137
+ 3. Simpan hanya N chunk teratas yang paling mirip.
138
+
139
+ Cosine similarity mengukur sudut antara dua vektor. Kecocokan sempurna mendapatkan skor **1.0**.
140
+
141
+ Dengan cara ini, sistem menemukan bagian dokumen yang paling dekat dengan kueri.
142
+
143
+ ## Langkah 6: Augmentasi + Generasi
144
+
145
+ Sekarang saatnya keajaiban. Kita mengambil potongan-potongan teratas dan menyuntikkannya ke dalam **system prompt** untuk ChatGPT.
146
+
147
+ Itu berarti model menjawab seolah-olah potongan-potongan tersebut adalah bagian dari percakapan.
148
+
149
+ Hasilnya: jawaban yang akurat dan **berdasarkan dokumen**.
150
+
151
+ ## Langkah 7: Mencatat Kueri Pengguna
152
+
153
+ Ini adalah kekuatan tersembunyi.
154
+
155
+ Setiap pertanyaan yang diajukan disimpan. Seiring waktu, Anda membangun dataset dari:
156
+
157
+ - Pertanyaan yang paling sering diajukan (bagus untuk FAQ)
158
+ - Pertanyaan yang belum terjawab (dokumen hilang atau tidak jelas)
159
+ - Permintaan fitur yang disamarkan sebagai pertanyaan (“Apakah ini terintegrasi dengan X?”)
160
+ - Kasus penggunaan baru yang belum Anda rencanakan
161
+
162
+ Ini mengubah asisten RAG Anda menjadi **alat riset pengguna berkelanjutan**.
163
+
164
+ ## Berapa Biayanya?
165
+
166
+ Salah satu keberatan umum terhadap RAG adalah biaya. Dalam praktiknya, biayanya cukup murah:
167
+
168
+ - Menghasilkan embeddings untuk sekitar ~200 dokumen memakan waktu sekitar **5 menit** dan biaya **1–2 euro**.
169
+ - Fitur pencarian dokumen 100% gratis.
170
+ - Untuk kueri, kami menggunakan gpt-4o-latest tanpa mode “thinking”. Di Intlayer, kami melihat sekitar **300 kueri chat per bulan**, dan tagihan API OpenAI jarang melebihi **$10**.
171
+
172
+ Di atas itu, Anda dapat memasukkan biaya hosting.
173
+
174
+ ## Detail Implementasi
175
+
176
+ Stack:
177
+
178
+ - Monorepo: workspace pnpm
179
+ - Paket dokumen: Node.js / TypeScript / OpenAI API
180
+ - Frontend: Next.js / React / Tailwind CSS
181
+ - Backend: Node.js API route / OpenAI API
182
+
183
+ Paket `@smart-doc/docs` adalah paket TypeScript yang menangani pemrosesan dokumentasi. Ketika sebuah file markdown ditambahkan atau dimodifikasi, paket ini menyertakan skrip `build` yang membangun ulang daftar dokumentasi dalam setiap bahasa, menghasilkan embeddings, dan menyimpannya dalam file `embeddings.json`.
184
+
185
+ Untuk frontend, kami menggunakan aplikasi Next.js yang menyediakan:
186
+
187
+ - Rendering Markdown ke HTML
188
+ - Bar pencarian untuk menemukan dokumentasi yang relevan
189
+ - Antarmuka chatbot untuk mengajukan pertanyaan tentang dokumen
190
+
191
+ Untuk melakukan pencarian dokumentasi, aplikasi Next.js menyertakan rute API yang memanggil fungsi dalam paket `@smart-doc/docs` untuk mengambil potongan dokumen yang sesuai dengan kueri. Dengan menggunakan potongan-potongan ini, kami dapat mengembalikan daftar halaman dokumentasi yang relevan dengan pencarian pengguna.
192
+
193
+ Untuk fungsi chatbot, kami mengikuti proses pencarian yang sama tetapi juga menyisipkan potongan dokumen yang diambil ke dalam prompt yang dikirim ke ChatGPT.
194
+
195
+ Berikut adalah contoh prompt yang dikirim ke ChatGPT:
196
+
197
+ Prompt sistem:
198
+
199
+ ```txt
200
+ Anda adalah asisten yang membantu yang dapat menjawab pertanyaan tentang dokumentasi Intlayer.
201
+
202
+ Potongan terkait:
203
+
204
+ -----
205
+ docName: "getting-started"
206
+ docChunk: "1/3"
207
+ docUrl: "https://example.com/docs/id/getting-started"
208
+ ---
209
+
210
+ # Cara memulai
211
+
212
+ ...
213
+
214
+ -----
215
+ docName: "another-doc"
216
+ docChunk: "1/5"
217
+ docUrl: "https://example.com/docs/id/another-doc"
218
+ ---
219
+
220
+ # Dokumen lain
221
+
222
+ ...
223
+ ```
224
+
225
+ Query pengguna:
226
+
227
+ ```txt
228
+ Bagaimana cara memulai?
229
+ ```
230
+
231
+ Kami menggunakan SSE untuk melakukan streaming respons dari rute API.
232
+
233
+ Seperti yang disebutkan, kami menggunakan gpt-4-turbo tanpa mode "thinking". Responsnya relevan, dan latensinya rendah.
234
+ Kami bereksperimen dengan gpt-5, tetapi latensinya terlalu tinggi (kadang hingga 15 detik untuk sebuah balasan). Namun, kami akan meninjau kembali hal itu di masa depan.
235
+
236
+ 👉 [Coba demo di sini](https://intlayer.org/doc/why) 👉 [Periksa template kode di GitHub](https://github.com/aymericzip/smart_doc_RAG)
237
+
238
+ ## Melangkah Lebih Jauh
239
+
240
+ Proyek ini adalah implementasi minimal. Namun, Anda dapat memperluasnya dengan berbagai cara:
241
+
242
+ - Server MCP → fungsi pencarian dokumen ke server MCP untuk menghubungkan dokumentasi ke asisten AI mana pun
243
+
244
+ - Vector DBs → skala hingga jutaan potongan dokumen
245
+ - LangChain / LlamaIndex → kerangka kerja siap pakai untuk pipeline RAG
246
+ - Dashboard analitik → memvisualisasikan kueri pengguna dan titik masalah
247
+ - Pengambilan multi-sumber → menarik tidak hanya dokumen, tetapi juga entri database, posting blog, tiket, dll.
248
+ - Peningkatan prompting → peringkat ulang, penyaringan, dan pencarian hibrida (kata kunci + semantik)
249
+
250
+ ## Batasan yang Kami Temui
251
+
252
+ - Pemecahan chunk dan tumpang tindih bersifat empiris. Keseimbangan yang tepat (ukuran chunk, persentase tumpang tindih, jumlah chunk yang diambil) memerlukan iterasi dan pengujian.
253
+ - Embedding tidak dihasilkan ulang secara otomatis saat dokumen berubah. Sistem kami mereset embedding untuk sebuah file hanya jika jumlah chunk berbeda dari yang tersimpan.
254
+ - Dalam prototipe ini, embedding disimpan dalam format JSON. Ini bekerja untuk demo tetapi mencemari Git. Dalam produksi, database atau penyimpanan vektor khusus lebih baik.
255
+
256
+ ## Mengapa Ini Penting Selain Dokumen
257
+
258
+ Bagian menariknya bukan hanya chatbot. Ini adalah **loop umpan balik**.
259
+
260
+ Dengan RAG, Anda tidak hanya menjawab:
261
+
262
+ - Anda mempelajari apa yang membingungkan pengguna.
263
+ - Anda menemukan fitur apa yang mereka harapkan.
264
+ - Anda menyesuaikan strategi produk Anda berdasarkan pertanyaan nyata.
265
+
266
+ **Contoh:**
267
+
268
+ Bayangkan meluncurkan fitur baru dan langsung melihat:
269
+
270
+ - 50% pertanyaan tentang langkah pengaturan yang sama yang tidak jelas
271
+ - Pengguna berulang kali meminta integrasi yang belum Anda dukung
272
+ - Orang mencari istilah yang mengungkapkan kasus penggunaan baru
273
+
274
+ Itu adalah **intelijen produk** langsung dari pengguna Anda.
275
+
276
+ ## Kesimpulan
277
+
278
+ RAG adalah salah satu cara paling sederhana dan paling kuat untuk membuat LLM menjadi praktis. Dengan menggabungkan **retrieval + generation**, Anda dapat mengubah dokumen statis menjadi **asisten pintar** dan, pada saat yang sama, mendapatkan aliran wawasan produk yang berkelanjutan.
279
+
280
+ Bagi saya, proyek ini menunjukkan bahwa RAG bukan hanya trik teknis. Ini adalah cara untuk mengubah dokumentasi menjadi:
281
+
282
+ - sistem dukungan interaktif
283
+ - saluran umpan balik
284
+ - sebuah alat strategi produk
285
+
286
+ 👉 [Coba demo di sini](https://intlayer.org/doc/why) 👉 [Periksa template kode di GitHub](https://github.com/aymericzip/smart_doc_RAG)
287
+
288
+ Dan jika Anda juga bereksperimen dengan RAG, saya ingin sekali mendengar bagaimana Anda menggunakannya.