@intlayer/docs 8.4.10 → 8.5.1

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 (382) hide show
  1. package/dist/cjs/generated/docs.entry.cjs +40 -0
  2. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  3. package/dist/esm/generated/docs.entry.mjs +40 -0
  4. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  5. package/dist/types/generated/docs.entry.d.ts +2 -0
  6. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  7. package/docs/ar/dictionary/html.md +32 -25
  8. package/docs/ar/dictionary/markdown.md +33 -35
  9. package/docs/ar/intlayer_with_analog.md +10 -27
  10. package/docs/ar/intlayer_with_angular.md +1 -12
  11. package/docs/ar/intlayer_with_nextjs_14.md +1 -1
  12. package/docs/ar/intlayer_with_nextjs_page_router.md +1 -1
  13. package/docs/ar/intlayer_with_react_router_v7.md +6 -1
  14. package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +6 -1
  15. package/docs/ar/intlayer_with_storybook.md +2 -5
  16. package/docs/ar/intlayer_with_svelte_kit.md +9 -5
  17. package/docs/ar/intlayer_with_vite+lit.md +689 -0
  18. package/docs/ar/intlayer_with_vite+react.md +16 -4
  19. package/docs/ar/intlayer_with_vite+solid.md +1 -1
  20. package/docs/ar/intlayer_with_vite+svelte.md +13 -6
  21. package/docs/ar/intlayer_with_vite+vanilla.md +722 -0
  22. package/docs/ar/intlayer_with_vite+vue.md +24 -8
  23. package/docs/ar/packages/react-intlayer/MarkdownRenderer.md +1 -1
  24. package/docs/ar/packages/svelte-intlayer/useRewriteURL.md +1 -1
  25. package/docs/ar/releases/v8.md +27 -27
  26. package/docs/bn/intlayer_with_storybook.md +2 -5
  27. package/docs/bn/intlayer_with_vite+lit.md +689 -0
  28. package/docs/bn/intlayer_with_vite+vanilla.md +722 -0
  29. package/docs/cs/intlayer_with_storybook.md +2 -5
  30. package/docs/cs/intlayer_with_vite+lit.md +689 -0
  31. package/docs/cs/intlayer_with_vite+vanilla.md +722 -0
  32. package/docs/de/compiler.md +6 -1
  33. package/docs/de/configuration.md +12 -9
  34. package/docs/de/dictionary/html.md +151 -26
  35. package/docs/de/dictionary/markdown.md +154 -42
  36. package/docs/de/intlayer_with_analog.md +10 -27
  37. package/docs/de/intlayer_with_angular.md +1 -12
  38. package/docs/de/intlayer_with_nextjs_14.md +1 -1
  39. package/docs/de/intlayer_with_nextjs_page_router.md +1 -1
  40. package/docs/de/intlayer_with_react_router_v7.md +6 -1
  41. package/docs/de/intlayer_with_react_router_v7_fs_routes.md +6 -1
  42. package/docs/de/intlayer_with_storybook.md +2 -5
  43. package/docs/de/intlayer_with_svelte_kit.md +9 -5
  44. package/docs/de/intlayer_with_vite+lit.md +698 -0
  45. package/docs/de/intlayer_with_vite+react.md +16 -4
  46. package/docs/de/intlayer_with_vite+solid.md +1 -1
  47. package/docs/de/intlayer_with_vite+svelte.md +19 -6
  48. package/docs/de/intlayer_with_vite+vanilla.md +722 -0
  49. package/docs/de/intlayer_with_vite+vue.md +24 -8
  50. package/docs/de/packages/react-intlayer/MarkdownRenderer.md +1 -1
  51. package/docs/de/packages/svelte-intlayer/useRewriteURL.md +1 -1
  52. package/docs/de/releases/v8.md +27 -27
  53. package/docs/en/compiler.md +6 -1
  54. package/docs/en/configuration.md +12 -9
  55. package/docs/en/dictionary/html.md +152 -27
  56. package/docs/en/dictionary/markdown.md +154 -38
  57. package/docs/en/intlayer_with_analog.md +10 -27
  58. package/docs/en/intlayer_with_angular.md +1 -12
  59. package/docs/en/intlayer_with_nextjs_14.md +1 -1
  60. package/docs/en/intlayer_with_nextjs_16.md +12 -3
  61. package/docs/en/intlayer_with_nextjs_compiler.md +16 -4
  62. package/docs/en/intlayer_with_nextjs_page_router.md +1 -1
  63. package/docs/en/intlayer_with_react_router_v7.md +17 -4
  64. package/docs/en/intlayer_with_react_router_v7_fs_routes.md +18 -4
  65. package/docs/en/intlayer_with_storybook.md +2 -5
  66. package/docs/en/intlayer_with_svelte_kit.md +21 -8
  67. package/docs/en/intlayer_with_tanstack.md +12 -3
  68. package/docs/en/intlayer_with_vite+lit.md +703 -0
  69. package/docs/en/intlayer_with_vite+preact.md +31 -3
  70. package/docs/en/intlayer_with_vite+react.md +28 -7
  71. package/docs/en/intlayer_with_vite+react_compiler.md +4 -1
  72. package/docs/en/intlayer_with_vite+solid.md +31 -3
  73. package/docs/en/intlayer_with_vite+svelte.md +30 -9
  74. package/docs/en/intlayer_with_vite+vanilla.md +725 -0
  75. package/docs/en/intlayer_with_vite+vue.md +41 -10
  76. package/docs/en/packages/react-intlayer/MarkdownRenderer.md +1 -1
  77. package/docs/en/packages/svelte-intlayer/useRewriteURL.md +1 -1
  78. package/docs/en/readme.md +1 -0
  79. package/docs/en/releases/v8.md +27 -27
  80. package/docs/en-GB/compiler.md +4 -1
  81. package/docs/en-GB/configuration.md +4 -1
  82. package/docs/en-GB/dictionary/html.md +32 -25
  83. package/docs/en-GB/dictionary/markdown.md +34 -36
  84. package/docs/en-GB/intlayer_with_analog.md +10 -27
  85. package/docs/en-GB/intlayer_with_angular.md +1 -12
  86. package/docs/en-GB/intlayer_with_nextjs_14.md +1 -1
  87. package/docs/en-GB/intlayer_with_nextjs_page_router.md +1 -1
  88. package/docs/en-GB/intlayer_with_react_router_v7.md +6 -1
  89. package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +6 -1
  90. package/docs/en-GB/intlayer_with_storybook.md +2 -5
  91. package/docs/en-GB/intlayer_with_svelte_kit.md +9 -5
  92. package/docs/en-GB/intlayer_with_vite+lit.md +703 -0
  93. package/docs/en-GB/intlayer_with_vite+react.md +15 -3
  94. package/docs/en-GB/intlayer_with_vite+solid.md +1 -1
  95. package/docs/en-GB/intlayer_with_vite+svelte.md +17 -5
  96. package/docs/en-GB/intlayer_with_vite+vanilla.md +725 -0
  97. package/docs/en-GB/intlayer_with_vite+vue.md +19 -7
  98. package/docs/en-GB/packages/react-intlayer/MarkdownRenderer.md +1 -1
  99. package/docs/en-GB/packages/svelte-intlayer/useRewriteURL.md +1 -1
  100. package/docs/en-GB/releases/v8.md +27 -27
  101. package/docs/es/compiler.md +6 -1
  102. package/docs/es/configuration.md +12 -9
  103. package/docs/es/dictionary/html.md +152 -27
  104. package/docs/es/dictionary/markdown.md +155 -43
  105. package/docs/es/intlayer_with_analog.md +10 -27
  106. package/docs/es/intlayer_with_angular.md +1 -12
  107. package/docs/es/intlayer_with_nextjs_14.md +1 -1
  108. package/docs/es/intlayer_with_nextjs_page_router.md +1 -1
  109. package/docs/es/intlayer_with_react_router_v7.md +6 -1
  110. package/docs/es/intlayer_with_react_router_v7_fs_routes.md +6 -1
  111. package/docs/es/intlayer_with_storybook.md +2 -5
  112. package/docs/es/intlayer_with_svelte_kit.md +9 -5
  113. package/docs/es/intlayer_with_vite+lit.md +698 -0
  114. package/docs/es/intlayer_with_vite+react.md +16 -4
  115. package/docs/es/intlayer_with_vite+solid.md +1 -1
  116. package/docs/es/intlayer_with_vite+svelte.md +16 -6
  117. package/docs/es/intlayer_with_vite+vanilla.md +722 -0
  118. package/docs/es/intlayer_with_vite+vue.md +24 -8
  119. package/docs/es/packages/react-intlayer/MarkdownRenderer.md +1 -1
  120. package/docs/es/packages/svelte-intlayer/useRewriteURL.md +1 -1
  121. package/docs/es/releases/v8.md +27 -27
  122. package/docs/fr/compiler.md +8 -3
  123. package/docs/fr/configuration.md +12 -9
  124. package/docs/fr/dictionary/html.md +151 -26
  125. package/docs/fr/dictionary/markdown.md +155 -43
  126. package/docs/fr/intlayer_with_analog.md +10 -27
  127. package/docs/fr/intlayer_with_angular.md +1 -12
  128. package/docs/fr/intlayer_with_nextjs_14.md +1 -1
  129. package/docs/fr/intlayer_with_nextjs_page_router.md +1 -1
  130. package/docs/fr/intlayer_with_react_router_v7.md +6 -1
  131. package/docs/fr/intlayer_with_react_router_v7_fs_routes.md +6 -1
  132. package/docs/fr/intlayer_with_storybook.md +2 -5
  133. package/docs/fr/intlayer_with_svelte_kit.md +9 -5
  134. package/docs/fr/intlayer_with_vite+lit.md +698 -0
  135. package/docs/fr/intlayer_with_vite+react.md +16 -4
  136. package/docs/fr/intlayer_with_vite+solid.md +1 -1
  137. package/docs/fr/intlayer_with_vite+svelte.md +19 -6
  138. package/docs/fr/intlayer_with_vite+vanilla.md +722 -0
  139. package/docs/fr/intlayer_with_vite+vue.md +24 -8
  140. package/docs/fr/packages/react-intlayer/MarkdownRenderer.md +1 -1
  141. package/docs/fr/packages/svelte-intlayer/useRewriteURL.md +1 -1
  142. package/docs/fr/releases/v8.md +27 -27
  143. package/docs/hi/dictionary/html.md +32 -25
  144. package/docs/hi/dictionary/markdown.md +35 -37
  145. package/docs/hi/intlayer_with_analog.md +10 -27
  146. package/docs/hi/intlayer_with_angular.md +1 -12
  147. package/docs/hi/intlayer_with_nextjs_14.md +1 -1
  148. package/docs/hi/intlayer_with_nextjs_page_router.md +1 -1
  149. package/docs/hi/intlayer_with_react_router_v7.md +6 -1
  150. package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +6 -1
  151. package/docs/hi/intlayer_with_storybook.md +2 -5
  152. package/docs/hi/intlayer_with_svelte_kit.md +9 -5
  153. package/docs/hi/intlayer_with_vite+lit.md +689 -0
  154. package/docs/hi/intlayer_with_vite+react.md +16 -4
  155. package/docs/hi/intlayer_with_vite+solid.md +1 -1
  156. package/docs/hi/intlayer_with_vite+svelte.md +13 -6
  157. package/docs/hi/intlayer_with_vite+vanilla.md +722 -0
  158. package/docs/hi/intlayer_with_vite+vue.md +24 -8
  159. package/docs/hi/packages/react-intlayer/MarkdownRenderer.md +1 -1
  160. package/docs/hi/packages/svelte-intlayer/useRewriteURL.md +1 -1
  161. package/docs/hi/releases/v8.md +27 -27
  162. package/docs/id/dictionary/html.md +32 -25
  163. package/docs/id/dictionary/markdown.md +35 -37
  164. package/docs/id/intlayer_with_analog.md +10 -27
  165. package/docs/id/intlayer_with_angular.md +1 -12
  166. package/docs/id/intlayer_with_nextjs_14.md +1 -1
  167. package/docs/id/intlayer_with_nextjs_page_router.md +1 -1
  168. package/docs/id/intlayer_with_react_router_v7.md +6 -1
  169. package/docs/id/intlayer_with_react_router_v7_fs_routes.md +6 -1
  170. package/docs/id/intlayer_with_storybook.md +2 -5
  171. package/docs/id/intlayer_with_svelte_kit.md +9 -5
  172. package/docs/id/intlayer_with_vite+lit.md +689 -0
  173. package/docs/id/intlayer_with_vite+react.md +16 -4
  174. package/docs/id/intlayer_with_vite+solid.md +1 -1
  175. package/docs/id/intlayer_with_vite+svelte.md +13 -6
  176. package/docs/id/intlayer_with_vite+vanilla.md +722 -0
  177. package/docs/id/intlayer_with_vite+vue.md +19 -7
  178. package/docs/id/packages/react-intlayer/MarkdownRenderer.md +1 -1
  179. package/docs/id/packages/svelte-intlayer/useRewriteURL.md +1 -1
  180. package/docs/id/releases/v8.md +27 -27
  181. package/docs/it/compiler.md +8 -3
  182. package/docs/it/configuration.md +12 -9
  183. package/docs/it/dictionary/html.md +151 -26
  184. package/docs/it/dictionary/markdown.md +155 -39
  185. package/docs/it/intlayer_with_analog.md +10 -27
  186. package/docs/it/intlayer_with_angular.md +1 -12
  187. package/docs/it/intlayer_with_nextjs_14.md +1 -1
  188. package/docs/it/intlayer_with_nextjs_page_router.md +1 -1
  189. package/docs/it/intlayer_with_react_router_v7.md +6 -1
  190. package/docs/it/intlayer_with_react_router_v7_fs_routes.md +6 -1
  191. package/docs/it/intlayer_with_storybook.md +2 -5
  192. package/docs/it/intlayer_with_svelte_kit.md +9 -5
  193. package/docs/it/intlayer_with_vite+lit.md +698 -0
  194. package/docs/it/intlayer_with_vite+react.md +16 -4
  195. package/docs/it/intlayer_with_vite+solid.md +1 -1
  196. package/docs/it/intlayer_with_vite+svelte.md +13 -6
  197. package/docs/it/intlayer_with_vite+vanilla.md +722 -0
  198. package/docs/it/intlayer_with_vite+vue.md +24 -8
  199. package/docs/it/packages/react-intlayer/MarkdownRenderer.md +1 -1
  200. package/docs/it/packages/svelte-intlayer/useRewriteURL.md +1 -1
  201. package/docs/it/releases/v8.md +27 -27
  202. package/docs/ja/dictionary/html.md +153 -29
  203. package/docs/ja/dictionary/markdown.md +154 -42
  204. package/docs/ja/intlayer_with_analog.md +10 -27
  205. package/docs/ja/intlayer_with_angular.md +1 -12
  206. package/docs/ja/intlayer_with_nextjs_14.md +1 -1
  207. package/docs/ja/intlayer_with_nextjs_page_router.md +1 -1
  208. package/docs/ja/intlayer_with_react_router_v7.md +6 -1
  209. package/docs/ja/intlayer_with_react_router_v7_fs_routes.md +6 -1
  210. package/docs/ja/intlayer_with_storybook.md +2 -5
  211. package/docs/ja/intlayer_with_vite+lit.md +698 -0
  212. package/docs/ja/intlayer_with_vite+solid.md +1 -1
  213. package/docs/ja/intlayer_with_vite+svelte.md +13 -6
  214. package/docs/ja/intlayer_with_vite+vanilla.md +722 -0
  215. package/docs/ja/intlayer_with_vite+vue.md +24 -8
  216. package/docs/ja/packages/react-intlayer/MarkdownRenderer.md +1 -1
  217. package/docs/ja/packages/svelte-intlayer/useRewriteURL.md +1 -1
  218. package/docs/ja/releases/v8.md +27 -27
  219. package/docs/ko/dictionary/html.md +154 -30
  220. package/docs/ko/dictionary/markdown.md +155 -43
  221. package/docs/ko/intlayer_with_analog.md +10 -27
  222. package/docs/ko/intlayer_with_angular.md +1 -12
  223. package/docs/ko/intlayer_with_nextjs_14.md +1 -1
  224. package/docs/ko/intlayer_with_nextjs_page_router.md +1 -1
  225. package/docs/ko/intlayer_with_react_router_v7.md +6 -1
  226. package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +6 -1
  227. package/docs/ko/intlayer_with_storybook.md +2 -5
  228. package/docs/ko/intlayer_with_svelte_kit.md +9 -5
  229. package/docs/ko/intlayer_with_vite+lit.md +698 -0
  230. package/docs/ko/intlayer_with_vite+react.md +16 -4
  231. package/docs/ko/intlayer_with_vite+solid.md +1 -1
  232. package/docs/ko/intlayer_with_vite+svelte.md +13 -6
  233. package/docs/ko/intlayer_with_vite+vanilla.md +722 -0
  234. package/docs/ko/intlayer_with_vite+vue.md +24 -8
  235. package/docs/ko/packages/react-intlayer/MarkdownRenderer.md +1 -1
  236. package/docs/ko/packages/svelte-intlayer/useRewriteURL.md +1 -1
  237. package/docs/ko/releases/v8.md +27 -27
  238. package/docs/nl/intlayer_with_storybook.md +2 -5
  239. package/docs/nl/intlayer_with_vite+lit.md +689 -0
  240. package/docs/nl/intlayer_with_vite+vanilla.md +722 -0
  241. package/docs/pl/dictionary/html.md +151 -26
  242. package/docs/pl/dictionary/markdown.md +155 -43
  243. package/docs/pl/intlayer_with_analog.md +10 -27
  244. package/docs/pl/intlayer_with_angular.md +1 -12
  245. package/docs/pl/intlayer_with_nextjs_14.md +1 -1
  246. package/docs/pl/intlayer_with_nextjs_page_router.md +1 -1
  247. package/docs/pl/intlayer_with_react_router_v7.md +6 -1
  248. package/docs/pl/intlayer_with_react_router_v7_fs_routes.md +6 -1
  249. package/docs/pl/intlayer_with_storybook.md +2 -5
  250. package/docs/pl/intlayer_with_svelte_kit.md +9 -5
  251. package/docs/pl/intlayer_with_vite+lit.md +689 -0
  252. package/docs/pl/intlayer_with_vite+react.md +16 -4
  253. package/docs/pl/intlayer_with_vite+solid.md +1 -1
  254. package/docs/pl/intlayer_with_vite+svelte.md +13 -6
  255. package/docs/pl/intlayer_with_vite+vanilla.md +722 -0
  256. package/docs/pl/intlayer_with_vite+vue.md +19 -7
  257. package/docs/pl/packages/react-intlayer/MarkdownRenderer.md +1 -1
  258. package/docs/pl/packages/svelte-intlayer/useRewriteURL.md +1 -1
  259. package/docs/pl/releases/v8.md +27 -27
  260. package/docs/pt/compiler.md +7 -2
  261. package/docs/pt/configuration.md +11 -9
  262. package/docs/pt/dictionary/html.md +132 -26
  263. package/docs/pt/dictionary/markdown.md +155 -43
  264. package/docs/pt/intlayer_with_analog.md +10 -27
  265. package/docs/pt/intlayer_with_angular.md +1 -12
  266. package/docs/pt/intlayer_with_nextjs_14.md +1 -1
  267. package/docs/pt/intlayer_with_nextjs_page_router.md +1 -1
  268. package/docs/pt/intlayer_with_react_router_v7.md +6 -1
  269. package/docs/pt/intlayer_with_react_router_v7_fs_routes.md +6 -1
  270. package/docs/pt/intlayer_with_storybook.md +2 -5
  271. package/docs/pt/intlayer_with_svelte_kit.md +9 -5
  272. package/docs/pt/intlayer_with_vite+lit.md +698 -0
  273. package/docs/pt/intlayer_with_vite+react.md +16 -4
  274. package/docs/pt/intlayer_with_vite+solid.md +1 -1
  275. package/docs/pt/intlayer_with_vite+svelte.md +16 -6
  276. package/docs/pt/intlayer_with_vite+vanilla.md +722 -0
  277. package/docs/pt/intlayer_with_vite+vue.md +24 -8
  278. package/docs/pt/packages/react-intlayer/MarkdownRenderer.md +1 -1
  279. package/docs/pt/packages/svelte-intlayer/useRewriteURL.md +1 -1
  280. package/docs/pt/releases/v8.md +27 -27
  281. package/docs/ru/dictionary/html.md +153 -29
  282. package/docs/ru/dictionary/markdown.md +155 -41
  283. package/docs/ru/intlayer_with_analog.md +10 -27
  284. package/docs/ru/intlayer_with_angular.md +1 -12
  285. package/docs/ru/intlayer_with_nextjs_14.md +1 -1
  286. package/docs/ru/intlayer_with_nextjs_page_router.md +1 -1
  287. package/docs/ru/intlayer_with_react_router_v7.md +6 -1
  288. package/docs/ru/intlayer_with_react_router_v7_fs_routes.md +6 -1
  289. package/docs/ru/intlayer_with_storybook.md +2 -5
  290. package/docs/ru/intlayer_with_svelte_kit.md +9 -5
  291. package/docs/ru/intlayer_with_vite+lit.md +698 -0
  292. package/docs/ru/intlayer_with_vite+react.md +16 -4
  293. package/docs/ru/intlayer_with_vite+solid.md +1 -1
  294. package/docs/ru/intlayer_with_vite+svelte.md +13 -6
  295. package/docs/ru/intlayer_with_vite+vanilla.md +722 -0
  296. package/docs/ru/intlayer_with_vite+vue.md +24 -8
  297. package/docs/ru/packages/react-intlayer/MarkdownRenderer.md +1 -1
  298. package/docs/ru/packages/svelte-intlayer/useRewriteURL.md +1 -1
  299. package/docs/ru/releases/v8.md +27 -27
  300. package/docs/tr/dictionary/html.md +134 -29
  301. package/docs/tr/dictionary/markdown.md +155 -41
  302. package/docs/tr/intlayer_with_analog.md +10 -27
  303. package/docs/tr/intlayer_with_angular.md +1 -12
  304. package/docs/tr/intlayer_with_nextjs_14.md +1 -1
  305. package/docs/tr/intlayer_with_nextjs_page_router.md +1 -1
  306. package/docs/tr/intlayer_with_react_router_v7.md +6 -1
  307. package/docs/tr/intlayer_with_react_router_v7_fs_routes.md +6 -1
  308. package/docs/tr/intlayer_with_storybook.md +2 -5
  309. package/docs/tr/intlayer_with_svelte_kit.md +9 -5
  310. package/docs/tr/intlayer_with_vite+lit.md +689 -0
  311. package/docs/tr/intlayer_with_vite+react.md +16 -4
  312. package/docs/tr/intlayer_with_vite+solid.md +1 -1
  313. package/docs/tr/intlayer_with_vite+svelte.md +13 -6
  314. package/docs/tr/intlayer_with_vite+vanilla.md +722 -0
  315. package/docs/tr/intlayer_with_vite+vue.md +19 -7
  316. package/docs/tr/packages/react-intlayer/MarkdownRenderer.md +1 -1
  317. package/docs/tr/packages/svelte-intlayer/useRewriteURL.md +1 -1
  318. package/docs/tr/releases/v8.md +27 -27
  319. package/docs/uk/dictionary/html.md +32 -25
  320. package/docs/uk/dictionary/markdown.md +35 -37
  321. package/docs/uk/intlayer_with_analog.md +10 -27
  322. package/docs/uk/intlayer_with_angular.md +1 -12
  323. package/docs/uk/intlayer_with_nextjs_14.md +1 -1
  324. package/docs/uk/intlayer_with_nextjs_page_router.md +1 -1
  325. package/docs/uk/intlayer_with_react_router_v7.md +5 -1
  326. package/docs/uk/intlayer_with_react_router_v7_fs_routes.md +6 -1
  327. package/docs/uk/intlayer_with_storybook.md +2 -5
  328. package/docs/uk/intlayer_with_svelte_kit.md +9 -5
  329. package/docs/uk/intlayer_with_vite+lit.md +689 -0
  330. package/docs/uk/intlayer_with_vite+react.md +16 -4
  331. package/docs/uk/intlayer_with_vite+solid.md +1 -1
  332. package/docs/uk/intlayer_with_vite+svelte.md +18 -6
  333. package/docs/uk/intlayer_with_vite+vanilla.md +722 -0
  334. package/docs/uk/intlayer_with_vite+vue.md +19 -7
  335. package/docs/uk/packages/react-intlayer/MarkdownRenderer.md +1 -1
  336. package/docs/uk/packages/svelte-intlayer/useRewriteURL.md +1 -1
  337. package/docs/uk/releases/v8.md +27 -27
  338. package/docs/ur/intlayer_with_storybook.md +2 -5
  339. package/docs/ur/intlayer_with_vite+lit.md +689 -0
  340. package/docs/ur/intlayer_with_vite+vanilla.md +722 -0
  341. package/docs/vi/dictionary/html.md +32 -25
  342. package/docs/vi/dictionary/markdown.md +35 -37
  343. package/docs/vi/intlayer_with_analog.md +10 -27
  344. package/docs/vi/intlayer_with_angular.md +1 -12
  345. package/docs/vi/intlayer_with_nextjs_14.md +1 -1
  346. package/docs/vi/intlayer_with_nextjs_page_router.md +1 -1
  347. package/docs/vi/intlayer_with_react_router_v7.md +6 -1
  348. package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +6 -1
  349. package/docs/vi/intlayer_with_storybook.md +2 -5
  350. package/docs/vi/intlayer_with_svelte_kit.md +9 -5
  351. package/docs/vi/intlayer_with_vite+lit.md +689 -0
  352. package/docs/vi/intlayer_with_vite+react.md +16 -4
  353. package/docs/vi/intlayer_with_vite+solid.md +1 -1
  354. package/docs/vi/intlayer_with_vite+svelte.md +17 -5
  355. package/docs/vi/intlayer_with_vite+vanilla.md +722 -0
  356. package/docs/vi/intlayer_with_vite+vue.md +19 -7
  357. package/docs/vi/packages/react-intlayer/MarkdownRenderer.md +1 -1
  358. package/docs/vi/packages/svelte-intlayer/useRewriteURL.md +1 -1
  359. package/docs/vi/releases/v8.md +27 -27
  360. package/docs/zh/compiler.md +8 -3
  361. package/docs/zh/configuration.md +4 -1
  362. package/docs/zh/dictionary/html.md +153 -29
  363. package/docs/zh/dictionary/markdown.md +155 -39
  364. package/docs/zh/intlayer_with_analog.md +10 -27
  365. package/docs/zh/intlayer_with_angular.md +1 -12
  366. package/docs/zh/intlayer_with_nextjs_14.md +1 -1
  367. package/docs/zh/intlayer_with_nextjs_page_router.md +1 -1
  368. package/docs/zh/intlayer_with_react_router_v7.md +6 -1
  369. package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +6 -1
  370. package/docs/zh/intlayer_with_storybook.md +2 -5
  371. package/docs/zh/intlayer_with_svelte_kit.md +9 -5
  372. package/docs/zh/intlayer_with_vite+lit.md +698 -0
  373. package/docs/zh/intlayer_with_vite+react.md +16 -4
  374. package/docs/zh/intlayer_with_vite+solid.md +1 -1
  375. package/docs/zh/intlayer_with_vite+svelte.md +16 -6
  376. package/docs/zh/intlayer_with_vite+vanilla.md +722 -0
  377. package/docs/zh/intlayer_with_vite+vue.md +19 -7
  378. package/docs/zh/packages/react-intlayer/MarkdownRenderer.md +1 -1
  379. package/docs/zh/packages/svelte-intlayer/useRewriteURL.md +1 -1
  380. package/docs/zh/releases/v8.md +27 -27
  381. package/package.json +6 -6
  382. package/src/generated/docs.entry.ts +40 -0
