@intlayer/docs 7.0.7 → 7.0.8-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (726) hide show
  1. package/blog/ar/i18n_using_next-i18next.md +1068 -0
  2. package/blog/ar/i18n_using_next-intl.md +768 -0
  3. package/blog/ar/intlayer_with_react-intl.md +0 -4
  4. package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +5 -4
  5. package/blog/de/i18n_using_next-i18next.md +1107 -0
  6. package/blog/de/i18n_using_next-intl.md +760 -0
  7. package/blog/de/intlayer_with_react-intl.md +0 -4
  8. package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  9. package/blog/en/i18n_using_next-i18next.md +1073 -0
  10. package/blog/en/i18n_using_next-intl.md +757 -0
  11. package/blog/en/intlayer_with_i18next.md +71 -8
  12. package/blog/en/intlayer_with_next-i18next.md +71 -8
  13. package/blog/en/intlayer_with_next-intl.md +71 -8
  14. package/blog/en/intlayer_with_react-i18next.md +69 -8
  15. package/blog/en/intlayer_with_react-intl.md +68 -9
  16. package/blog/en/intlayer_with_vue-i18n.md +68 -7
  17. package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
  18. package/blog/en/vue-i18n_vs_intlayer.md +2 -0
  19. package/blog/en-GB/i18n_using_next-i18next.md +1074 -0
  20. package/blog/en-GB/i18n_using_next-intl.md +757 -0
  21. package/blog/en-GB/intlayer_with_i18next.md +15 -6
  22. package/blog/en-GB/intlayer_with_next-i18next.md +16 -6
  23. package/blog/en-GB/intlayer_with_next-intl.md +16 -6
  24. package/blog/en-GB/intlayer_with_react-i18next.md +16 -7
  25. package/blog/en-GB/intlayer_with_react-intl.md +14 -9
  26. package/blog/en-GB/intlayer_with_vue-i18n.md +16 -7
  27. package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  28. package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
  29. package/blog/en-GB/vue-i18n_vs_intlayer.md +2 -0
  30. package/blog/es/i18n_using_next-i18next.md +1066 -0
  31. package/blog/es/i18n_using_next-intl.md +757 -0
  32. package/blog/es/intlayer_with_react-intl.md +0 -4
  33. package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  34. package/blog/fr/i18n_using_next-i18next.md +1078 -0
  35. package/blog/fr/i18n_using_next-intl.md +759 -0
  36. package/blog/fr/intlayer_with_react-intl.md +0 -4
  37. package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  38. package/blog/hi/i18n_using_next-i18next.md +1068 -0
  39. package/blog/hi/i18n_using_next-intl.md +758 -0
  40. package/blog/hi/intlayer_with_react-intl.md +0 -4
  41. package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  42. package/blog/id/i18n_using_next-i18next.md +1078 -0
  43. package/blog/id/i18n_using_next-intl.md +757 -0
  44. package/blog/id/index.md +69 -0
  45. package/blog/id/internationalization_and_SEO.md +364 -0
  46. package/blog/id/intlayer_with_react-intl.md +0 -4
  47. package/blog/id/list_i18n_technologies/CMS/drupal.md +143 -0
  48. package/blog/id/list_i18n_technologies/CMS/wix.md +167 -0
  49. package/blog/id/list_i18n_technologies/CMS/wordpress.md +188 -0
  50. package/blog/id/list_i18n_technologies/frameworks/angular.md +125 -0
  51. package/blog/id/list_i18n_technologies/frameworks/flutter.md +150 -0
  52. package/blog/id/list_i18n_technologies/frameworks/react-native.md +217 -0
  53. package/blog/id/list_i18n_technologies/frameworks/react.md +155 -0
  54. package/blog/id/list_i18n_technologies/frameworks/svelte.md +131 -0
  55. package/blog/id/list_i18n_technologies/frameworks/vue.md +130 -0
  56. package/blog/id/next-i18next_vs_next-intl_vs_intlayer.md +1500 -0
  57. package/blog/id/nextjs-multilingual-seo-comparison.md +361 -0
  58. package/blog/id/rag_powered_documentation_assistant.md +288 -0
  59. package/blog/id/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
  60. package/blog/id/vue-i18n_vs_intlayer.md +278 -0
  61. package/blog/id/what_is_internationalization.md +166 -0
  62. package/blog/it/i18n_using_next-i18next.md +1078 -0
  63. package/blog/it/i18n_using_next-intl.md +758 -0
  64. package/blog/it/intlayer_with_react-intl.md +0 -4
  65. package/blog/it/react-i18next_vs_react-intl_vs_intlayer.md +4 -0
  66. package/blog/it/vue-i18n_vs_intlayer.md +2 -0
  67. package/blog/ja/i18n_using_next-i18next.md +1078 -0
  68. package/blog/ja/i18n_using_next-intl.md +758 -0
  69. package/blog/ja/intlayer_with_react-intl.md +0 -4
  70. package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  71. package/blog/ko/i18n_using_next-i18next.md +1075 -0
  72. package/blog/ko/i18n_using_next-intl.md +759 -0
  73. package/blog/ko/intlayer_with_react-intl.md +0 -4
  74. package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  75. package/blog/pl/i18n_using_next-i18next.md +1078 -0
  76. package/blog/pl/i18n_using_next-intl.md +758 -0
  77. package/blog/pl/index.md +69 -0
  78. package/blog/pl/internationalization_and_SEO.md +363 -0
  79. package/blog/pl/intlayer_with_react-intl.md +0 -4
  80. package/blog/pl/list_i18n_technologies/CMS/drupal.md +143 -0
  81. package/blog/pl/list_i18n_technologies/CMS/wix.md +167 -0
  82. package/blog/pl/list_i18n_technologies/CMS/wordpress.md +196 -0
  83. package/blog/pl/list_i18n_technologies/frameworks/angular.md +125 -0
  84. package/blog/pl/list_i18n_technologies/frameworks/flutter.md +151 -0
  85. package/blog/pl/list_i18n_technologies/frameworks/react-native.md +217 -0
  86. package/blog/pl/list_i18n_technologies/frameworks/react.md +155 -0
  87. package/blog/pl/list_i18n_technologies/frameworks/svelte.md +131 -0
  88. package/blog/pl/list_i18n_technologies/frameworks/vue.md +130 -0
  89. package/blog/pl/next-i18next_vs_next-intl_vs_intlayer.md +1501 -0
  90. package/blog/pl/nextjs-multilingual-seo-comparison.md +362 -0
  91. package/blog/pl/rag_powered_documentation_assistant.md +288 -0
  92. package/blog/pl/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
  93. package/blog/pl/vue-i18n_vs_intlayer.md +278 -0
  94. package/blog/pl/what_is_internationalization.md +167 -0
  95. package/blog/pt/i18n_using_next-i18next.md +1067 -0
  96. package/blog/pt/i18n_using_next-intl.md +760 -0
  97. package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  98. package/blog/ru/i18n_using_next-i18next.md +1106 -0
  99. package/blog/ru/i18n_using_next-intl.md +759 -0
  100. package/blog/ru/intlayer_with_react-intl.md +0 -4
  101. package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  102. package/blog/tr/i18n_using_next-i18next.md +1078 -0
  103. package/blog/tr/i18n_using_next-intl.md +760 -0
  104. package/blog/tr/intlayer_with_react-intl.md +0 -4
  105. package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  106. package/blog/tr/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
  107. package/blog/tr/vue-i18n_vs_intlayer.md +2 -0
  108. package/blog/vi/i18n_using_next-i18next.md +1080 -0
  109. package/blog/vi/i18n_using_next-intl.md +758 -0
  110. package/blog/vi/index.md +69 -0
  111. package/blog/vi/internationalization_and_SEO.md +363 -0
  112. package/blog/vi/intlayer_with_react-intl.md +0 -4
  113. package/blog/vi/list_i18n_technologies/CMS/drupal.md +143 -0
  114. package/blog/vi/list_i18n_technologies/CMS/wix.md +167 -0
  115. package/blog/vi/list_i18n_technologies/CMS/wordpress.md +188 -0
  116. package/blog/vi/list_i18n_technologies/frameworks/angular.md +125 -0
  117. package/blog/vi/list_i18n_technologies/frameworks/flutter.md +150 -0
  118. package/blog/vi/list_i18n_technologies/frameworks/react-native.md +217 -0
  119. package/blog/vi/list_i18n_technologies/frameworks/react.md +155 -0
  120. package/blog/vi/list_i18n_technologies/frameworks/svelte.md +131 -0
  121. package/blog/vi/list_i18n_technologies/frameworks/vue.md +130 -0
  122. package/blog/vi/next-i18next_vs_next-intl_vs_intlayer.md +1520 -0
  123. package/blog/vi/nextjs-multilingual-seo-comparison.md +362 -0
  124. package/blog/vi/rag_powered_documentation_assistant.md +288 -0
  125. package/blog/vi/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
  126. package/blog/vi/vue-i18n_vs_intlayer.md +278 -0
  127. package/blog/vi/what_is_internationalization.md +168 -0
  128. package/blog/zh/i18n_using_next-i18next.md +1105 -0
  129. package/blog/zh/i18n_using_next-intl.md +758 -0
  130. package/blog/zh/intlayer_with_react-intl.md +0 -4
  131. package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
  132. package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +2 -0
  133. package/dist/cjs/common.cjs +0 -4
  134. package/dist/cjs/common.cjs.map +1 -1
  135. package/dist/cjs/generated/blog.entry.cjs +38 -6
  136. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  137. package/dist/cjs/generated/docs.entry.cjs +0 -6
  138. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  139. package/dist/cjs/generated/frequentQuestions.entry.cjs +0 -6
  140. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  141. package/dist/cjs/generated/legal.entry.cjs +0 -6
  142. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  143. package/dist/esm/generated/blog.entry.mjs +38 -0
  144. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  145. package/dist/types/generated/blog.entry.d.ts +2 -0
  146. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  147. package/docs/ar/component_i18n.md +1 -1
  148. package/docs/ar/configuration.md +6 -0
  149. package/docs/ar/intlayer_cli.md +8 -3
  150. package/docs/ar/intlayer_with_next-i18next.md +619 -0
  151. package/docs/ar/intlayer_with_next-intl.md +446 -0
  152. package/docs/ar/intlayer_with_nextjs_16.md +21 -0
  153. package/docs/ar/intlayer_with_tanstack.md +4 -0
  154. package/docs/ar/intlayer_with_vite+react.md +4 -0
  155. package/docs/de/component_i18n.md +1 -1
  156. package/docs/de/configuration.md +6 -0
  157. package/docs/de/intlayer_cli.md +8 -3
  158. package/docs/de/intlayer_with_next-i18next.md +627 -0
  159. package/docs/de/intlayer_with_next-intl.md +451 -0
  160. package/docs/de/intlayer_with_nextjs_16.md +21 -0
  161. package/docs/de/intlayer_with_tanstack.md +4 -0
  162. package/docs/de/intlayer_with_vite+react.md +4 -0
  163. package/docs/en/component_i18n.md +1 -1
  164. package/docs/en/intlayer_cli.md +8 -1
  165. package/docs/en/intlayer_with_astro.md +10 -2
  166. package/docs/en/intlayer_with_create_react_app.md +8 -0
  167. package/docs/en/intlayer_with_lynx+react.md +8 -0
  168. package/docs/en/intlayer_with_nestjs.md +10 -0
  169. package/docs/en/intlayer_with_nextjs_14.md +10 -2
  170. package/docs/en/intlayer_with_nextjs_15.md +21 -4
  171. package/docs/en/intlayer_with_nextjs_16.md +17 -0
  172. package/docs/en/intlayer_with_nuxt.md +8 -0
  173. package/docs/en/intlayer_with_react_native+expo.md +10 -2
  174. package/docs/en/intlayer_with_react_router_v7.md +8 -0
  175. package/docs/en/intlayer_with_tanstack.md +10 -0
  176. package/docs/en/intlayer_with_vite+preact.md +10 -2
  177. package/docs/en/intlayer_with_vite+react.md +21 -4
  178. package/docs/en/intlayer_with_vite+vue.md +10 -2
  179. package/docs/en-GB/component_i18n.md +1 -1
  180. package/docs/en-GB/configuration.md +6 -0
  181. package/docs/en-GB/intlayer_cli.md +8 -3
  182. package/docs/en-GB/intlayer_with_angular.md +4 -4
  183. package/docs/en-GB/intlayer_with_express.md +4 -4
  184. package/docs/en-GB/intlayer_with_lynx+react.md +12 -12
  185. package/{blog/en/_intlayer_with_next-i18next.md → docs/en-GB/intlayer_with_next-i18next.md} +241 -42
  186. package/{blog/en/_intlayer_with_next-intl.md → docs/en-GB/intlayer_with_next-intl.md} +144 -29
  187. package/docs/en-GB/intlayer_with_nextjs_16.md +21 -0
  188. package/docs/en-GB/intlayer_with_tanstack.md +5 -1
  189. package/docs/en-GB/intlayer_with_vite+react.md +4 -0
  190. package/docs/en-GB/packages/next-intlayer/t.md +2 -2
  191. package/docs/es/component_i18n.md +1 -1
  192. package/docs/es/configuration.md +6 -0
  193. package/docs/es/intlayer_cli.md +8 -3
  194. package/docs/es/intlayer_with_next-i18next.md +628 -0
  195. package/docs/es/intlayer_with_next-intl.md +446 -0
  196. package/docs/es/intlayer_with_nextjs_16.md +21 -0
  197. package/docs/es/intlayer_with_tanstack.md +4 -0
  198. package/docs/es/intlayer_with_vite+react.md +4 -0
  199. package/docs/fr/configuration.md +6 -0
  200. package/docs/fr/intlayer_cli.md +8 -3
  201. package/docs/fr/intlayer_with_next-i18next.md +628 -0
  202. package/docs/fr/intlayer_with_next-intl.md +446 -0
  203. package/docs/fr/intlayer_with_nextjs_16.md +23 -2
  204. package/docs/fr/intlayer_with_tanstack.md +4 -0
  205. package/docs/fr/intlayer_with_vite+react.md +4 -0
  206. package/docs/hi/component_i18n.md +1 -1
  207. package/docs/hi/configuration.md +6 -0
  208. package/docs/hi/intlayer_cli.md +8 -0
  209. package/docs/hi/intlayer_with_next-i18next.md +628 -0
  210. package/docs/hi/intlayer_with_next-intl.md +446 -0
  211. package/docs/hi/intlayer_with_nextjs_16.md +21 -0
  212. package/docs/hi/intlayer_with_tanstack.md +4 -0
  213. package/docs/hi/intlayer_with_vite+react.md +4 -0
  214. package/docs/id/CI_CD.md +198 -0
  215. package/docs/id/autoFill.md +284 -0
  216. package/docs/id/component_i18n.md +186 -0
  217. package/docs/id/configuration.md +710 -0
  218. package/docs/id/dictionary/condition.md +231 -0
  219. package/docs/id/dictionary/content_file.md +1092 -0
  220. package/docs/id/dictionary/enumeration.md +245 -0
  221. package/docs/id/dictionary/file.md +237 -0
  222. package/docs/id/dictionary/function_fetching.md +214 -0
  223. package/docs/id/dictionary/gender.md +273 -0
  224. package/docs/id/dictionary/insertion.md +192 -0
  225. package/docs/id/dictionary/markdown.md +381 -0
  226. package/docs/id/dictionary/nesting.md +273 -0
  227. package/docs/id/dictionary/translation.md +310 -0
  228. package/docs/id/formatters.md +596 -0
  229. package/docs/id/how_works_intlayer.md +256 -0
  230. package/docs/id/index.md +176 -0
  231. package/docs/id/interest_of_intlayer.md +293 -0
  232. package/docs/id/intlayer_CMS.md +549 -0
  233. package/docs/id/intlayer_cli.md +850 -0
  234. package/docs/id/intlayer_visual_editor.md +288 -0
  235. package/docs/id/intlayer_with_angular.md +694 -0
  236. package/docs/id/intlayer_with_astro.md +252 -0
  237. package/docs/id/intlayer_with_create_react_app.md +1233 -0
  238. package/docs/id/intlayer_with_express.md +411 -0
  239. package/docs/id/intlayer_with_lynx+react.md +518 -0
  240. package/docs/id/intlayer_with_nestjs.md +272 -0
  241. package/docs/id/intlayer_with_next-i18next.md +628 -0
  242. package/docs/id/intlayer_with_next-intl.md +446 -0
  243. package/docs/id/intlayer_with_nextjs_14.md +1617 -0
  244. package/docs/id/intlayer_with_nextjs_15.md +1698 -0
  245. package/docs/id/intlayer_with_nextjs_16.md +21 -0
  246. package/docs/id/intlayer_with_nextjs_page_router.md +1478 -0
  247. package/docs/id/intlayer_with_nuxt.md +808 -0
  248. package/docs/id/intlayer_with_react_native+expo.md +699 -0
  249. package/docs/id/intlayer_with_react_router_v7.md +496 -0
  250. package/docs/id/intlayer_with_tanstack.md +564 -0
  251. package/docs/id/intlayer_with_vite+preact.md +1737 -0
  252. package/docs/id/intlayer_with_vite+react.md +1413 -0
  253. package/docs/id/intlayer_with_vite+solid.md +289 -0
  254. package/docs/id/intlayer_with_vite+svelte.md +289 -0
  255. package/docs/id/intlayer_with_vite+vue.md +1088 -0
  256. package/docs/id/introduction.md +218 -0
  257. package/docs/id/locale_mapper.md +242 -0
  258. package/docs/id/mcp_server.md +211 -0
  259. package/docs/id/packages/express-intlayer/t.md +458 -0
  260. package/docs/id/packages/intlayer/getConfiguration.md +145 -0
  261. package/docs/id/packages/intlayer/getEnumeration.md +159 -0
  262. package/docs/id/packages/intlayer/getHTMLTextDir.md +122 -0
  263. package/docs/id/packages/intlayer/getLocaleLang.md +81 -0
  264. package/docs/id/packages/intlayer/getLocaleName.md +119 -0
  265. package/docs/id/packages/intlayer/getLocalizedUrl.md +309 -0
  266. package/docs/id/packages/intlayer/getMultilingualUrls.md +223 -0
  267. package/docs/id/packages/intlayer/getPathWithoutLocale.md +75 -0
  268. package/docs/id/packages/intlayer/getTranslation.md +190 -0
  269. package/docs/id/packages/intlayer/getTranslationContent.md +188 -0
  270. package/docs/id/packages/next-intlayer/t.md +352 -0
  271. package/docs/id/packages/next-intlayer/useDictionary.md +271 -0
  272. package/docs/id/packages/next-intlayer/useIntlayer.md +264 -0
  273. package/docs/id/packages/next-intlayer/useLocale.md +166 -0
  274. package/docs/id/packages/react-intlayer/t.md +303 -0
  275. package/docs/id/packages/react-intlayer/useDictionary.md +287 -0
  276. package/docs/id/packages/react-intlayer/useI18n.md +267 -0
  277. package/docs/id/packages/react-intlayer/useIntlayer.md +254 -0
  278. package/docs/id/packages/react-intlayer/useLocale.md +210 -0
  279. package/docs/id/per_locale_file.md +323 -0
  280. package/docs/id/readme.md +261 -0
  281. package/docs/id/releases/v6.md +305 -0
  282. package/docs/id/roadmap.md +362 -0
  283. package/docs/id/testing.md +202 -0
  284. package/docs/id/vs_code_extension.md +126 -0
  285. package/docs/it/component_i18n.md +1 -1
  286. package/docs/it/configuration.md +6 -0
  287. package/docs/it/intlayer_cli.md +8 -3
  288. package/docs/it/intlayer_with_next-i18next.md +628 -0
  289. package/docs/it/intlayer_with_next-intl.md +446 -0
  290. package/docs/it/intlayer_with_nextjs_16.md +21 -0
  291. package/docs/it/intlayer_with_tanstack.md +4 -0
  292. package/docs/it/intlayer_with_vite+react.md +4 -0
  293. package/docs/ja/component_i18n.md +1 -1
  294. package/docs/ja/configuration.md +6 -0
  295. package/docs/ja/intlayer_cli.md +8 -3
  296. package/docs/ja/intlayer_with_next-i18next.md +627 -0
  297. package/docs/ja/intlayer_with_next-intl.md +446 -0
  298. package/docs/ja/intlayer_with_nextjs_16.md +21 -0
  299. package/docs/ja/intlayer_with_tanstack.md +4 -0
  300. package/docs/ja/intlayer_with_vite+react.md +4 -0
  301. package/docs/ko/configuration.md +6 -0
  302. package/docs/ko/intlayer_cli.md +8 -3
  303. package/docs/ko/intlayer_with_next-i18next.md +627 -0
  304. package/docs/ko/intlayer_with_next-intl.md +446 -0
  305. package/docs/ko/intlayer_with_nextjs_16.md +21 -0
  306. package/docs/ko/intlayer_with_tanstack.md +4 -0
  307. package/docs/ko/intlayer_with_vite+react.md +4 -0
  308. package/docs/pl/CI_CD.md +198 -0
  309. package/docs/pl/autoFill.md +284 -0
  310. package/docs/pl/component_i18n.md +186 -0
  311. package/docs/pl/configuration.md +710 -0
  312. package/docs/pl/dictionary/condition.md +232 -0
  313. package/docs/pl/dictionary/content_file.md +1130 -0
  314. package/docs/pl/dictionary/enumeration.md +245 -0
  315. package/docs/pl/dictionary/file.md +234 -0
  316. package/docs/pl/dictionary/function_fetching.md +214 -0
  317. package/docs/pl/dictionary/gender.md +276 -0
  318. package/docs/pl/dictionary/insertion.md +188 -0
  319. package/docs/pl/dictionary/markdown.md +408 -0
  320. package/docs/pl/dictionary/nesting.md +273 -0
  321. package/docs/pl/dictionary/translation.md +310 -0
  322. package/docs/pl/formatters.md +596 -0
  323. package/docs/pl/how_works_intlayer.md +256 -0
  324. package/docs/pl/index.md +176 -0
  325. package/docs/pl/interest_of_intlayer.md +291 -0
  326. package/docs/pl/intlayer_CMS.md +549 -0
  327. package/docs/pl/intlayer_cli.md +857 -0
  328. package/docs/pl/intlayer_visual_editor.md +288 -0
  329. package/docs/pl/intlayer_with_angular.md +690 -0
  330. package/docs/pl/intlayer_with_astro.md +280 -0
  331. package/docs/pl/intlayer_with_create_react_app.md +1235 -0
  332. package/docs/pl/intlayer_with_express.md +411 -0
  333. package/docs/pl/intlayer_with_lynx+react.md +518 -0
  334. package/docs/pl/intlayer_with_nestjs.md +272 -0
  335. package/docs/pl/intlayer_with_next-i18next.md +628 -0
  336. package/docs/pl/intlayer_with_next-intl.md +446 -0
  337. package/docs/pl/intlayer_with_nextjs_14.md +1594 -0
  338. package/docs/pl/intlayer_with_nextjs_15.md +1701 -0
  339. package/docs/pl/intlayer_with_nextjs_16.md +21 -0
  340. package/docs/pl/intlayer_with_nextjs_page_router.md +1513 -0
  341. package/docs/pl/intlayer_with_nuxt.md +885 -0
  342. package/docs/pl/intlayer_with_react_native+expo.md +698 -0
  343. package/docs/pl/intlayer_with_react_router_v7.md +503 -0
  344. package/docs/pl/intlayer_with_tanstack.md +562 -0
  345. package/docs/pl/intlayer_with_vite+preact.md +1736 -0
  346. package/docs/pl/intlayer_with_vite+react.md +1438 -0
  347. package/docs/pl/intlayer_with_vite+solid.md +290 -0
  348. package/docs/pl/intlayer_with_vite+svelte.md +289 -0
  349. package/docs/pl/intlayer_with_vite+vue.md +1116 -0
  350. package/docs/pl/introduction.md +209 -0
  351. package/docs/pl/locale_mapper.md +242 -0
  352. package/docs/pl/mcp_server.md +211 -0
  353. package/docs/pl/packages/express-intlayer/t.md +458 -0
  354. package/docs/pl/packages/intlayer/getConfiguration.md +146 -0
  355. package/docs/pl/packages/intlayer/getEnumeration.md +160 -0
  356. package/docs/pl/packages/intlayer/getHTMLTextDir.md +121 -0
  357. package/docs/pl/packages/intlayer/getLocaleLang.md +81 -0
  358. package/docs/pl/packages/intlayer/getLocaleName.md +118 -0
  359. package/docs/pl/packages/intlayer/getLocalizedUrl.md +300 -0
  360. package/docs/pl/packages/intlayer/getMultilingualUrls.md +221 -0
  361. package/docs/pl/packages/intlayer/getPathWithoutLocale.md +75 -0
  362. package/docs/pl/packages/intlayer/getTranslation.md +190 -0
  363. package/docs/pl/packages/intlayer/getTranslationContent.md +189 -0
  364. package/docs/pl/packages/next-intlayer/t.md +353 -0
  365. package/docs/pl/packages/next-intlayer/useDictionary.md +270 -0
  366. package/docs/pl/packages/next-intlayer/useIntlayer.md +263 -0
  367. package/docs/pl/packages/next-intlayer/useLocale.md +166 -0
  368. package/docs/pl/packages/react-intlayer/t.md +303 -0
  369. package/docs/pl/packages/react-intlayer/useDictionary.md +289 -0
  370. package/docs/pl/packages/react-intlayer/useI18n.md +249 -0
  371. package/docs/pl/packages/react-intlayer/useIntlayer.md +256 -0
  372. package/docs/pl/packages/react-intlayer/useLocale.md +210 -0
  373. package/docs/pl/per_locale_file.md +321 -0
  374. package/docs/pl/readme.md +261 -0
  375. package/docs/pl/releases/v6.md +305 -0
  376. package/docs/pl/roadmap.md +362 -0
  377. package/docs/pl/testing.md +202 -0
  378. package/docs/pl/vs_code_extension.md +126 -0
  379. package/docs/pt/component_i18n.md +1 -1
  380. package/docs/pt/configuration.md +6 -0
  381. package/docs/pt/intlayer_cli.md +8 -3
  382. package/docs/pt/intlayer_with_next-i18next.md +627 -0
  383. package/docs/pt/intlayer_with_next-intl.md +446 -0
  384. package/docs/pt/intlayer_with_nextjs_16.md +21 -0
  385. package/docs/pt/intlayer_with_tanstack.md +4 -0
  386. package/docs/pt/intlayer_with_vite+react.md +4 -0
  387. package/docs/ru/component_i18n.md +1 -1
  388. package/docs/ru/configuration.md +6 -0
  389. package/docs/ru/intlayer_cli.md +301 -22
  390. package/docs/ru/intlayer_with_next-i18next.md +629 -0
  391. package/docs/ru/intlayer_with_next-intl.md +448 -0
  392. package/docs/ru/intlayer_with_nextjs_16.md +21 -0
  393. package/docs/ru/intlayer_with_tanstack.md +4 -0
  394. package/docs/ru/intlayer_with_vite+react.md +4 -0
  395. package/docs/tr/component_i18n.md +1 -1
  396. package/docs/tr/configuration.md +6 -0
  397. package/docs/tr/intlayer_cli.md +8 -0
  398. package/docs/tr/intlayer_with_next-i18next.md +627 -0
  399. package/docs/tr/intlayer_with_next-intl.md +446 -0
  400. package/docs/tr/intlayer_with_nextjs_16.md +21 -0
  401. package/docs/tr/intlayer_with_tanstack.md +4 -0
  402. package/docs/tr/intlayer_with_vite+react.md +4 -0
  403. package/docs/vi/CI_CD.md +198 -0
  404. package/docs/vi/autoFill.md +284 -0
  405. package/docs/vi/component_i18n.md +186 -0
  406. package/docs/vi/configuration.md +710 -0
  407. package/docs/vi/dictionary/condition.md +237 -0
  408. package/docs/vi/dictionary/content_file.md +1115 -0
  409. package/docs/vi/dictionary/enumeration.md +255 -0
  410. package/docs/vi/dictionary/file.md +234 -0
  411. package/docs/vi/dictionary/function_fetching.md +212 -0
  412. package/docs/vi/dictionary/gender.md +275 -0
  413. package/docs/vi/dictionary/insertion.md +191 -0
  414. package/docs/vi/dictionary/markdown.md +381 -0
  415. package/docs/vi/dictionary/nesting.md +273 -0
  416. package/docs/vi/dictionary/translation.md +309 -0
  417. package/docs/vi/formatters.md +595 -0
  418. package/docs/vi/how_works_intlayer.md +256 -0
  419. package/docs/vi/index.md +174 -0
  420. package/docs/vi/interest_of_intlayer.md +292 -0
  421. package/docs/vi/intlayer_CMS.md +549 -0
  422. package/docs/vi/intlayer_cli.md +850 -0
  423. package/docs/vi/intlayer_visual_editor.md +288 -0
  424. package/docs/vi/intlayer_with_angular.md +692 -0
  425. package/docs/vi/intlayer_with_astro.md +252 -0
  426. package/docs/vi/intlayer_with_create_react_app.md +1230 -0
  427. package/docs/vi/intlayer_with_express.md +409 -0
  428. package/docs/vi/intlayer_with_lynx+react.md +520 -0
  429. package/docs/vi/intlayer_with_nestjs.md +272 -0
  430. package/docs/vi/intlayer_with_next-i18next.md +628 -0
  431. package/docs/vi/intlayer_with_next-intl.md +446 -0
  432. package/docs/vi/intlayer_with_nextjs_14.md +1584 -0
  433. package/docs/vi/intlayer_with_nextjs_15.md +1738 -0
  434. package/docs/vi/intlayer_with_nextjs_16.md +21 -0
  435. package/docs/vi/intlayer_with_nextjs_page_router.md +1504 -0
  436. package/docs/vi/intlayer_with_nuxt.md +821 -0
  437. package/docs/vi/intlayer_with_react_native+expo.md +700 -0
  438. package/docs/vi/intlayer_with_react_router_v7.md +498 -0
  439. package/docs/vi/intlayer_with_tanstack.md +562 -0
  440. package/docs/vi/intlayer_with_vite+preact.md +1722 -0
  441. package/docs/vi/intlayer_with_vite+react.md +1407 -0
  442. package/docs/vi/intlayer_with_vite+solid.md +287 -0
  443. package/docs/vi/intlayer_with_vite+svelte.md +289 -0
  444. package/docs/vi/intlayer_with_vite+vue.md +1071 -0
  445. package/docs/vi/introduction.md +215 -0
  446. package/docs/vi/locale_mapper.md +242 -0
  447. package/docs/vi/mcp_server.md +211 -0
  448. package/docs/vi/packages/express-intlayer/t.md +457 -0
  449. package/docs/vi/packages/intlayer/getConfiguration.md +145 -0
  450. package/docs/vi/packages/intlayer/getEnumeration.md +162 -0
  451. package/docs/vi/packages/intlayer/getHTMLTextDir.md +121 -0
  452. package/docs/vi/packages/intlayer/getLocaleLang.md +81 -0
  453. package/docs/vi/packages/intlayer/getLocaleName.md +129 -0
  454. package/docs/vi/packages/intlayer/getLocalizedUrl.md +309 -0
  455. package/docs/vi/packages/intlayer/getMultilingualUrls.md +221 -0
  456. package/docs/vi/packages/intlayer/getPathWithoutLocale.md +75 -0
  457. package/docs/vi/packages/intlayer/getTranslation.md +201 -0
  458. package/docs/vi/packages/intlayer/getTranslationContent.md +188 -0
  459. package/docs/vi/packages/next-intlayer/t.md +352 -0
  460. package/docs/vi/packages/next-intlayer/useDictionary.md +273 -0
  461. package/docs/vi/packages/next-intlayer/useIntlayer.md +264 -0
  462. package/docs/vi/packages/next-intlayer/useLocale.md +166 -0
  463. package/docs/vi/packages/react-intlayer/t.md +304 -0
  464. package/docs/vi/packages/react-intlayer/useDictionary.md +288 -0
  465. package/docs/vi/packages/react-intlayer/useI18n.md +295 -0
  466. package/docs/vi/packages/react-intlayer/useIntlayer.md +256 -0
  467. package/docs/vi/packages/react-intlayer/useLocale.md +210 -0
  468. package/docs/vi/per_locale_file.md +326 -0
  469. package/docs/vi/readme.md +261 -0
  470. package/docs/vi/releases/v6.md +305 -0
  471. package/docs/vi/roadmap.md +346 -0
  472. package/docs/vi/testing.md +202 -0
  473. package/docs/vi/vs_code_extension.md +126 -0
  474. package/docs/zh/configuration.md +6 -0
  475. package/docs/zh/intlayer_cli.md +8 -3
  476. package/docs/zh/intlayer_with_next-i18next.md +628 -0
  477. package/docs/zh/intlayer_with_next-intl.md +448 -0
  478. package/docs/zh/intlayer_with_nextjs_16.md +21 -0
  479. package/docs/zh/intlayer_with_tanstack.md +4 -0
  480. package/docs/zh/intlayer_with_vite+react.md +4 -0
  481. package/frequent_questions/ar/SSR_Next_no_[locale].md +1 -2
  482. package/frequent_questions/ar/array_as_content_declaration.md +1 -2
  483. package/frequent_questions/ar/build_dictionaries.md +1 -2
  484. package/frequent_questions/ar/build_error_CI_CD.md +1 -2
  485. package/frequent_questions/ar/bun_set_up.md +1 -2
  486. package/frequent_questions/ar/customized_locale_list.md +1 -2
  487. package/frequent_questions/ar/domain_routing.md +1 -2
  488. package/frequent_questions/ar/esbuild_error.md +1 -2
  489. package/frequent_questions/ar/get_locale_cookie.md +1 -2
  490. package/frequent_questions/ar/intlayer_command_undefined.md +1 -2
  491. package/frequent_questions/ar/locale_incorect_in_url.md +1 -2
  492. package/frequent_questions/ar/static_rendering.md +1 -3
  493. package/frequent_questions/ar/translated_path_url.md +1 -2
  494. package/frequent_questions/ar/unknown_command.md +1 -2
  495. package/frequent_questions/de/SSR_Next_no_[locale].md +1 -2
  496. package/frequent_questions/de/array_as_content_declaration.md +1 -2
  497. package/frequent_questions/de/build_dictionaries.md +1 -2
  498. package/frequent_questions/de/build_error_CI_CD.md +1 -2
  499. package/frequent_questions/de/bun_set_up.md +1 -2
  500. package/frequent_questions/de/customized_locale_list.md +1 -2
  501. package/frequent_questions/de/domain_routing.md +1 -2
  502. package/frequent_questions/de/esbuild_error.md +1 -2
  503. package/frequent_questions/de/get_locale_cookie.md +1 -2
  504. package/frequent_questions/de/intlayer_command_undefined.md +1 -2
  505. package/frequent_questions/de/locale_incorect_in_url.md +1 -2
  506. package/frequent_questions/de/static_rendering.md +1 -3
  507. package/frequent_questions/de/translated_path_url.md +1 -2
  508. package/frequent_questions/de/unknown_command.md +1 -2
  509. package/frequent_questions/en/SSR_Next_no_[locale].md +1 -2
  510. package/frequent_questions/en/array_as_content_declaration.md +1 -2
  511. package/frequent_questions/en/build_dictionaries.md +1 -2
  512. package/frequent_questions/en/build_error_CI_CD.md +1 -2
  513. package/frequent_questions/en/bun_set_up.md +1 -2
  514. package/frequent_questions/en/customized_locale_list.md +1 -2
  515. package/frequent_questions/en/domain_routing.md +1 -2
  516. package/frequent_questions/en/esbuild_error.md +1 -2
  517. package/frequent_questions/en/get_locale_cookie.md +1 -2
  518. package/frequent_questions/en/intlayer_command_undefined.md +1 -2
  519. package/frequent_questions/en/locale_incorect_in_url.md +1 -2
  520. package/frequent_questions/en/static_rendering.md +1 -3
  521. package/frequent_questions/en/translated_path_url.md +1 -2
  522. package/frequent_questions/en/unknown_command.md +1 -2
  523. package/frequent_questions/en-GB/SSR_Next_no_[locale].md +1 -2
  524. package/frequent_questions/en-GB/array_as_content_declaration.md +1 -2
  525. package/frequent_questions/en-GB/build_dictionaries.md +1 -2
  526. package/frequent_questions/en-GB/build_error_CI_CD.md +1 -2
  527. package/frequent_questions/en-GB/bun_set_up.md +1 -2
  528. package/frequent_questions/en-GB/customized_locale_list.md +1 -2
  529. package/frequent_questions/en-GB/domain_routing.md +1 -2
  530. package/frequent_questions/en-GB/esbuild_error.md +1 -2
  531. package/frequent_questions/en-GB/get_locale_cookie.md +1 -2
  532. package/frequent_questions/en-GB/intlayer_command_undefined.md +1 -2
  533. package/frequent_questions/en-GB/locale_incorect_in_url.md +1 -2
  534. package/frequent_questions/en-GB/static_rendering.md +1 -3
  535. package/frequent_questions/en-GB/translated_path_url.md +1 -2
  536. package/frequent_questions/en-GB/unknown_command.md +1 -2
  537. package/frequent_questions/es/SSR_Next_no_[locale].md +1 -2
  538. package/frequent_questions/es/array_as_content_declaration.md +1 -2
  539. package/frequent_questions/es/build_dictionaries.md +1 -2
  540. package/frequent_questions/es/build_error_CI_CD.md +1 -2
  541. package/frequent_questions/es/bun_set_up.md +1 -2
  542. package/frequent_questions/es/customized_locale_list.md +1 -2
  543. package/frequent_questions/es/domain_routing.md +1 -2
  544. package/frequent_questions/es/esbuild_error.md +1 -2
  545. package/frequent_questions/es/get_locale_cookie.md +1 -2
  546. package/frequent_questions/es/intlayer_command_undefined.md +1 -2
  547. package/frequent_questions/es/locale_incorect_in_url.md +1 -2
  548. package/frequent_questions/es/static_rendering.md +1 -3
  549. package/frequent_questions/es/translated_path_url.md +1 -2
  550. package/frequent_questions/es/unknown_command.md +1 -2
  551. package/frequent_questions/fr/SSR_Next_no_[locale].md +1 -2
  552. package/frequent_questions/fr/array_as_content_declaration.md +1 -2
  553. package/frequent_questions/fr/build_dictionaries.md +1 -2
  554. package/frequent_questions/fr/build_error_CI_CD.md +1 -2
  555. package/frequent_questions/fr/bun_set_up.md +1 -2
  556. package/frequent_questions/fr/customized_locale_list.md +1 -2
  557. package/frequent_questions/fr/domain_routing.md +1 -2
  558. package/frequent_questions/fr/esbuild_error.md +1 -2
  559. package/frequent_questions/fr/get_locale_cookie.md +1 -2
  560. package/frequent_questions/fr/intlayer_command_undefined.md +1 -2
  561. package/frequent_questions/fr/locale_incorect_in_url.md +1 -2
  562. package/frequent_questions/fr/static_rendering.md +1 -3
  563. package/frequent_questions/fr/translated_path_url.md +1 -2
  564. package/frequent_questions/fr/unknown_command.md +1 -2
  565. package/frequent_questions/hi/SSR_Next_no_[locale].md +1 -2
  566. package/frequent_questions/hi/array_as_content_declaration.md +1 -2
  567. package/frequent_questions/hi/build_dictionaries.md +1 -2
  568. package/frequent_questions/hi/build_error_CI_CD.md +1 -2
  569. package/frequent_questions/hi/bun_set_up.md +1 -2
  570. package/frequent_questions/hi/customized_locale_list.md +1 -2
  571. package/frequent_questions/hi/domain_routing.md +1 -2
  572. package/frequent_questions/hi/esbuild_error.md +1 -2
  573. package/frequent_questions/hi/get_locale_cookie.md +1 -2
  574. package/frequent_questions/hi/intlayer_command_undefined.md +1 -2
  575. package/frequent_questions/hi/locale_incorect_in_url.md +1 -2
  576. package/frequent_questions/hi/static_rendering.md +1 -3
  577. package/frequent_questions/hi/translated_path_url.md +1 -2
  578. package/frequent_questions/hi/unknown_command.md +1 -2
  579. package/frequent_questions/id/SSR_Next_no_[locale].md +104 -0
  580. package/frequent_questions/id/array_as_content_declaration.md +71 -0
  581. package/frequent_questions/id/build_dictionaries.md +58 -0
  582. package/frequent_questions/id/build_error_CI_CD.md +74 -0
  583. package/frequent_questions/id/bun_set_up.md +53 -0
  584. package/frequent_questions/id/customized_locale_list.md +64 -0
  585. package/frequent_questions/id/domain_routing.md +113 -0
  586. package/frequent_questions/id/esbuild_error.md +29 -0
  587. package/frequent_questions/id/get_locale_cookie.md +142 -0
  588. package/frequent_questions/id/intlayer_command_undefined.md +155 -0
  589. package/frequent_questions/id/locale_incorect_in_url.md +73 -0
  590. package/frequent_questions/id/static_rendering.md +44 -0
  591. package/frequent_questions/id/translated_path_url.md +55 -0
  592. package/frequent_questions/id/unknown_command.md +97 -0
  593. package/frequent_questions/it/SSR_Next_no_[locale].md +1 -2
  594. package/frequent_questions/it/array_as_content_declaration.md +1 -2
  595. package/frequent_questions/it/build_dictionaries.md +1 -2
  596. package/frequent_questions/it/build_error_CI_CD.md +1 -2
  597. package/frequent_questions/it/bun_set_up.md +1 -2
  598. package/frequent_questions/it/customized_locale_list.md +1 -2
  599. package/frequent_questions/it/domain_routing.md +1 -2
  600. package/frequent_questions/it/esbuild_error.md +1 -2
  601. package/frequent_questions/it/get_locale_cookie.md +1 -2
  602. package/frequent_questions/it/intlayer_command_undefined.md +1 -2
  603. package/frequent_questions/it/locale_incorect_in_url.md +1 -2
  604. package/frequent_questions/it/static_rendering.md +1 -3
  605. package/frequent_questions/it/translated_path_url.md +1 -2
  606. package/frequent_questions/it/unknown_command.md +1 -2
  607. package/frequent_questions/ja/SSR_Next_no_[locale].md +1 -2
  608. package/frequent_questions/ja/array_as_content_declaration.md +1 -2
  609. package/frequent_questions/ja/build_dictionaries.md +1 -2
  610. package/frequent_questions/ja/build_error_CI_CD.md +1 -2
  611. package/frequent_questions/ja/bun_set_up.md +1 -2
  612. package/frequent_questions/ja/customized_locale_list.md +1 -2
  613. package/frequent_questions/ja/domain_routing.md +1 -2
  614. package/frequent_questions/ja/esbuild_error.md +1 -2
  615. package/frequent_questions/ja/get_locale_cookie.md +1 -2
  616. package/frequent_questions/ja/intlayer_command_undefined.md +1 -2
  617. package/frequent_questions/ja/locale_incorect_in_url.md +1 -2
  618. package/frequent_questions/ja/static_rendering.md +1 -3
  619. package/frequent_questions/ja/translated_path_url.md +1 -2
  620. package/frequent_questions/ja/unknown_command.md +1 -2
  621. package/frequent_questions/ko/SSR_Next_no_[locale].md +1 -2
  622. package/frequent_questions/ko/array_as_content_declaration.md +1 -2
  623. package/frequent_questions/ko/build_dictionaries.md +1 -2
  624. package/frequent_questions/ko/build_error_CI_CD.md +1 -2
  625. package/frequent_questions/ko/bun_set_up.md +1 -2
  626. package/frequent_questions/ko/customized_locale_list.md +1 -2
  627. package/frequent_questions/ko/domain_routing.md +1 -2
  628. package/frequent_questions/ko/esbuild_error.md +1 -2
  629. package/frequent_questions/ko/get_locale_cookie.md +1 -2
  630. package/frequent_questions/ko/intlayer_command_undefined.md +1 -2
  631. package/frequent_questions/ko/locale_incorect_in_url.md +1 -2
  632. package/frequent_questions/ko/static_rendering.md +1 -3
  633. package/frequent_questions/ko/translated_path_url.md +1 -2
  634. package/frequent_questions/ko/unknown_command.md +1 -2
  635. package/frequent_questions/pl/SSR_Next_no_[locale].md +104 -0
  636. package/frequent_questions/pl/array_as_content_declaration.md +71 -0
  637. package/frequent_questions/pl/build_dictionaries.md +58 -0
  638. package/frequent_questions/pl/build_error_CI_CD.md +74 -0
  639. package/frequent_questions/pl/bun_set_up.md +54 -0
  640. package/frequent_questions/pl/customized_locale_list.md +64 -0
  641. package/frequent_questions/pl/domain_routing.md +113 -0
  642. package/frequent_questions/pl/esbuild_error.md +29 -0
  643. package/frequent_questions/pl/get_locale_cookie.md +142 -0
  644. package/frequent_questions/pl/intlayer_command_undefined.md +155 -0
  645. package/frequent_questions/pl/locale_incorect_in_url.md +73 -0
  646. package/frequent_questions/pl/static_rendering.md +44 -0
  647. package/frequent_questions/pl/translated_path_url.md +55 -0
  648. package/frequent_questions/pl/unknown_command.md +97 -0
  649. package/frequent_questions/pt/SSR_Next_no_[locale].md +1 -2
  650. package/frequent_questions/pt/array_as_content_declaration.md +1 -2
  651. package/frequent_questions/pt/build_dictionaries.md +1 -2
  652. package/frequent_questions/pt/build_error_CI_CD.md +1 -2
  653. package/frequent_questions/pt/bun_set_up.md +1 -2
  654. package/frequent_questions/pt/customized_locale_list.md +1 -2
  655. package/frequent_questions/pt/domain_routing.md +1 -2
  656. package/frequent_questions/pt/esbuild_error.md +1 -2
  657. package/frequent_questions/pt/get_locale_cookie.md +1 -2
  658. package/frequent_questions/pt/intlayer_command_undefined.md +1 -2
  659. package/frequent_questions/pt/locale_incorect_in_url.md +1 -2
  660. package/frequent_questions/pt/static_rendering.md +1 -3
  661. package/frequent_questions/pt/translated_path_url.md +1 -2
  662. package/frequent_questions/pt/unknown_command.md +1 -2
  663. package/frequent_questions/ru/SSR_Next_no_[locale].md +1 -2
  664. package/frequent_questions/ru/array_as_content_declaration.md +1 -2
  665. package/frequent_questions/ru/build_dictionaries.md +1 -2
  666. package/frequent_questions/ru/build_error_CI_CD.md +1 -2
  667. package/frequent_questions/ru/bun_set_up.md +1 -2
  668. package/frequent_questions/ru/customized_locale_list.md +1 -2
  669. package/frequent_questions/ru/domain_routing.md +1 -2
  670. package/frequent_questions/ru/esbuild_error.md +1 -2
  671. package/frequent_questions/ru/get_locale_cookie.md +1 -2
  672. package/frequent_questions/ru/intlayer_command_undefined.md +1 -2
  673. package/frequent_questions/ru/locale_incorect_in_url.md +1 -2
  674. package/frequent_questions/ru/static_rendering.md +1 -2
  675. package/frequent_questions/ru/translated_path_url.md +1 -2
  676. package/frequent_questions/ru/unknown_command.md +1 -2
  677. package/frequent_questions/tr/SSR_Next_no_[locale].md +1 -2
  678. package/frequent_questions/tr/array_as_content_declaration.md +1 -2
  679. package/frequent_questions/tr/build_dictionaries.md +1 -2
  680. package/frequent_questions/tr/build_error_CI_CD.md +1 -2
  681. package/frequent_questions/tr/bun_set_up.md +1 -2
  682. package/frequent_questions/tr/customized_locale_list.md +1 -2
  683. package/frequent_questions/tr/domain_routing.md +1 -2
  684. package/frequent_questions/tr/esbuild_error.md +1 -2
  685. package/frequent_questions/tr/get_locale_cookie.md +1 -2
  686. package/frequent_questions/tr/intlayer_command_undefined.md +1 -2
  687. package/frequent_questions/tr/locale_incorect_in_url.md +1 -2
  688. package/frequent_questions/tr/static_rendering.md +1 -2
  689. package/frequent_questions/tr/translated_path_url.md +1 -2
  690. package/frequent_questions/tr/unknown_command.md +1 -2
  691. package/frequent_questions/vi/SSR_Next_no_[locale].md +106 -0
  692. package/frequent_questions/vi/array_as_content_declaration.md +71 -0
  693. package/frequent_questions/vi/build_dictionaries.md +58 -0
  694. package/frequent_questions/vi/build_error_CI_CD.md +74 -0
  695. package/frequent_questions/vi/bun_set_up.md +53 -0
  696. package/frequent_questions/vi/customized_locale_list.md +64 -0
  697. package/frequent_questions/vi/domain_routing.md +113 -0
  698. package/frequent_questions/vi/esbuild_error.md +29 -0
  699. package/frequent_questions/vi/get_locale_cookie.md +142 -0
  700. package/frequent_questions/vi/intlayer_command_undefined.md +155 -0
  701. package/frequent_questions/vi/locale_incorect_in_url.md +73 -0
  702. package/frequent_questions/vi/static_rendering.md +44 -0
  703. package/frequent_questions/vi/translated_path_url.md +55 -0
  704. package/frequent_questions/vi/unknown_command.md +97 -0
  705. package/frequent_questions/zh/SSR_Next_no_[locale].md +1 -2
  706. package/frequent_questions/zh/array_as_content_declaration.md +1 -2
  707. package/frequent_questions/zh/build_dictionaries.md +1 -2
  708. package/frequent_questions/zh/build_error_CI_CD.md +1 -2
  709. package/frequent_questions/zh/bun_set_up.md +1 -2
  710. package/frequent_questions/zh/customized_locale_list.md +1 -2
  711. package/frequent_questions/zh/domain_routing.md +1 -2
  712. package/frequent_questions/zh/esbuild_error.md +1 -2
  713. package/frequent_questions/zh/get_locale_cookie.md +1 -2
  714. package/frequent_questions/zh/intlayer_command_undefined.md +1 -2
  715. package/frequent_questions/zh/locale_incorect_in_url.md +1 -2
  716. package/frequent_questions/zh/static_rendering.md +1 -3
  717. package/frequent_questions/zh/translated_path_url.md +1 -2
  718. package/frequent_questions/zh/unknown_command.md +1 -2
  719. package/legal/id/privacy_notice.md +83 -0
  720. package/legal/id/terms_of_service.md +55 -0
  721. package/legal/pl/privacy_notice.md +83 -0
  722. package/legal/pl/terms_of_service.md +55 -0
  723. package/legal/vi/privacy_notice.md +83 -0
  724. package/legal/vi/terms_of_service.md +55 -0
  725. package/package.json +19 -18
  726. package/src/generated/blog.entry.ts +38 -0