@@ -0,0 +1,689 @@
1
+ ---
2
+ createdAt: 2026-03-23
3
+ updatedAt: 2026-03-23
4
+ title: i18n Vite + Lit - Cách dịch ứng dụng Lit vào năm 2026
5
+ description: Khám phá cách làm cho trang web Vite và Lit của bạn hỗ trợ đa ngôn ngữ. Làm theo tài liệu để quốc tế hóa (i18n) và dịch thuật.
6
+ keywords:
7
+ - Quốc tế hóa
8
+ - Tài liệu
9
+ - Intlayer
10
+ - Vite
11
+ - Lit
12
+ - Web Components
13
+ - JavaScript
14
+ slugs:
15
+ - doc
16
+ - environment
17
+ - vite-and-lit
18
+ applicationTemplate: https://github.com/aymericzip/intlayer-vite-lit-template
19
+ history:
20
+ - version: 8.4.10
21
+ date: 2026-03-23
22
+ changes: "Init history"
23
+ ---
24
+
25
+ # Dịch trang web Vite và Lit của bạn bằng Intlayer | Quốc tế hóa (i18n)
26
+
27
+ <iframe
28
+ src="https://stackblitz.com/github/aymericzip/intlayer-vite-lit-template?embed=1&ctl=1&file=intlayer.config.ts"
29
+ className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
30
+ title="Demo CodeSandbox - How to Internationalize your application using Intlayer"
31
+ sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
32
+ loading="lazy"
33
+ />
34
+
35
+ ## Mục lục
36
+
37
+ <TOC/>
38
+
39
+ ## Intlayer là gì?
40
+
41
+ **Intlayer** là một thư viện quốc tế hóa (i18n) mã nguồn mở sáng tạo được thiết kế để đơn giản hóa việc hỗ trợ đa ngôn ngữ trong các ứng dụng web hiện đại.
42
+
43
+ Với Intlayer, bạn có thể:
44
+
45
+ - **Dễ dàng quản lý các bản dịch** bằng cách sử dụng các từ điển khai báo ở cấp độ thành phần.
46
+ - **Bản địa hóa động metadata**, route và nội dung.
47
+ - **Đảm bảo hỗ trợ TypeScript** với các kiểu được tạo tự động, cải thiện tính năng tự động hoàn thành và phát hiện lỗi.
48
+ - **Hưởng lợi từ các tính năng nâng cao**, như phát hiện và chuyển đổi ngôn ngữ động.
49
+
50
+ ---
51
+
52
+ ## Hướng dẫn từng bước để thiết lập Intlayer trong ứng dụng Vite và Lit
53
+
54
+ ### Bước 1: Cài đặt các phụ thuộc
55
+
56
+ Cài đặt các gói cần thiết bằng npm:
57
+
58
+ ```bash packageManager="npm"
59
+ npm install intlayer lit-intlayer
60
+ npm install vite-intlayer --save-dev
61
+ npx intlayer init
62
+ ```
63
+
64
+ ```bash packageManager="pnpm"
65
+ pnpm add intlayer lit-intlayer
66
+ pnpm add vite-intlayer --save-dev
67
+ pnpm intlayer init
68
+ ```
69
+
70
+ ```bash packageManager="yarn"
71
+ yarn add intlayer lit-intlayer
72
+ yarn add vite-intlayer --save-dev
73
+ yarn intlayer init
74
+ ```
75
+
76
+ ```bash packageManager="bun"
77
+ bun add intlayer lit-intlayer
78
+ bun add vite-intlayer --dev
79
+ bunx intlayer init
80
+ ```
81
+
82
+ - **intlayer**
83
+
84
+ Gói cốt lõi cung cấp các công cụ quốc tế hóa để quản lý cấu hình, dịch thuật, [khai báo nội dung](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/content_file.md), chuyển đổi mã và các [lệnh CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/cli/index.md).
85
+
86
+ - **lit-intlayer**
87
+ Gói tích hợp Intlayer với các ứng dụng Lit. Nó cung cấp các hook dựa trên `ReactiveController` (`useIntlayer`, `useLocale`, v.v.) để các LitElement tự động render lại khi ngôn ngữ thay đổi.
88
+
89
+ - **vite-intlayer**
90
+ Bao gồm plugin Vite để tích hợp Intlayer với [trình đóng gói Vite](https://vite.dev/guide/why.html#why-bundle-for-production), cũng như middleware để phát hiện ngôn ngữ ưa thích của người dùng, quản lý cookie và xử lý chuyển hướng URL.
91
+
92
+ ### Bước 2: Cấu hình dự án của bạn
93
+
94
+ Tạo một tệp cấu hình để thiết lập các ngôn ngữ cho ứng dụng của bạn:
95
+
96
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
97
+ import { Locales, type IntlayerConfig } from "intlayer";
98
+
99
+ const config: IntlayerConfig = {
100
+ internationalization: {
101
+ locales: [
102
+ Locales.ENGLISH,
103
+ Locales.FRENCH,
104
+ Locales.SPANISH,
105
+ // Các ngôn ngữ khác của bạn
106
+ ],
107
+ defaultLocale: Locales.ENGLISH,
108
+ },
109
+ };
110
+
111
+ export default config;
112
+ ```
113
+
114
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
115
+ import { Locales } from "intlayer";
116
+
117
+ /** @type {import('intlayer').IntlayerConfig} */
118
+ const config = {
119
+ internationalization: {
120
+ locales: [
121
+ Locales.ENGLISH,
122
+ Locales.FRENCH,
123
+ Locales.SPANISH,
124
+ // Các ngôn ngữ khác của bạn
125
+ ],
126
+ defaultLocale: Locales.ENGLISH,
127
+ },
128
+ };
129
+
130
+ export default config;
131
+ ```
132
+
133
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
134
+ const { Locales } = require("intlayer");
135
+
136
+ /** @type {import('intlayer').IntlayerConfig} */
137
+ const config = {
138
+ internationalization: {
139
+ locales: [
140
+ Locales.ENGLISH,
141
+ Locales.FRENCH,
142
+ Locales.SPANISH,
143
+ // Các ngôn ngữ khác của bạn
144
+ ],
145
+ defaultLocale: Locales.ENGLISH,
146
+ },
147
+ };
148
+
149
+ module.exports = config;
150
+ ```
151
+
152
+ > Thông qua tệp cấu hình này, bạn có thể thiết lập các URL bản địa hóa, chuyển hướng middleware, tên cookie, vị trí và phần mở rộng của các khai báo nội dung, tắt nhật ký Intlayer trong console, và nhiều hơn nữa. Để biết danh sách đầy đủ các tham số có sẵn, hãy tham khảo [tài liệu cấu hình](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/configuration.md).
153
+
154
+ ### Bước 3: Tích hợp Intlayer vào cấu hình Vite của bạn
155
+
156
+ Thêm plugin intlayer vào cấu hình của bạn.
157
+
158
+ ```typescript fileName="vite.config.ts" codeFormat="typescript"
159
+ import { defineConfig } from "vite";
160
+ import { intlayer } from "vite-intlayer";
161
+
162
+ // https://vitejs.dev/config/
163
+ export default defineConfig({
164
+ plugins: [intlayer()],
165
+ });
166
+ ```
167
+
168
+ ```javascript fileName="vite.config.mjs" codeFormat="esm"
169
+ import { defineConfig } from "vite";
170
+ import { intlayer } from "vite-intlayer";
171
+
172
+ // https://vitejs.dev/config/
173
+ export default defineConfig({
174
+ plugins: [intlayer()],
175
+ });
176
+ ```
177
+
178
+ ```javascript fileName="vite.config.cjs" codeFormat="commonjs"
179
+ const { defineConfig } = require("vite");
180
+ const { intlayer } = require("vite-intlayer");
181
+
182
+ // https://vitejs.dev/config/
183
+ module.exports = defineConfig({
184
+ plugins: [intlayer()],
185
+ });
186
+ ```
187
+
188
+ > Plugin Vite `intlayer()` được sử dụng để tích hợp Intlayer với Vite. Nó đảm bảo việc xây dựng các tệp khai báo nội dung và giám sát chúng trong chế độ phát triển. Nó xác định các biến môi trường Intlayer trong ứng dụng Vite. Ngoài ra, nó cung cấp các alias để tối ưu hóa hiệu suất.
189
+
190
+ ### Bước 4: Khởi động Intlayer trong điểm đầu vào (entry point) của bạn
191
+
192
+ Gọi `installIntlayer()` **trước khi** bất kỳ custom element nào được đăng ký để đối tượng ngôn ngữ toàn cầu (global locale singleton) sẵn sàng khi phần tử đầu tiên kết nối.
193
+
194
+ ```typescript fileName="src/main.ts" codeFormat="typescript"
195
+ import { installIntlayer } from "lit-intlayer";
196
+
197
+ // Phải được gọi trước khi bất kỳ LitElement nào được kết nối với DOM.
198
+ installIntlayer();
199
+
200
+ // Nhập và đăng ký các custom element của bạn.
201
+ import "./my-element.js";
202
+ ```
203
+
204
+ Nếu bạn cũng sử dụng khai báo nội dung `md()` (Markdown), hãy cài đặt thêm trình kết xuất markdown:
205
+
206
+ ```typescript fileName="src/main.ts" codeFormat="typescript"
207
+ import { installIntlayer, installIntlayerMarkdown } from "lit-intlayer";
208
+
209
+ installIntlayer();
210
+ installIntlayerMarkdown();
211
+
212
+ import "./my-element.js";
213
+ ```
214
+
215
+ ### Bước 5: Khai báo nội dung của bạn
216
+
217
+ Tạo và quản lý các khai báo nội dung để lưu trữ các bản dịch:
218
+
219
+ ```typescript fileName="src/app.content.ts" contentDeclarationFormat="typescript"
220
+ import { t, type Dictionary } from "intlayer";
221
+
222
+ const appContent = {
223
+ key: "app",
224
+ content: {
225
+ title: "Vite + Lit",
226
+
227
+ viteLogo: t({
228
+ en: "Vite logo",
229
+ fr: "Logo Vite",
230
+ es: "Logo Vite",
231
+ }),
232
+ litLogo: t({
233
+ en: "Lit logo",
234
+ fr: "Logo Lit",
235
+ es: "Logo Lit",
236
+ }),
237
+
238
+ count: t({
239
+ en: "count is {{count}}",
240
+ fr: "le compte est {{count}}",
241
+ es: "el recuento es {{count}}",
242
+ }),
243
+
244
+ readTheDocs: t({
245
+ en: "Click on the Vite and Lit logos to learn more",
246
+ fr: "Cliquez sur les logos Vite et Lit pour en savoir plus",
247
+ es: "Haga clic en los logotipos de Vite và Lit para obtener más información",
248
+ }),
249
+ },
250
+ } satisfies Dictionary;
251
+
252
+ export default appContent;
253
+ ```
254
+
255
+ ```javascript fileName="src/app.content.mjs" contentDeclarationFormat="esm"
256
+ import { t } from "intlayer";
257
+
258
+ /** @type {import('intlayer').Dictionary} */
259
+ const appContent = {
260
+ key: "app",
261
+ content: {
262
+ title: "Vite + Lit",
263
+
264
+ viteLogo: t({
265
+ en: "Vite logo",
266
+ fr: "Logo Vite",
267
+ es: "Logo Vite",
268
+ }),
269
+ litLogo: t({
270
+ en: "Lit logo",
271
+ fr: "Logo Lit",
272
+ es: "Logo Lit",
273
+ }),
274
+
275
+ count: t({
276
+ en: "count is {{count}}",
277
+ fr: "le compte est {{count}}",
278
+ es: "el recuento es {{count}}",
279
+ }),
280
+
281
+ readTheDocs: t({
282
+ en: "Click on the Vite and Lit logos to learn more",
283
+ fr: "Cliquez sur les logos Vite et Lit pour en savoir plus",
284
+ es: "Haga clic en los logotipos de Vite và Lit para obtener más información",
285
+ }),
286
+ },
287
+ };
288
+
289
+ export default appContent;
290
+ ```
291
+
292
+ ```javascript fileName="src/app.content.cjs" contentDeclarationFormat="commonjs"
293
+ const { t } = require("intlayer");
294
+
295
+ /** @type {import('intlayer').Dictionary} */
296
+ const appContent = {
297
+ key: "app",
298
+ content: {
299
+ title: "Vite + Lit",
300
+
301
+ viteLogo: t({
302
+ en: "Vite logo",
303
+ fr: "Logo Vite",
304
+ es: "Logo Vite",
305
+ }),
306
+ litLogo: t({
307
+ en: "Lit logo",
308
+ fr: "Logo Lit",
309
+ es: "Logo Lit",
310
+ }),
311
+
312
+ count: t({
313
+ en: "count is {{count}}",
314
+ fr: "le compte est {{count}}",
315
+ es: "el recuento es {{count}}",
316
+ }),
317
+
318
+ readTheDocs: t({
319
+ en: "Click on the Vite and Lit logos to learn more",
320
+ fr: "Cliquez sur les logos Vite et Lit pour en savoir plus",
321
+ es: "Haga clic en los logotipos de Vite và Lit para obtener más información",
322
+ }),
323
+ },
324
+ };
325
+
326
+ module.exports = appContent;
327
+ ```
328
+
329
+ ```json fileName="src/app.content.json" contentDeclarationFormat="json"
330
+ {
331
+ "$schema": "https://intlayer.org/schema.json",
332
+ "key": "app",
333
+ "content": {
334
+ "title": "Vite + Lit",
335
+ "viteLogo": {
336
+ "nodeType": "translation",
337
+ "translation": {
338
+ "en": "Vite logo",
339
+ "fr": "Logo Vite",
340
+ "es": "Logo Vite"
341
+ }
342
+ },
343
+ "litLogo": {
344
+ "nodeType": "translation",
345
+ "translation": {
346
+ "en": "Lit logo",
347
+ "fr": "Logo Lit",
348
+ "es": "Logo Lit"
349
+ }
350
+ },
351
+ "count": {
352
+ "nodeType": "translation",
353
+ "translation": {
354
+ "en": "count is {{count}}",
355
+ "fr": "le compte est {{count}}",
356
+ "es": "el recuento es {{count}}"
357
+ }
358
+ },
359
+ "readTheDocs": {
360
+ "nodeType": "translation",
361
+ "translation": {
362
+ "en": "Click on the Vite and Lit logos to learn more",
363
+ "fr": "Cliquez sur les logos Vite et Lit pour en savoir plus",
364
+ "es": "Haga clic en los logotipos de Vite và Lit para obtener más información"
365
+ }
366
+ }
367
+ }
368
+ }
369
+ ```
370
+
371
+ > Các khai báo nội dung của bạn có thể được định nghĩa ở bất kỳ đâu trong ứng dụng của bạn miễn là chúng được bao gồm trong thư mục `contentDir` (mặc định là `./src`) và khớp với phần mở rộng tệp khai báo nội dung (mặc định là `.content.{json,ts,tsx,js,jsx,mjs,cjs}`).
372
+ >
373
+ > Để biết thêm chi tiết, hãy tham khảo [tài liệu khai báo nội dung](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/content_file.md).
374
+
375
+ ### Bước 6: Sử dụng Intlayer trong LitElement của bạn
376
+
377
+ Sử dụng `useIntlayer` bên trong một `LitElement`. Nó trả về một proxy `ReactiveController` tự động kích hoạt render lại bất cứ khi nào ngôn ngữ hiện tại thay đổi — không cần thiết lập thêm.
378
+
379
+ ```typescript fileName="src/my-element.ts" codeFormat="typescript"
380
+ import { LitElement, html } from "lit";
381
+ import { customElement, property } from "lit/decorators.js";
382
+ import { useIntlayer } from "lit-intlayer";
383
+
384
+ @customElement("my-element")
385
+ export class MyElement extends LitElement {
386
+ @property({ type: Number })
387
+ count = 0;
388
+
389
+ // useIntlayer đăng ký chính nó như một ReactiveController.
390
+ // Phần tử sẽ tự động render lại khi ngôn ngữ thay đổi.
391
+ private content = useIntlayer(this, "app");
392
+
393
+ override render() {
394
+ const { content } = this;
395
+
396
+ return html`
397
+ <h1>${content.title}</h1>
398
+
399
+ <img src="/vite.svg" alt=${content.viteLogo.value} />
400
+ <img src="/lit.svg" alt=${content.litLogo.value} />
401
+
402
+ <button @click=${() => this.count++}>
403
+ ${content.count({ count: this.count })}
404
+ </button>
405
+
406
+ <p>${content.readTheDocs}</p>
407
+ `;
408
+ }
409
+ }
410
+ ```
411
+
412
+ > [!NOTE]
413
+ > Khi bạn cần chuỗi đã dịch trong một thuộc tính HTML gốc (ví dụ: `alt`, `aria-label`, `title`), hãy gọi `.value` trên nút lá:
414
+ >
415
+ > ```typescript
416
+ > html`<img alt=${content.viteLogo.value} />`;
417
+ > ```
418
+
419
+ ### (Tùy chọn) Bước 7: Thay đổi ngôn ngữ của nội dung
420
+
421
+ Để thay đổi ngôn ngữ của nội dung, hãy sử dụng phương thức `setLocale` được cung cấp bởi controller `useLocale`.
422
+
423
+ ```typescript fileName="src/locale-switcher.ts" codeFormat="typescript"
424
+ import { LitElement, html } from "lit";
425
+ import { customElement } from "lit/decorators.js";
426
+ import { getLocaleName } from "intlayer";
427
+ import { useLocale } from "lit-intlayer";
428
+
429
+ @customElement("locale-switcher")
430
+ export class LocaleSwitcher extends LitElement {
431
+ private locale = useLocale(this);
432
+
433
+ private _onChange(e: Event) {
434
+ const select = e.target as HTMLSelectElement;
435
+ this.locale.setLocale(select.value as any);
436
+ }
437
+
438
+ override render() {
439
+ return html`
440
+ <select @change=${this._onChange}>
441
+ ${this.locale.availableLocales.map(
442
+ (loc) => html`
443
+ <option value=${loc} ?selected=${loc === this.locale.locale}>
444
+ ${getLocaleName(loc)}
445
+ </option>
446
+ `
447
+ )}
448
+ </select>
449
+ `;
450
+ }
451
+ }
452
+ ```
453
+
454
+ ### (Tùy chọn) Bước 8: Render nội dung Markdown và HTML
455
+
456
+ Intlayer hỗ trợ các khai báo nội dung `md()` và `html()`. Trong Lit, đầu ra đã biên dịch được chèn dưới dạng HTML thô thông qua directive `unsafeHTML`.
457
+
458
+ ```typescript fileName="src/app.content.ts" contentDeclarationFormat="typescript"
459
+ import { md, t, type Dictionary } from "intlayer";
460
+
461
+ const appContent = {
462
+ key: "app",
463
+ content: {
464
+ // ...
465
+ editNote: md(
466
+ t({
467
+ en: "Edit `src/my-element.ts` and save to test **HMR**",
468
+ fr: "Modifiez `src/my-element.ts` et enregistrez pour tester **HMR**",
469
+ es: "Edite `src/my-element.ts` y guarde para probar **HMR**",
470
+ })
471
+ ),
472
+ },
473
+ } satisfies Dictionary;
474
+
475
+ export default appContent;
476
+ ```
477
+
478
+ Render HTML đã biên dịch trong phần tử của bạn:
479
+
480
+ ```typescript fileName="src/my-element.ts" codeFormat="typescript"
481
+ import { LitElement, html } from "lit";
482
+ import { customElement } from "lit/decorators.js";
483
+ import { unsafeHTML } from "lit/directives/unsafe-html.js";
484
+ import { useIntlayer } from "lit-intlayer";
485
+ import { compileMarkdown } from "lit-intlayer/markdown";
486
+
487
+ @customElement("my-element")
488
+ export class MyElement extends LitElement {
489
+ private content = useIntlayer(this, "app");
490
+
491
+ override render() {
492
+ return html`
493
+ <div class="edit-note">
494
+ ${unsafeHTML(compileMarkdown(String(this.content.editNote)))}
495
+ </div>
496
+ `;
497
+ }
498
+ }
499
+ ```
500
+
501
+ > [!TIP]
502
+ > `String(content.editNote)` gọi `toString()` trên `IntlayerNode`, nó trả về chuỗi Markdown thô. Chuyển nó vào `compileMarkdown` để lấy chuỗi HTML, sau đó render bằng directive `unsafeHTML` của Lit.
503
+
504
+ ### (Tùy chọn) Bước 9: Thêm Routing bản địa hóa vào ứng dụng của bạn
505
+
506
+ Để tạo các route duy nhất cho mỗi ngôn ngữ (hữu ích cho SEO), bạn có thể sử dụng một trình định tuyến phía máy khách cùng với các helper `localeMap` / `localeFlatMap` của Intlayer, và plugin Vite `intlayerProxy` để phát hiện ngôn ngữ phía máy chủ.
507
+
508
+ Đầu tiên, thêm `intlayerProxy` vào cấu hình Vite của bạn:
509
+
510
+ > Lưu ý rằng để sử dụng `intlayerProxy` trong môi trường production, bạn cần chuyển `vite-intlayer` từ `devDependencies` sang `dependencies`.
511
+
512
+ ```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
513
+ import { defineConfig } from "vite";
514
+ import { intlayer, intlayerProxy } from "vite-intlayer";
515
+
516
+ export default defineConfig({
517
+ plugins: [intlayer(), intlayerProxy()],
518
+ });
519
+ ```
520
+
521
+ ```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
522
+ import { defineConfig } from "vite";
523
+ import { intlayer, intlayerProxy } from "vite-intlayer";
524
+
525
+ export default defineConfig({
526
+ plugins: [intlayer(), intlayerProxy()],
527
+ });
528
+ ```
529
+
530
+ ```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
531
+ const { defineConfig } = require("vite");
532
+ const { intlayer, intlayerProxy } = require("vite-intlayer");
533
+
534
+ module.exports = defineConfig({
535
+ plugins: [intlayer(), intlayerProxy()],
536
+ });
537
+ ```
538
+
539
+ ### (Tùy chọn) Bước 10: Thay đổi URL khi ngôn ngữ thay đổi
540
+
541
+ Để cập nhật URL trình duyệt khi ngôn ngữ thay đổi, hãy sử dụng `useRewriteURL` cùng với trình chuyển đổi ngôn ngữ:
542
+
543
+ ```typescript fileName="src/locale-switcher.ts" codeFormat="typescript"
544
+ import { LitElement, html } from "lit";
545
+ import { customElement } from "lit/decorators.js";
546
+ import { getLocaleName, getLocalizedUrl } from "intlayer";
547
+ import { useLocale, useRewriteURL } from "lit-intlayer";
548
+
549
+ @customElement("locale-switcher")
550
+ export class LocaleSwitcher extends LitElement {
551
+ private locale = useLocale(this);
552
+
553
+ // Tự động viết lại URL hiện tại khi ngôn ngữ thay đổi.
554
+ private _rewriteURL = useRewriteURL(this);
555
+
556
+ private _onChange(e: Event) {
557
+ const select = e.target as HTMLSelectElement;
558
+ this.locale.setLocale(select.value as any);
559
+ }
560
+
561
+ override render() {
562
+ return html`
563
+ <select @change=${this._onChange}>
564
+ ${this.locale.availableLocales.map(
565
+ (loc) => html`
566
+ <option value=${loc} ?selected=${loc === this.locale.locale}>
567
+ ${getLocaleName(loc)}
568
+ </option>
569
+ `
570
+ )}
571
+ </select>
572
+ `;
573
+ }
574
+ }
575
+ ```
576
+
577
+ ### (Tùy chọn) Bước 11: Chuyển đổi các thuộc tính Language và Direction của HTML
578
+
579
+ Cập nhật các thuộc tính `lang` và `dir` của thẻ `<html>` để khớp với ngôn ngữ hiện tại nhằm mục đích truy cập và SEO.
580
+
581
+ ```typescript fileName="src/my-element.ts" codeFormat="typescript"
582
+ import { LitElement, html } from "lit";
583
+ import { customElement } from "lit/decorators.js";
584
+ import { getHTMLTextDir } from "intlayer";
585
+ import { useLocale } from "lit-intlayer";
586
+
587
+ @customElement("my-element")
588
+ export class MyElement extends LitElement {
589
+ private locale = useLocale(this, {
590
+ onLocaleChange: (loc) => {
591
+ document.documentElement.lang = loc;
592
+ document.documentElement.dir = getHTMLTextDir(loc);
593
+ },
594
+ });
595
+
596
+ override render() {
597
+ return html`<!-- nội dung của bạn -->`;
598
+ }
599
+ }
600
+ ```
601
+
602
+ ### (Tùy chọn) Bước 12: Trích xuất nội dung của các component
603
+
604
+ Nếu bạn có một codebase hiện có, việc chuyển đổi hàng nghìn tệp có thể mất nhiều thời gian.
605
+
606
+ Để giảm bớt quá trình này, Intlayer đề xuất một [compiler](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/compiler.md) / [extractor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/cli/extract.md) để chuyển đổi các component của bạn và trích xuất nội dung.
607
+
608
+ Để thiết lập, bạn có thể thêm một phần `compiler` trong tệp `intlayer.config.ts` của mình:
609
+
610
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
611
+ import { type IntlayerConfig } from "intlayer";
612
+
613
+ const config: IntlayerConfig = {
614
+ // ... Các phần còn lại của cấu hình
615
+ compiler: {
616
+ /**
617
+ * Cho biết liệu trình biên dịch có được bật hay không.
618
+ */
619
+ enabled: true,
620
+
621
+ /**
622
+ * Xác định đường dẫn tệp đầu ra
623
+ */
624
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
625
+
626
+ /**
627
+ * Cho biết liệu các component có được lưu sau khi được chuyển đổi hay không.
628
+ * Bằng cách đó, trình biên dịch có thể chỉ cần chạy một lần để chuyển đổi ứng dụng, sau đó nó có thể bị xóa.
629
+ */
630
+ saveComponents: false,
631
+
632
+ /**
633
+ * Tiền tố khóa từ điển
634
+ */
635
+ dictionaryKeyPrefix: "",
636
+ },
637
+ };
638
+
639
+ export default config;
640
+ ```
641
+
642
+ ### Cấu hình TypeScript
643
+
644
+ Đảm bảo rằng cấu hình TypeScript của bạn bao gồm các kiểu được tạo tự động.
645
+
646
+ ```json5 fileName="tsconfig.json"
647
+ {
648
+ "compilerOptions": {
649
+ // ...
650
+ "experimentalDecorators": true,
651
+ "useDefineForClassFields": false,
652
+ },
653
+ "include": ["src", ".intlayer/**/*.ts"],
654
+ }
655
+ ```
656
+
657
+ > `experimentalDecorators` và `useDefineForClassFields: false` là bắt buộc đối với Lit để hỗ trợ decorator.
658
+
659
+ ### Cấu hình Git
660
+
661
+ Khuyên bạn nên bỏ qua các tệp do Intlayer tạo ra. Điều này cho phép bạn tránh việc commit chúng lên kho lưu trữ Git của mình.
662
+
663
+ Để thực hiện việc này, bạn có thể thêm các hướng dẫn sau vào tệp `.gitignore` của mình:
664
+
665
+ ```bash
666
+ # Bỏ qua các tệp do Intlayer tạo ra
667
+ .intlayer
668
+ ```
669
+
670
+ ### Tiện ích mở rộng VS Code
671
+
672
+ Để cải thiện trải nghiệm phát triển của bạn với Intlayer, bạn có thể cài đặt **Tiện ích mở rộng Intlayer VS Code** chính thức.
673
+
674
+ [Cài đặt từ VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
675
+
676
+ Tiện ích mở rộng này cung cấp:
677
+
678
+ - **Tự động hoàn thành** cho các khóa dịch.
679
+ - **Phát hiện lỗi thời gian thực** cho các bản dịch bị thiếu.
680
+ - **Xem trước trực tuyến** nội dung đã dịch.
681
+ - **Các hành động nhanh** để dễ dàng tạo và cập nhật các bản dịch.
682
+
683
+ Để biết thêm chi tiết về cách sử dụng tiện ích mở rộng, hãy tham khảo [tài liệu Tiện ích mở rộng Intlayer VS Code](https://intlayer.org/doc/vs-code-extension).
684
+
685
+ ---
686
+
687
+ ### Tìm hiểu thêm
688
+
689
+ Để tìm hiểu sâu hơn, bạn có thể triển khai [trình soạn thảo trực quan](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_visual_editor.md) hoặc bên thứ ba hóa nội dung của bạn bằng [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_CMS.md).