@@ -0,0 +1,1115 @@
1
+ ---
2
+ createdAt: 2025-02-07
3
+ updatedAt: 2025-09-20
4
+ title: Tệp Nội Dung
5
+ description: Tìm hiểu cách tùy chỉnh các phần mở rộng cho các tệp khai báo nội dung của bạn. Theo dõi tài liệu này để triển khai các điều kiện một cách hiệu quả trong dự án của bạn.
6
+ keywords:
7
+ - Tệp Nội Dung
8
+ - Tài liệu
9
+ - Intlayer
10
+ slugs:
11
+ - doc
12
+ - concept
13
+ - content
14
+ history:
15
+ - version: 7.0.0
16
+ date: 2025-10-23
17
+ changes: Đổi tên `autoFill` thành `fill`
18
+ - version: 6.0.0
19
+ date: 2025-09-20
20
+ changes: Thêm tài liệu cho các trường
21
+ - version: 5.5.10
22
+ date: 2025-06-29
23
+ changes: Khởi tạo lịch sử
24
+ ---
25
+
26
+ # Tệp Nội Dung
27
+
28
+ <iframe title="i18n, Markdown, JSON… một giải pháp duy nhất để quản lý tất cả | Intlayer" class="m-auto aspect-[16/9] w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/1VHgSY_j9_I?autoplay=0&amp;origin=http://intlayer.org&amp;controls=0&amp;rel=1"/>
29
+
30
+ ## Tệp Nội Dung là gì?
31
+
32
+ Tệp nội dung trong Intlayer là một tệp chứa các định nghĩa từ điển.
33
+ Những tệp này khai báo nội dung văn bản, bản dịch và tài nguyên của ứng dụng của bạn.
34
+ Các tệp nội dung được Intlayer xử lý để tạo ra các từ điển.
35
+
36
+ Các từ điển sẽ là kết quả cuối cùng mà ứng dụng của bạn sẽ nhập khẩu bằng cách sử dụng hook `useIntlayer`.
37
+
38
+ ### Các Khái Niệm Chính
39
+
40
+ #### Từ điển
41
+
42
+ Một từ điển là một tập hợp có cấu trúc của nội dung được tổ chức theo các khóa. Mỗi từ điển bao gồm:
43
+
44
+ - **Khóa**: Một định danh duy nhất cho từ điển
45
+ - **Nội dung**: Các giá trị nội dung thực tế (văn bản, số, đối tượng, v.v.)
46
+ - **Metadata**: Thông tin bổ sung như tiêu đề, mô tả, thẻ, v.v.
47
+
48
+ #### Tệp Nội Dung
49
+
50
+ Ví dụ về tệp nội dung:
51
+
52
+ ```tsx fileName="src/example.content.tsx" contentDeclarationFormat="typescript"
53
+ import { type ReactNode } from "react";
54
+ import {
55
+ t,
56
+ enu,
57
+ cond,
58
+ nest,
59
+ md,
60
+ insert,
61
+ file,
62
+ type Dictionary,
63
+ } from "intlayer";
64
+
65
+ interface Content {
66
+ imbricatedContent: {
67
+ imbricatedContent2: {
68
+ stringContent: string;
69
+ numberContent: number;
70
+ booleanContent: boolean;
71
+ javaScriptContent: string;
72
+ };
73
+ };
74
+ multilingualContent: string;
75
+ quantityContent: string;
76
+ conditionalContent: string;
77
+ markdownContent: never;
78
+ externalContent: string;
79
+ insertionContent: string;
80
+ nestedContent: string;
81
+ fileContent: string;
82
+ jsxContent: ReactNode;
83
+ }
84
+
85
+ export default {
86
+ key: "page",
87
+ content: {
88
+ imbricatedContent: {
89
+ imbricatedContent2: {
90
+ stringContent: "Xin chào Thế giới", // Nội dung chuỗi
91
+ numberContent: 123, // Nội dung số
92
+ booleanContent: true, // Nội dung boolean
93
+ javaScriptContent: `${process.env.NODE_ENV}`, // Nội dung JavaScript
94
+ },
95
+ },
96
+ multilingualContent: t({
97
+ en: "Nội dung tiếng Anh",
98
+ "en-GB": "Nội dung tiếng Anh (UK)",
99
+ fr: "Nội dung tiếng Pháp",
100
+ es: "Nội dung tiếng Tây Ban Nha",
101
+ }),
102
+ quantityContent: enu({
103
+ "<-1": "Ít hơn âm một chiếc xe",
104
+ "-1": "Âm một chiếc xe",
105
+ "0": "Không có xe nào",
106
+ "1": "Một chiếc xe",
107
+ ">5": "Một vài chiếc xe",
108
+ ">19": "Nhiều chiếc xe",
109
+ }),
110
+ conditionalContent: cond({
111
+ true: "Xác thực được bật",
112
+ false: "Xác thực bị tắt",
113
+ }),
114
+ insertionContent: insert("Xin chào {{name}}!"),
115
+ nestedContent: nest(
116
+ "navbar", // Khóa của từ điển để lồng vào
117
+ "login.button" // [Tùy chọn] Đường dẫn đến nội dung để lồng vào
118
+ ),
119
+ fileContent: file("./path/to/file.txt"),
120
+ externalContent: fetch("https://example.com").then((res) => res.json()),
121
+ markdownContent: md("# Ví dụ Markdown"),
122
+
123
+ /*
124
+ * Chỉ có sẵn khi sử dụng `react-intlayer` hoặc `next-intlayer`
125
+ */
126
+ jsxContent: <h1>Tiêu đề của tôi</h1>,
127
+ },
128
+ } satisfies Dictionary<Content>; // [tùy chọn] Dictionary là generic và cho phép bạn củng cố định dạng của từ điển
129
+ ```
130
+
131
+ ```javascript fileName="src/example.content.mjx" contentDeclarationFormat="esm"
132
+ import { t, enu, cond, nest, md, insert, file } from "intlayer";
133
+
134
+ /** @type {import('intlayer').Dictionary} */
135
+ export default {
136
+ key: "page",
137
+ content: {
138
+ imbricatedContent: {
139
+ imbricatedContent2: {
140
+ stringContent: "Xin chào Thế giới", // Nội dung chuỗi
141
+ numberContent: 123, // Nội dung số
142
+ booleanContent: true, // Nội dung boolean
143
+ javaScriptContent: `${process.env.NODE_ENV}`, // Nội dung JavaScript
144
+ },
145
+ imbricatedArray: [1, 2, 3], // Mảng lồng nhau
146
+ },
147
+ multilingualContent: t({
148
+ en: "English content",
149
+ "en-GB": "English content (UK)",
150
+ fr: "French content",
151
+ es: "Spanish content",
152
+ }),
153
+ quantityContent: enu({
154
+ "<-1": "Ít hơn âm một chiếc xe",
155
+ "-1": "Âm một chiếc xe",
156
+ "0": "Không có xe",
157
+ "1": "Một chiếc xe",
158
+ ">5": "Một vài chiếc xe",
159
+ ">19": "Nhiều chiếc xe",
160
+ }),
161
+ conditionalContent: cond({
162
+ true: "Xác thực được bật",
163
+ false: "Xác thực bị tắt",
164
+ }),
165
+ insertionContent: insert("Xin chào {{name}}!"),
166
+ nestedContent: nest(
167
+ "navbar", // Khóa của dictionary để lồng vào
168
+ "login.button" // [Tùy chọn] Đường dẫn đến nội dung để lồng vào
169
+ ),
170
+ markdownContent: md("# Ví dụ Markdown"),
171
+ fileContent: file("./path/to/file.txt"),
172
+ externalContent: fetch("https://example.com").then((res) => res.json())
173
+
174
+ // Chỉ có sẵn khi sử dụng `react-intlayer` hoặc `next-intlayer`
175
+ jsxContent: <h1>Tiêu đề của tôi</h1>,
176
+ },
177
+ };
178
+ ```
179
+
180
+ ```javascript fileName="src/example.content.cjx" contentDeclarationFormat="commonjs"
181
+ const { t, enu, cond, nest, md, insert, file } = require("intlayer");
182
+
183
+ /** @type {import('intlayer').Dictionary} */
184
+ module.exports = {
185
+ key: "page",
186
+ content: {
187
+ imbricatedContent: {
188
+ imbricatedContent2: {
189
+ stringContent: "Xin chào Thế giới",
190
+ numberContent: 123,
191
+ booleanContent: true,
192
+ javaScriptContent: `${process.env.NODE_ENV}`, // Biến môi trường Node.js
193
+ },
194
+ imbricatedArray: [1, 2, 3],
195
+ },
196
+ multilingualContent: t({
197
+ en: "English content",
198
+ "en-GB": "English content (UK)",
199
+ fr: "French content",
200
+ es: "Spanish content",
201
+ }),
202
+ quantityContent: enu({
203
+ "<-1": "Ít hơn âm một chiếc xe",
204
+ "-1": "Âm một chiếc xe",
205
+ "0": "Không có chiếc xe nào",
206
+ "1": "Một chiếc xe",
207
+ ">5": "Một vài chiếc xe",
208
+ ">19": "Nhiều chiếc xe",
209
+ }),
210
+ conditionalContent: cond({
211
+ true: "Xác thực được bật",
212
+ false: "Xác thực bị tắt",
213
+ }),
214
+ insertionContent: insert("Xin chào {{name}}!"),
215
+ nestedContent: nest(
216
+ "navbar", // Khóa của từ điển để lồng vào
217
+ "login.button" // [Tùy chọn] Đường dẫn đến nội dung để lồng vào
218
+ ),
219
+ markdownContent: md("# Ví dụ Markdown"),
220
+ fileContent: file("./path/to/file.txt"),
221
+ externalContent: fetch("https://example.com").then((res) => res.json())
222
+
223
+ // Chỉ có sẵn khi sử dụng `react-intlayer` hoặc `next-intlayer`
224
+ jsxContent: <h1>Tiêu đề của tôi</h1>,
225
+ },
226
+ };
227
+ ```
228
+
229
+ ```json5 fileName="src/example.content.json" contentDeclarationFormat="json"
230
+ {
231
+ "$schema": "https://intlayer.org/schema.json",
232
+ "key": "page",
233
+ "content": {
234
+ "imbricatedContent": {
235
+ "imbricatedContent2": {
236
+ "stringContent": "Xin chào Thế giới",
237
+ "numberContent": 123,
238
+ "booleanContent": true,
239
+ },
240
+ "imbricatedArray": [1, 2, 3],
241
+ },
242
+ "multilingualContent": {
243
+ "nodeType": "translation",
244
+ "translation": {
245
+ "en": "Nội dung tiếng Anh",
246
+ "en-GB": "Nội dung tiếng Anh (UK)",
247
+ "fr": "Nội dung tiếng Pháp",
248
+ "es": "Nội dung tiếng Tây Ban Nha",
249
+ },
250
+ },
251
+ "quantityContent": {
252
+ "nodeType": "enumeration",
253
+ "enumeration": {
254
+ "0": "Không có xe",
255
+ "1": "Một chiếc xe",
256
+ "<-1": "Ít hơn âm một chiếc xe",
257
+ "-1": "Âm một chiếc xe",
258
+ ">5": "Một vài chiếc xe",
259
+ ">19": "Nhiều chiếc xe",
260
+ },
261
+ },
262
+ "conditionalContent": {
263
+ "nodeType": "condition",
264
+ "condition": {
265
+ "true": "Xác thực được bật",
266
+ "false": "Xác thực bị tắt",
267
+ },
268
+ },
269
+ "insertionContent": {
270
+ "nodeType": "insertion",
271
+ "insertion": "Xin chào {{name}}!",
272
+ },
273
+ "nestedContent": {
274
+ "nodeType": "nested",
275
+ "nested": { "dictionaryKey": "app" },
276
+ },
277
+ "markdownContent": {
278
+ "nodeType": "markdown",
279
+ "markdown": "# Ví dụ Markdown",
280
+ },
281
+ "fileContent": {
282
+ "nodeType": "file",
283
+ "file": "./path/to/file.txt",
284
+ },
285
+ "jsxContent": {
286
+ "type": "h1",
287
+ "key": null,
288
+ "ref": null,
289
+ "props": {
290
+ "children": ["Tiêu đề của tôi"],
291
+ },
292
+ },
293
+ },
294
+ }
295
+ ```
296
+
297
+ #### Các nút nội dung
298
+
299
+ Các nút nội dung là các khối xây dựng của nội dung từ điển. Chúng có thể là:
300
+
301
+ - **Giá trị nguyên thủy**: chuỗi, số, boolean, null, undefined
302
+ - **Node kiểu**: Các loại nội dung đặc biệt như bản dịch, điều kiện, markdown, v.v.
303
+ - **Hàm**: Nội dung động có thể được đánh giá tại thời gian chạy [xem Function Fetching](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/function_fetching.md)
304
+ - **Nội dung lồng nhau**: Tham chiếu đến các từ điển khác
305
+
306
+ #### Các loại nội dung
307
+
308
+ Intlayer hỗ trợ nhiều loại nội dung thông qua các node kiểu:
309
+
310
+ - **Nội dung bản dịch**: Văn bản đa ngôn ngữ với các giá trị theo từng locale [xem Nội dung bản dịch](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/translation_content.md)
311
+ - **Nội dung Điều kiện**: Nội dung có điều kiện dựa trên các biểu thức boolean [xem Nội dung Điều kiện](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/condition_content.md)
312
+ - **Nội dung Liệt kê**: Nội dung thay đổi dựa trên các giá trị được liệt kê [xem Nội dung Liệt kê](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/enumeration_content.md)
313
+ - **Nội dung Chèn**: Nội dung có thể được chèn vào các nội dung khác [xem Nội dung Chèn](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/insertion_content.md)
314
+ - **Nội dung Markdown**: Nội dung văn bản phong phú ở định dạng Markdown [xem Nội dung Markdown](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/markdown_content.md)
315
+ - **Nội dung Lồng nhau**: Tham chiếu đến các từ điển khác [xem Nội dung Lồng nhau](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/nested_content.md)
316
+ - **Nội dung Giới tính**: Nội dung thay đổi dựa trên giới tính [xem Nội dung Giới tính](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/gender_content.md)
317
+ - **Nội dung Tệp**: Tham chiếu đến các tệp bên ngoài [xem Nội dung Tệp](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/file_content.md)
318
+
319
+ ## Cấu trúc Từ điển
320
+
321
+ Một từ điển trong Intlayer được định nghĩa bởi kiểu `Dictionary` và chứa một số thuộc tính điều khiển hành vi của nó:
322
+
323
+ ### Thuộc tính Bắt buộc
324
+
325
+ #### `key` (string)
326
+
327
+ Định danh cho từ điển. Nếu nhiều từ điển có cùng một key, Intlayer sẽ tự động hợp nhất chúng.
328
+
329
+ > Sử dụng quy tắc đặt tên kebab-case (ví dụ: `"about-page-meta"`).
330
+
331
+ #### Content (string | number | boolean | object | array | function)
332
+
333
+ Thuộc tính `content` chứa dữ liệu thực tế của từ điển và hỗ trợ:
334
+
335
+ - **Giá trị nguyên thủy**: chuỗi, số, boolean, null, undefined
336
+ - **Typed nodes**: Các loại nội dung đặc biệt sử dụng các hàm trợ giúp của Intlayer
337
+ - **Đối tượng lồng nhau**: Cấu trúc dữ liệu phức tạp
338
+ - **Mảng**: Bộ sưu tập nội dung
339
+ - **Hàm**: Đánh giá nội dung động
340
+
341
+ ### Thuộc tính tùy chọn
342
+
343
+ #### `title` (string)
344
+
345
+ Tiêu đề dễ đọc cho con người của từ điển giúp nhận diện nó trong các trình soạn thảo và hệ thống CMS. Điều này đặc biệt hữu ích khi quản lý số lượng lớn từ điển hoặc khi làm việc với các giao diện quản lý nội dung.
346
+
347
+ **Ví dụ:**
348
+
349
+ ```typescript
350
+ {
351
+ key: "about-page-meta",
352
+ title: "Metadata Trang Giới Thiệu",
353
+ content: { /* ... */ }
354
+ }
355
+ ```
356
+
357
+ #### `description` (string)
358
+
359
+ Mô tả chi tiết giải thích mục đích của từ điển, hướng dẫn sử dụng và các lưu ý đặc biệt. Mô tả này cũng được sử dụng làm ngữ cảnh cho việc tạo bản dịch bằng AI, giúp duy trì chất lượng và sự nhất quán của bản dịch.
360
+
361
+ **Ví dụ:**
362
+
363
+ ```typescript
364
+ {
365
+ key: "about-page-meta",
366
+ description: [
367
+ "Từ điển này quản lý metadata của Trang Giới Thiệu",
368
+ "Xem xét các thực hành tốt cho SEO:",
369
+ "- Tiêu đề nên có độ dài từ 50 đến 60 ký tự",
370
+ "- Mô tả nên có độ dài từ 150 đến 160 ký tự",
371
+ ].join('\n'),
372
+ content: { /* ... */ }
373
+ }
374
+ ```
375
+
376
+ #### `tags` (string[])
377
+
378
+ Mảng các chuỗi dùng để phân loại và tổ chức các từ điển. Các thẻ cung cấp ngữ cảnh bổ sung và có thể được sử dụng để lọc, tìm kiếm hoặc tổ chức các từ điển trong các trình soạn thảo và hệ thống CMS.
379
+
380
+ **Ví dụ:**
381
+
382
+ ```typescript
383
+ {
384
+ key: "about-page-meta",
385
+ tags: ["metadata", "about-page", "seo"],
386
+ content: { /* ... */ }
387
+ }
388
+ ```
389
+
390
+ #### `locale` (LocalesValues)
391
+
392
+ Chuyển đổi từ điển thành từ điển theo từng locale, trong đó mỗi trường được khai báo trong nội dung sẽ tự động được chuyển thành một nút dịch. Khi thuộc tính này được thiết lập:
393
+
394
+ - Từ điển được xử lý như một từ điển đơn ngữ
395
+ - Mỗi trường trở thành một nút dịch cho ngôn ngữ cụ thể đó
396
+ - Bạn KHÔNG nên sử dụng các nút dịch (`t()`) trong nội dung khi sử dụng thuộc tính này
397
+ - Nếu không có thuộc tính này, từ điển sẽ được xử lý như một từ điển đa ngôn ngữ
398
+
399
+ > Xem [Khai báo nội dung theo ngôn ngữ trong Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/per_locale_file.md) để biết thêm thông tin.
400
+
401
+ **Ví dụ:**
402
+
403
+ ```json
404
+ // Từ điển theo ngôn ngữ
405
+ {
406
+ "key": "about-page",
407
+ "locale": "en",
408
+ "content": {
409
+ "title": "About Us", // Đây trở thành nút dịch cho 'en'
410
+ "description": "Learn more about our company"
411
+ }
412
+ }
413
+ ```
414
+
415
+ #### `fill` (Fill)
416
+
417
+ Hướng dẫn tự động điền nội dung từ điển từ các nguồn bên ngoài. Điều này có thể được cấu hình toàn cục trong `intlayer.config.ts` hoặc theo từng từ điển. Hỗ trợ nhiều định dạng:
418
+
419
+ - **`true`**: Bật tính năng điền cho tất cả các ngôn ngữ
420
+ - **`false`**: Tắt tính năng điền cho tất cả các ngôn ngữ
421
+ - **`string`**: Đường dẫn tới một tệp đơn hoặc mẫu với các biến
422
+ - **`object`**: Đường dẫn tệp theo từng ngôn ngữ
423
+
424
+ **Ví dụ:**
425
+
426
+ ```json
427
+ // Tắt tính năng điền
428
+ {
429
+ "fill": false
430
+ }
431
+ // Tệp đơn
432
+ {
433
+ "fill": "./translations/aboutPage.content.json"
434
+ }
435
+ // Mẫu với các biến
436
+ {
437
+ "fill": "/messages/{{locale}}/{{key}}/{{fileName}}.content.json"
438
+ }
439
+ // Cấu hình chi tiết theo từng ngôn ngữ
440
+ {
441
+ "fill": {
442
+ "en": "./translations/en/aboutPage.content.json",
443
+ "fr": "./translations/fr/aboutPage.content.json",
444
+ "es": "./translations/es/aboutPage.content.json"
445
+ }
446
+ }
447
+ ```
448
+
449
+ **Các biến có sẵn:**
450
+
451
+ - `{{locale}}` – Mã ngôn ngữ (ví dụ: `fr`, `es`)
452
+ - `{{fileName}}` – Tên tệp (ví dụ: `example`)
453
+ - `{{key}}` – Khóa từ điển (ví dụ: `example`)
454
+
455
+ > Xem thêm [Cấu hình Tự động điền trong Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/fill.md) để biết thêm thông tin.
456
+
457
+ ##### `priority` (number)
458
+
459
+ Chỉ định độ ưu tiên của từ điển để giải quyết xung đột. Khi có nhiều từ điển cùng chứa một khóa, từ điển có số ưu tiên cao nhất sẽ ghi đè lên các từ điển khác. Điều này hữu ích để quản lý thứ bậc nội dung và ghi đè.
460
+
461
+ **Ví dụ:**
462
+
463
+ ```typescript
464
+ // Từ điển cơ sở
465
+ {
466
+ key: "welcome-message",
467
+ priority: 1,
468
+ content: { message: "Welcome!" }
469
+ }
470
+
471
+ // Từ điển ghi đè
472
+ {
473
+ key: "welcome-message",
474
+ priority: 10,
475
+ content: { message: "Chào mừng bạn đến với dịch vụ cao cấp của chúng tôi!" }
476
+ }
477
+ // Điều này sẽ ghi đè từ điển cơ sở
478
+ ```
479
+
480
+ ### Thuộc tính CMS
481
+
482
+ ##### `version` (string)
483
+
484
+ Định danh phiên bản cho các từ điển từ xa. Giúp theo dõi phiên bản của từ điển đang được sử dụng, đặc biệt hữu ích khi làm việc với các hệ thống quản lý nội dung từ xa.
485
+
486
+ ##### `live` (boolean)
487
+
488
+ Đối với các từ điển từ xa, cho biết liệu từ điển có nên được lấy trực tiếp tại thời gian chạy hay không. Khi được bật:
489
+
490
+ - Yêu cầu `importMode` được đặt thành "live" trong `intlayer.config.ts`
491
+ - Yêu cầu có một server trực tiếp đang chạy
492
+ - Từ điển sẽ được lấy tại thời gian chạy sử dụng API đồng bộ trực tiếp
493
+ - Nếu bật live nhưng việc lấy dữ liệu thất bại, sẽ chuyển sang giá trị động
494
+ - Nếu không ở chế độ live, từ điển sẽ được chuyển đổi tại thời điểm build để tối ưu hiệu suất
495
+
496
+ ### Thuộc tính Hệ thống (Tự động tạo)
497
+
498
+ Các thuộc tính này được Intlayer tự động tạo và không nên chỉnh sửa thủ công:
499
+
500
+ ##### `$schema` (string)
501
+
502
+ Schema JSON được sử dụng để xác thực cấu trúc của từ điển. Được Intlayer tự động thêm vào để đảm bảo tính toàn vẹn của từ điển.
503
+
504
+ ##### `id` (string)
505
+
506
+ Đối với các từ điển từ xa, đây là định danh duy nhất của từ điển trên máy chủ từ xa. Được sử dụng để lấy và quản lý nội dung từ xa.
507
+
508
+ ##### `projectIds` (string[])
509
+
510
+ Đối với các từ điển từ xa, mảng này chứa các ID của các dự án có thể sử dụng từ điển này. Một từ điển từ xa có thể được chia sẻ giữa nhiều dự án.
511
+
512
+ ##### `localId` (LocalDictionaryId)
513
+
514
+ Định danh duy nhất cho các từ điển cục bộ. Được Intlayer tự động tạo để giúp xác định từ điển và xác định xem nó là cục bộ hay từ xa, cùng với vị trí của nó.
515
+
516
+ ##### `localIds` (LocalDictionaryId[])
517
+
518
+ Đối với các từ điển được gộp, mảng này chứa các ID của tất cả các từ điển đã được gộp lại với nhau. Hữu ích để theo dõi nguồn gốc của nội dung được gộp.
519
+
520
+ ##### `filePath` (string)
521
+
522
+ Đường dẫn tệp của từ điển cục bộ, chỉ ra tệp `.content` mà từ điển được tạo ra từ đó. Giúp trong việc gỡ lỗi và theo dõi nguồn.
523
+
524
+ ##### `versions` (string[])
525
+
526
+ Đối với các từ điển từ xa, mảng này chứa tất cả các phiên bản có sẵn của từ điển. Giúp theo dõi các phiên bản có thể sử dụng.
527
+
528
+ ##### `filled` (true)
529
+
530
+ Chỉ ra liệu từ điển đã được tự động điền từ các nguồn bên ngoài hay chưa. Trong trường hợp có xung đột, các từ điển cơ sở sẽ ghi đè lên các từ điển được tự động điền.
531
+
532
+ ##### `location` ('distant' | 'locale')
533
+
534
+ Chỉ ra vị trí của từ điển:
535
+
536
+ - `'locale'`: Từ điển cục bộ (từ các tệp nội dung)
537
+ - `'distant'`: Từ điển từ xa (từ nguồn bên ngoài)
538
+
539
+ ## Các loại nút nội dung
540
+
541
+ Intlayer cung cấp một số loại nút nội dung chuyên biệt mở rộng các giá trị nguyên thủy cơ bản:
542
+
543
+ ### Nội dung dịch (`t`)
544
+
545
+ Nội dung đa ngôn ngữ thay đổi theo locale:
546
+
547
+ ```typescript
548
+ import { t } from "intlayer";
549
+
550
+ // TypeScript/JavaScript
551
+ multilingualContent: t({
552
+ en: "Welcome to our website",
553
+ fr: "Bienvenue sur notre site web",
554
+ es: "Bienvenido a nuestro sitio web",
555
+ });
556
+ ```
557
+
558
+ ### Nội dung điều kiện (`cond`)
559
+
560
+ Nội dung thay đổi dựa trên các điều kiện boolean:
561
+
562
+ ```typescript
563
+ import { cond } from "intlayer";
564
+
565
+ conditionalContent: cond({
566
+ true: "Người dùng đã đăng nhập",
567
+ false: "Vui lòng đăng nhập để tiếp tục",
568
+ });
569
+ ```
570
+
571
+ ### Nội dung liệt kê (`enu`)
572
+
573
+ Nội dung thay đổi dựa trên các giá trị liệt kê:
574
+
575
+ ```typescript
576
+ import { enu } from "intlayer";
577
+
578
+ statusContent: enu({
579
+ pending: "Yêu cầu của bạn đang chờ xử lý",
580
+ approved: "Yêu cầu của bạn đã được phê duyệt",
581
+ rejected: "Yêu cầu của bạn đã bị từ chối",
582
+ });
583
+ ```
584
+
585
+ ### Nội dung chèn (`insert`)
586
+
587
+ Nội dung có thể được chèn vào các nội dung khác:
588
+
589
+ ```typescript
590
+ import { insert } from "intlayer";
591
+
592
+ insertionContent: insert("Đoạn văn bản này có thể được chèn vào bất cứ đâu");
593
+ ```
594
+
595
+ ### Nội dung lồng nhau (`nest`)
596
+
597
+ Tham chiếu đến các từ điển khác:
598
+
599
+ ```typescript
600
+ import { nest } from "intlayer";
601
+
602
+ nestedContent: nest("about-page");
603
+ ```
604
+
605
+ ### Nội dung Markdown (`md`)
606
+
607
+ Nội dung văn bản phong phú ở định dạng Markdown:
608
+
609
+ ```typescript
610
+ import { md } from "intlayer";
611
+
612
+ markdownContent: md(
613
+ "# Chào mừng\n\nĐây là văn bản **in đậm** với các [liên kết](https://example.com)"
614
+ );
615
+ ```
616
+
617
+ ### Nội dung theo giới tính (`gender`)
618
+
619
+ Nội dung thay đổi dựa trên giới tính:
620
+
621
+ ```typescript
622
+ import { gender } from "intlayer";
623
+
624
+ genderContent: gender({
625
+ male: "Anh ấy là một nhà phát triển",
626
+ female: "Cô ấy là một nhà phát triển",
627
+ other: "Họ là một nhà phát triển",
628
+ });
629
+ ```
630
+
631
+ ### Nội dung tệp tin (`file`)
632
+
633
+ Tham chiếu đến các tệp tin bên ngoài:
634
+
635
+ ```typescript
636
+ import { file } from "intlayer";
637
+
638
+ fileContent: file("./path/to/content.txt");
639
+ ```
640
+
641
+ ## Tạo các tệp nội dung
642
+
643
+ ### Cấu trúc cơ bản của tệp nội dung
644
+
645
+ Một file nội dung xuất một đối tượng mặc định thỏa mãn kiểu `Dictionary`:
646
+
647
+ ```typescript
648
+ // example.content.ts
649
+ import { t, cond, nest, md, insert, file } from "intlayer";
650
+
651
+ export default {
652
+ key: "welcome-page",
653
+ title: "Nội dung Trang Chào mừng",
654
+ description:
655
+ "Nội dung cho trang chào mừng chính bao gồm phần hero và các tính năng",
656
+ tags: ["page", "welcome", "homepage"],
657
+ content: {
658
+ hero: {
659
+ title: t({
660
+ en: "Welcome to Our Platform",
661
+ fr: "Bienvenue sur Notre Plateforme",
662
+ es: "Bienvenido a Nuestra Plataforma",
663
+ }),
664
+ subtitle: t({
665
+ en: "Build amazing applications with ease",
666
+ fr: "Construisez des applications incroyables avec facilité",
667
+ es: "Construye aplicaciones increíbles con facilidad",
668
+ }),
669
+ cta: cond({
670
+ true: t({
671
+ en: "Bắt đầu",
672
+ fr: "Commencer",
673
+ es: "Comenzar",
674
+ }),
675
+ false: t({
676
+ en: "Đăng ký",
677
+ fr: "S'inscrire",
678
+ es: "Registrarse",
679
+ }),
680
+ }),
681
+ },
682
+ features: [
683
+ {
684
+ title: t({
685
+ en: "Dễ sử dụng",
686
+ fr: "Facile à Utiliser",
687
+ es: "Fácil de Usar",
688
+ }),
689
+ description: t({
690
+ en: "Giao diện trực quan cho mọi trình độ kỹ năng",
691
+ fr: "Interface intuitive pour tous les niveaux",
692
+ es: "Interfaz intuitiva para todos los niveles",
693
+ }),
694
+ },
695
+ ],
696
+ documentation: nest("documentation"),
697
+ readme: file("./README.md"),
698
+ },
699
+ } satisfies Dictionary;
700
+ ```
701
+
702
+ ### File Nội dung JSON
703
+
704
+ Bạn cũng có thể tạo các tệp nội dung ở định dạng JSON:
705
+
706
+ ```json
707
+ {
708
+ "key": "welcome-page",
709
+ "title": "Nội dung Trang Chào mừng",
710
+ "description": "Nội dung cho trang chào mừng chính",
711
+ "tags": ["trang", "chào mừng"],
712
+ "content": {
713
+ "hero": {
714
+ "title": {
715
+ "nodeType": "translation",
716
+ "translation": {
717
+ "en": "Welcome to Our Platform",
718
+ "fr": "Bienvenue sur Notre Plateforme"
719
+ }
720
+ },
721
+ "subtitle": {
722
+ "nodeType": "translation",
723
+ "translation": {
724
+ "en": "Build amazing applications with ease",
725
+ "fr": "Construisez des applications incroyables avec facilité"
726
+ }
727
+ }
728
+ }
729
+ }
730
+ }
731
+ ```
732
+
733
+ ### Tệp Nội dung Theo Ngôn ngữ
734
+
735
+ Đối với từ điển theo từng ngôn ngữ, hãy chỉ định thuộc tính `locale`:
736
+
737
+ ```typescript
738
+ typescript;
739
+ // welcome-page.en.content.ts
740
+ export default {
741
+ key: "welcome-page",
742
+ locale: "en",
743
+ content: {
744
+ hero: {
745
+ title: "Welcome to Our Platform",
746
+ subtitle: "Build amazing applications with ease",
747
+ },
748
+ },
749
+ } satisfies Dictionary;
750
+ ```
751
+
752
+ ```typescript
753
+ // welcome-page.fr.content.ts
754
+ export default {
755
+ key: "welcome-page",
756
+ locale: "fr",
757
+ content: {
758
+ hero: {
759
+ title: "Bienvenue sur Notre Plateforme",
760
+ subtitle: "Construisez des applications incroyables avec facilité",
761
+ },
762
+ },
763
+ } satisfies Dictionary;
764
+ ```
765
+
766
+ ## Phần Mở Rộng Tệp Nội Dung
767
+
768
+ Intlayer cho phép bạn tùy chỉnh phần mở rộng cho các tệp khai báo nội dung của bạn. Việc tùy chỉnh này mang lại sự linh hoạt trong quản lý các dự án quy mô lớn và giúp tránh xung đột với các module khác.
769
+
770
+ ### Phần Mở Rộng Mặc Định
771
+
772
+ Theo mặc định, Intlayer theo dõi tất cả các tệp có phần mở rộng sau để khai báo nội dung:
773
+
774
+ - `.content.json`
775
+ - `.content.ts`
776
+ - `.content.tsx`
777
+ - `.content.js`
778
+ - `.content.jsx`
779
+ - `.content.mjs`
780
+ - `.content.mjx`
781
+ - `.content.cjs`
782
+ - `.content.cjx`
783
+
784
+ Các phần mở rộng mặc định này phù hợp với hầu hết các ứng dụng. Tuy nhiên, khi bạn có những nhu cầu cụ thể, bạn có thể định nghĩa các phần mở rộng tùy chỉnh để tối ưu hóa quá trình build và giảm thiểu rủi ro xung đột với các thành phần khác.
785
+
786
+ > Để tùy chỉnh các phần mở rộng tệp mà Intlayer sử dụng để nhận diện các tệp khai báo nội dung, bạn có thể chỉ định chúng trong tệp cấu hình Intlayer. Cách làm này rất hữu ích cho các dự án quy mô lớn, nơi việc giới hạn phạm vi theo dõi giúp cải thiện hiệu suất build.
787
+
788
+ ## Các Khái Niệm Nâng Cao
789
+
790
+ ### Hợp Nhất Dictionary
791
+
792
+ Khi nhiều dictionary có cùng một khóa, Intlayer sẽ tự động hợp nhất chúng. Hành vi hợp nhất phụ thuộc vào một số yếu tố sau:
793
+
794
+ - **Ưu tiên**: Các dictionary có giá trị `priority` cao hơn sẽ ghi đè lên các dictionary có giá trị thấp hơn
795
+ - **Tự động điền vs Cơ sở**: Các dictionary cơ sở sẽ ghi đè lên các dictionary được tự động điền
796
+ - **Vị trí**: Các dictionary cục bộ sẽ ghi đè lên các dictionary từ xa (khi ưu tiên bằng nhau)
797
+
798
+ ### An toàn kiểu
799
+
800
+ Intlayer cung cấp hỗ trợ đầy đủ TypeScript cho các tệp nội dung:
801
+
802
+ ```typescript
803
+ // Định nghĩa kiểu nội dung của bạn
804
+ interface WelcomePageContent {
805
+ hero: {
806
+ title: string;
807
+ subtitle: string;
808
+ cta: string;
809
+ };
810
+ features: Array<{
811
+ title: string;
812
+ description: string;
813
+ }>;
814
+ }
815
+
816
+ // Sử dụng nó trong dictionary của bạn
817
+ export default {
818
+ key: "welcome-page",
819
+ content: {
820
+ // TypeScript sẽ cung cấp tính năng tự động hoàn thành và kiểm tra kiểu
821
+ hero: {
822
+ title: "Chào mừng",
823
+ subtitle: "Xây dựng các ứng dụng tuyệt vời",
824
+ cta: "Bắt đầu",
825
+ },
826
+ },
827
+ } satisfies Dictionary<WelcomePageContent>;
828
+ ```
829
+
830
+ ### Lồng nút (Node Imbrication)
831
+
832
+ Bạn có thể dễ dàng lồng các hàm vào nhau mà không gặp vấn đề gì.
833
+
834
+ Ví dụ:
835
+
836
+ ```javascript fileName="src/example.content.tsx" contentDeclarationFormat="typescript"
837
+ import { t, enu, cond, nest, md, type Dictionary } from "intlayer";
838
+
839
+ const getName = async () => "John Doe";
840
+
841
+ export default {
842
+ key: "page",
843
+ content: {
844
+ // `getIntlayer('page','en').hiMessage` trả về `['Hi', ' ', 'John Doe']`
845
+ hiMessage: [
846
+ t({
847
+ en: "Hi",
848
+ fr: "Salut",
849
+ es: "Hola",
850
+ }),
851
+ " ",
852
+ getName(),
853
+ ],
854
+ // Nội dung tổng hợp lồng điều kiện, liệt kê và nội dung đa ngôn ngữ
855
+ // `getIntlayer('page','en').advancedContent(true)(10) trả về 'Multiple items found'`
856
+ advancedContent: cond({
857
+ true: enu({
858
+ "0": t({
859
+ en: "No items found",
860
+ fr: "Aucun article trouvé",
861
+ es: "No se encontraron artículos",
862
+ }),
863
+ "1": t({
864
+ en: "One item found",
865
+ fr: "Un article trouvé",
866
+ es: "Se encontró un artículo",
867
+ }),
868
+ ">1": t({
869
+ en: "Multiple items found",
870
+ fr: "Plusieurs articles trouvés",
871
+ es: "Se encontraron múltiples artículos",
872
+ }),
873
+ }),
874
+ false: t({
875
+ en: "No valid data available",
876
+ fr: "Aucune donnée valide disponible",
877
+ es: "Không có dữ liệu hợp lệ",
878
+ }),
879
+ }),
880
+ },
881
+ } satisfies Dictionary;
882
+ ```
883
+
884
+ ```javascript fileName="src/example.content.mjx" contentDeclarationFormat="esm"
885
+ import { t, enu, cond, nest, md } from "intlayer";
886
+
887
+ const getName = async () => "John Doe";
888
+
889
+ /** @type {import('intlayer').Dictionary} */
890
+ export default {
891
+ key: "page",
892
+ content: {
893
+ // `getIntlayer('page','en').hiMessage` trả về `['Hi', ' ', 'John Doe']`
894
+ hiMessage: [
895
+ t({
896
+ en: "Hi",
897
+ fr: "Salut",
898
+ es: "Hola",
899
+ }),
900
+ " ",
901
+ getName(),
902
+ ],
903
+ // Nội dung tổng hợp lồng điều kiện, liệt kê và nội dung đa ngôn ngữ
904
+ // `getIntlayer('page','en').advancedContent(true)(10)` trả về 'Multiple items found'
905
+ advancedContent: cond({
906
+ true: enu({
907
+ "0": t({
908
+ en: "No items found",
909
+ fr: "Aucun article trouvé",
910
+ es: "Không tìm thấy mục nào",
911
+ }),
912
+ "1": t({
913
+ en: "One item found",
914
+ fr: "Un article trouvé",
915
+ es: "Tìm thấy một mục",
916
+ }),
917
+ ">1": t({
918
+ en: "Multiple items found",
919
+ fr: "Plusieurs articles trouvés",
920
+ es: "Tìm thấy nhiều mục",
921
+ }),
922
+ }),
923
+ false: t({
924
+ en: "No valid data available",
925
+ fr: "Aucune donnée valide disponible",
926
+ es: "Không có dữ liệu hợp lệ",
927
+ }),
928
+ }),
929
+ },
930
+ };
931
+ ```
932
+
933
+ ```javascript fileName="src/example.content.cjx" contentDeclarationFormat="commonjs"
934
+ const { t, enu, cond, nest, md } = require("intlayer");
935
+
936
+ const getName = async () => "John Doe";
937
+
938
+ /** @type {import('intlayer').Dictionary} */
939
+ module.exports = {
940
+ key: "page",
941
+ content: {
942
+ // `getIntlayer('page','en').hiMessage` trả về `['Hi', ' ', 'John Doe']`
943
+ hiMessage: [
944
+ t({
945
+ en: "Hi",
946
+ fr: "Salut",
947
+ es: "Hola",
948
+ }),
949
+ " ",
950
+ getName(),
951
+ ],
952
+ // Nội dung tổng hợp kết hợp điều kiện, liệt kê và nội dung đa ngôn ngữ
953
+ // `getIntlayer('page','en').advancedContent(true)(10)` trả về 'Multiple items found'
954
+ advancedContent: cond({
955
+ true: enu({
956
+ "0": t({
957
+ en: "No items found",
958
+ fr: "Aucun article trouvé",
959
+ es: "No se encontraron artículos",
960
+ }),
961
+ "1": t({
962
+ en: "One item found",
963
+ fr: "Un article trouvé",
964
+ es: "Se encontró un artículo",
965
+ }),
966
+ ">1": t({
967
+ en: "Multiple items found",
968
+ fr: "Plusieurs articles trouvés",
969
+ es: "Se encontraron múltiples artículos",
970
+ }),
971
+ }),
972
+ false: t({
973
+ en: "No valid data available",
974
+ fr: "Aucune donnée valide disponible",
975
+ es: "No hay datos válidos disponibles",
976
+ }),
977
+ }),
978
+ },
979
+ };
980
+ ```
981
+
982
+ ```json5 fileName="src/example.content.json" contentDeclarationFormat="json"
983
+ {
984
+ "$schema": "https://intlayer.org/schema.json",
985
+ "key": "page",
986
+ "content": {
987
+ "hiMessage": {
988
+ "nodeType": "composite",
989
+ "composite": [
990
+ {
991
+ "nodeType": "translation",
992
+ "translation": {
993
+ en: "Hi",
994
+ fr: "Salut",
995
+ es: "Hola",
996
+ },
997
+ },
998
+ " ",
999
+ "John Doe",
1000
+ ],
1001
+ },
1002
+ "advancedContent": {
1003
+ "nodeType": "condition",
1004
+ "condition": {
1005
+ "true": {
1006
+ "nodeType": "enumeration",
1007
+ "enumeration": {
1008
+ "0": {
1009
+ "nodeType": "translation",
1010
+ "translation": {
1011
+ en: "No items found",
1012
+ fr: "Aucun article trouvé",
1013
+ es: "No se encontraron artículos",
1014
+ },
1015
+ },
1016
+ "1": {
1017
+ "nodeType": "translation",
1018
+ "translation": {
1019
+ en: "One item found",
1020
+ fr: "Un article trouvé",
1021
+ es: "Se encontró un artículo",
1022
+ },
1023
+ },
1024
+ ">1": {
1025
+ "nodeType": "translation",
1026
+ "translation": {
1027
+ en: "Multiple items found",
1028
+ fr: "Plusieurs articles trouvés",
1029
+ es: "Se encontraron múltiples artículos",
1030
+ },
1031
+ },
1032
+ },
1033
+ },
1034
+ "false": {
1035
+ "nodeType": "translation",
1036
+ "translation": {
1037
+ en: "No valid data available",
1038
+ fr: "Aucune donnée valide disponible",
1039
+ es: "No hay datos válidos disponibles",
1040
+ },
1041
+ },
1042
+ },
1043
+ },
1044
+ },
1045
+ }
1046
+ },
1047
+ },
1048
+ " ",
1049
+ "John Doe",
1050
+ ],
1051
+ },
1052
+ "advancedContent": {
1053
+ "nodeType": "condition",
1054
+ "condition": {
1055
+ "true": {
1056
+ "nodeType": "enumeration",
1057
+ "enumeration": {
1058
+ "0": {
1059
+ "nodeType": "translation",
1060
+ "translation": {
1061
+ "en": "No items found",
1062
+ "fr": "Aucun article trouvé",
1063
+ "es": "No se encontraron artículos",
1064
+ "vi": "Không tìm thấy mục nào",
1065
+ },
1066
+ },
1067
+ "1": {
1068
+ "nodeType": "translation",
1069
+ "translation": {
1070
+ "en": "One item found",
1071
+ "fr": "Un article trouvé",
1072
+ "es": "Se encontró un artículo",
1073
+ "vi": "Tìm thấy một mục",
1074
+ },
1075
+ },
1076
+ ">1": {
1077
+ "nodeType": "translation",
1078
+ "translation": {
1079
+ "en": "Multiple items found",
1080
+ "fr": "Plusieurs articles trouvés",
1081
+ "es": "Se encontraron múltiples artículos",
1082
+ },
1083
+ },
1084
+ },
1085
+ },
1086
+ "false": {
1087
+ "nodeType": "translation",
1088
+ "translation": {
1089
+ "en": "No valid data available",
1090
+ "fr": "Aucune donnée valide disponible",
1091
+ "es": "No hay datos válidos disponibles",
1092
+ },
1093
+ },
1094
+ },
1095
+ },
1096
+ },
1097
+ }
1098
+ ```
1099
+
1100
+ ### Thực hành tốt nhất
1101
+
1102
+ 1. **Quy ước đặt tên**:
1103
+ - Sử dụng kebab-case cho các khóa trong dictionary (`"about-page-meta"`)
1104
+ - Nhóm các nội dung liên quan dưới cùng một tiền tố khóa
1105
+
1106
+ 2. **Tổ chức nội dung**:
1107
+ - Giữ nội dung liên quan cùng nhau trong cùng một từ điển
1108
+ - Sử dụng các đối tượng lồng nhau để tổ chức các cấu trúc nội dung phức tạp
1109
+ - Tận dụng các thẻ để phân loại
1110
+ - Sử dụng `fill` để tự động điền các bản dịch còn thiếu
1111
+
1112
+ 3. **Hiệu suất**:
1113
+ - Điều chỉnh cấu hình nội dung để giới hạn phạm vi các tệp được theo dõi
1114
+ - Chỉ sử dụng từ điển trực tiếp khi cần cập nhật thời gian thực (ví dụ: thử nghiệm A/B, v.v.)
1115
+ - Đảm bảo plugin chuyển đổi build (`@intlayer/swc`, hoặc `@intlayer/babel`) được bật để tối ưu hóa từ điển trong quá trình build