@intlayer/docs 8.3.0-canary.4 → 8.3.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 (240) hide show
  1. package/docs/ar/compiler.md +84 -49
  2. package/docs/ar/configuration.md +80 -37
  3. package/docs/ar/intlayer_with_nextjs_16.md +174 -1
  4. package/docs/ar/intlayer_with_nextjs_compiler.md +174 -1
  5. package/docs/ar/intlayer_with_react_router_v7.md +224 -1
  6. package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +225 -1
  7. package/docs/ar/intlayer_with_svelte_kit.md +175 -2
  8. package/docs/ar/intlayer_with_tanstack.md +176 -1
  9. package/docs/ar/intlayer_with_vite+preact.md +174 -1
  10. package/docs/ar/intlayer_with_vite+react.md +174 -1
  11. package/docs/ar/intlayer_with_vite+solid.md +174 -1
  12. package/docs/ar/intlayer_with_vite+svelte.md +174 -1
  13. package/docs/ar/intlayer_with_vite+vue.md +174 -1
  14. package/docs/de/compiler.md +83 -48
  15. package/docs/de/configuration.md +434 -212
  16. package/docs/de/intlayer_with_nextjs_16.md +176 -1
  17. package/docs/de/intlayer_with_nextjs_compiler.md +106 -349
  18. package/docs/de/intlayer_with_react_router_v7.md +225 -2
  19. package/docs/de/intlayer_with_react_router_v7_fs_routes.md +221 -79
  20. package/docs/de/intlayer_with_svelte_kit.md +158 -2
  21. package/docs/de/intlayer_with_tanstack.md +159 -1
  22. package/docs/de/intlayer_with_vite+preact.md +157 -1
  23. package/docs/de/intlayer_with_vite+react.md +157 -1
  24. package/docs/de/intlayer_with_vite+solid.md +159 -3
  25. package/docs/de/intlayer_with_vite+svelte.md +157 -1
  26. package/docs/de/intlayer_with_vite+vue.md +157 -1
  27. package/docs/en/compiler.md +60 -33
  28. package/docs/en/configuration.md +80 -57
  29. package/docs/en/intlayer_with_nextjs_16.md +176 -0
  30. package/docs/en/intlayer_with_nextjs_compiler.md +179 -1
  31. package/docs/en/intlayer_with_react_router_v7.md +159 -0
  32. package/docs/en/intlayer_with_react_router_v7_fs_routes.md +159 -0
  33. package/docs/en/intlayer_with_svelte_kit.md +159 -0
  34. package/docs/en/intlayer_with_tanstack.md +160 -1
  35. package/docs/en/intlayer_with_vite+preact.md +159 -0
  36. package/docs/en/intlayer_with_vite+react.md +159 -0
  37. package/docs/en/intlayer_with_vite+solid.md +148 -27
  38. package/docs/en/intlayer_with_vite+svelte.md +159 -0
  39. package/docs/en/intlayer_with_vite+vue.md +142 -41
  40. package/docs/en-GB/compiler.md +66 -34
  41. package/docs/en-GB/configuration.md +78 -36
  42. package/docs/es/compiler.md +83 -48
  43. package/docs/es/configuration.md +429 -206
  44. package/docs/es/intlayer_with_adonisjs.md +1 -1
  45. package/docs/es/intlayer_with_express.md +1 -1
  46. package/docs/es/intlayer_with_fastify.md +1 -1
  47. package/docs/es/intlayer_with_hono.md +1 -1
  48. package/docs/es/intlayer_with_nestjs.md +1 -1
  49. package/docs/es/intlayer_with_nextjs_16.md +176 -3
  50. package/docs/es/intlayer_with_nextjs_compiler.md +175 -2
  51. package/docs/es/intlayer_with_nuxt.md +1 -1
  52. package/docs/es/intlayer_with_react_router_v7.md +227 -4
  53. package/docs/es/intlayer_with_react_router_v7_fs_routes.md +162 -4
  54. package/docs/es/intlayer_with_svelte_kit.md +158 -2
  55. package/docs/es/intlayer_with_tanstack.md +160 -2
  56. package/docs/es/intlayer_with_vite+preact.md +162 -6
  57. package/docs/es/intlayer_with_vite+react.md +160 -4
  58. package/docs/es/intlayer_with_vite+solid.md +163 -7
  59. package/docs/es/intlayer_with_vite+svelte.md +157 -1
  60. package/docs/es/intlayer_with_vite+vue.md +165 -9
  61. package/docs/fr/compiler.md +81 -46
  62. package/docs/fr/configuration.md +355 -134
  63. package/docs/fr/intlayer_with_adonisjs.md +1 -1
  64. package/docs/fr/intlayer_with_express.md +1 -1
  65. package/docs/fr/intlayer_with_fastify.md +1 -1
  66. package/docs/fr/intlayer_with_hono.md +1 -1
  67. package/docs/fr/intlayer_with_nestjs.md +1 -1
  68. package/docs/fr/intlayer_with_nextjs_16.md +183 -7
  69. package/docs/fr/intlayer_with_nextjs_compiler.md +179 -3
  70. package/docs/fr/intlayer_with_react_router_v7.md +229 -3
  71. package/docs/fr/intlayer_with_react_router_v7_fs_routes.md +237 -6
  72. package/docs/fr/intlayer_with_svelte_kit.md +158 -2
  73. package/docs/fr/intlayer_with_tanstack.md +159 -1
  74. package/docs/fr/intlayer_with_vite+preact.md +164 -8
  75. package/docs/fr/intlayer_with_vite+react.md +162 -6
  76. package/docs/fr/intlayer_with_vite+solid.md +163 -7
  77. package/docs/fr/intlayer_with_vite+svelte.md +157 -1
  78. package/docs/fr/intlayer_with_vite+vue.md +164 -8
  79. package/docs/hi/compiler.md +81 -46
  80. package/docs/hi/configuration.md +87 -44
  81. package/docs/hi/intlayer_with_nextjs_16.md +174 -1
  82. package/docs/hi/intlayer_with_nextjs_compiler.md +174 -1
  83. package/docs/hi/intlayer_with_react_router_v7.md +224 -1
  84. package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +225 -1
  85. package/docs/hi/intlayer_with_svelte_kit.md +158 -2
  86. package/docs/hi/intlayer_with_tanstack.md +159 -1
  87. package/docs/hi/intlayer_with_vite+preact.md +157 -1
  88. package/docs/hi/intlayer_with_vite+react.md +157 -1
  89. package/docs/hi/intlayer_with_vite+solid.md +157 -1
  90. package/docs/hi/intlayer_with_vite+svelte.md +157 -1
  91. package/docs/hi/intlayer_with_vite+vue.md +157 -1
  92. package/docs/id/compiler.md +84 -51
  93. package/docs/id/configuration.md +83 -45
  94. package/docs/id/intlayer_with_nextjs_16.md +174 -1
  95. package/docs/id/intlayer_with_nextjs_compiler.md +174 -1
  96. package/docs/id/intlayer_with_react_router_v7.md +224 -1
  97. package/docs/id/intlayer_with_react_router_v7_fs_routes.md +225 -1
  98. package/docs/id/intlayer_with_svelte_kit.md +158 -2
  99. package/docs/id/intlayer_with_tanstack.md +159 -1
  100. package/docs/id/intlayer_with_vite+preact.md +157 -1
  101. package/docs/id/intlayer_with_vite+react.md +157 -1
  102. package/docs/id/intlayer_with_vite+solid.md +157 -1
  103. package/docs/id/intlayer_with_vite+svelte.md +157 -1
  104. package/docs/id/intlayer_with_vite+vue.md +157 -1
  105. package/docs/it/compiler.md +81 -46
  106. package/docs/it/configuration.md +426 -204
  107. package/docs/it/intlayer_with_nextjs_16.md +174 -1
  108. package/docs/it/intlayer_with_nextjs_compiler.md +174 -1
  109. package/docs/it/intlayer_with_react_router_v7.md +225 -2
  110. package/docs/it/intlayer_with_react_router_v7_fs_routes.md +226 -2
  111. package/docs/it/intlayer_with_svelte_kit.md +158 -2
  112. package/docs/it/intlayer_with_tanstack.md +159 -1
  113. package/docs/it/intlayer_with_vite+preact.md +157 -1
  114. package/docs/it/intlayer_with_vite+react.md +157 -1
  115. package/docs/it/intlayer_with_vite+solid.md +159 -3
  116. package/docs/it/intlayer_with_vite+svelte.md +157 -1
  117. package/docs/it/intlayer_with_vite+vue.md +157 -1
  118. package/docs/ja/compiler.md +94 -58
  119. package/docs/ja/configuration.md +88 -45
  120. package/docs/ja/intlayer_with_nextjs_16.md +174 -1
  121. package/docs/ja/intlayer_with_nextjs_compiler.md +174 -1
  122. package/docs/ja/intlayer_with_react_router_v7.md +184 -394
  123. package/docs/ja/intlayer_with_react_router_v7_fs_routes.md +226 -2
  124. package/docs/ja/intlayer_with_svelte_kit.md +119 -595
  125. package/docs/ja/intlayer_with_tanstack.md +131 -642
  126. package/docs/ja/intlayer_with_vite+preact.md +111 -1231
  127. package/docs/ja/intlayer_with_vite+react.md +129 -1304
  128. package/docs/ja/intlayer_with_vite+solid.md +159 -3
  129. package/docs/ja/intlayer_with_vite+svelte.md +157 -1
  130. package/docs/ja/intlayer_with_vite+vue.md +157 -1
  131. package/docs/ko/compiler.md +88 -52
  132. package/docs/ko/configuration.md +87 -44
  133. package/docs/ko/intlayer_with_nextjs_16.md +174 -1
  134. package/docs/ko/intlayer_with_nextjs_compiler.md +174 -1
  135. package/docs/ko/intlayer_with_react_router_v7.md +225 -2
  136. package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +226 -2
  137. package/docs/ko/intlayer_with_svelte_kit.md +158 -2
  138. package/docs/ko/intlayer_with_tanstack.md +159 -1
  139. package/docs/ko/intlayer_with_vite+preact.md +157 -1
  140. package/docs/ko/intlayer_with_vite+react.md +157 -1
  141. package/docs/ko/intlayer_with_vite+solid.md +159 -3
  142. package/docs/ko/intlayer_with_vite+svelte.md +157 -1
  143. package/docs/ko/intlayer_with_vite+vue.md +157 -1
  144. package/docs/pl/compiler.md +84 -51
  145. package/docs/pl/configuration.md +83 -37
  146. package/docs/pl/intlayer_with_nextjs_16.md +174 -1
  147. package/docs/pl/intlayer_with_nextjs_compiler.md +174 -1
  148. package/docs/pl/intlayer_with_react_router_v7.md +224 -1
  149. package/docs/pl/intlayer_with_react_router_v7_fs_routes.md +225 -1
  150. package/docs/pl/intlayer_with_svelte_kit.md +158 -2
  151. package/docs/pl/intlayer_with_tanstack.md +159 -1
  152. package/docs/pl/intlayer_with_vite+preact.md +157 -1
  153. package/docs/pl/intlayer_with_vite+react.md +157 -1
  154. package/docs/pl/intlayer_with_vite+solid.md +157 -1
  155. package/docs/pl/intlayer_with_vite+svelte.md +157 -1
  156. package/docs/pl/intlayer_with_vite+vue.md +157 -1
  157. package/docs/pt/compiler.md +81 -46
  158. package/docs/pt/configuration.md +404 -194
  159. package/docs/pt/intlayer_with_nextjs_16.md +174 -1
  160. package/docs/pt/intlayer_with_nextjs_compiler.md +174 -1
  161. package/docs/pt/intlayer_with_react_router_v7.md +224 -1
  162. package/docs/pt/intlayer_with_react_router_v7_fs_routes.md +225 -1
  163. package/docs/pt/intlayer_with_svelte_kit.md +158 -2
  164. package/docs/pt/intlayer_with_tanstack.md +159 -1
  165. package/docs/pt/intlayer_with_vite+preact.md +157 -1
  166. package/docs/pt/intlayer_with_vite+react.md +157 -1
  167. package/docs/pt/intlayer_with_vite+solid.md +157 -1
  168. package/docs/pt/intlayer_with_vite+svelte.md +157 -1
  169. package/docs/pt/intlayer_with_vite+vue.md +157 -1
  170. package/docs/ru/compiler.md +90 -57
  171. package/docs/ru/configuration.md +76 -46
  172. package/docs/ru/intlayer_with_nextjs_16.md +174 -1
  173. package/docs/ru/intlayer_with_nextjs_compiler.md +174 -1
  174. package/docs/ru/intlayer_with_react_router_v7.md +224 -1
  175. package/docs/ru/intlayer_with_react_router_v7_fs_routes.md +225 -1
  176. package/docs/ru/intlayer_with_svelte_kit.md +158 -2
  177. package/docs/ru/intlayer_with_tanstack.md +159 -1
  178. package/docs/ru/intlayer_with_vite+preact.md +157 -1
  179. package/docs/ru/intlayer_with_vite+react.md +157 -1
  180. package/docs/ru/intlayer_with_vite+solid.md +157 -1
  181. package/docs/ru/intlayer_with_vite+svelte.md +157 -1
  182. package/docs/ru/intlayer_with_vite+vue.md +157 -1
  183. package/docs/tr/compiler.md +85 -52
  184. package/docs/tr/configuration.md +83 -40
  185. package/docs/tr/intlayer_with_nextjs_16.md +174 -1
  186. package/docs/tr/intlayer_with_nextjs_compiler.md +174 -1
  187. package/docs/tr/intlayer_with_react_router_v7.md +224 -1
  188. package/docs/tr/intlayer_with_react_router_v7_fs_routes.md +225 -1
  189. package/docs/tr/intlayer_with_svelte_kit.md +158 -2
  190. package/docs/tr/intlayer_with_tanstack.md +159 -1
  191. package/docs/tr/intlayer_with_vite+preact.md +157 -1
  192. package/docs/tr/intlayer_with_vite+react.md +157 -1
  193. package/docs/tr/intlayer_with_vite+solid.md +157 -1
  194. package/docs/tr/intlayer_with_vite+svelte.md +157 -1
  195. package/docs/tr/intlayer_with_vite+vue.md +157 -1
  196. package/docs/uk/compiler.md +96 -61
  197. package/docs/uk/configuration.md +83 -37
  198. package/docs/uk/intlayer_with_nextjs_16.md +174 -1
  199. package/docs/uk/intlayer_with_nextjs_compiler.md +174 -1
  200. package/docs/uk/intlayer_with_react_router_v7.md +224 -1
  201. package/docs/uk/intlayer_with_react_router_v7_fs_routes.md +225 -1
  202. package/docs/uk/intlayer_with_svelte_kit.md +157 -1
  203. package/docs/uk/intlayer_with_tanstack.md +159 -1
  204. package/docs/uk/intlayer_with_vite+preact.md +157 -1
  205. package/docs/uk/intlayer_with_vite+react.md +157 -1
  206. package/docs/uk/intlayer_with_vite+solid.md +157 -1
  207. package/docs/uk/intlayer_with_vite+svelte.md +157 -1
  208. package/docs/uk/intlayer_with_vite+vue.md +157 -1
  209. package/docs/vi/compiler.md +85 -50
  210. package/docs/vi/configuration.md +85 -39
  211. package/docs/vi/intlayer_with_nextjs_16.md +174 -1
  212. package/docs/vi/intlayer_with_nextjs_compiler.md +174 -1
  213. package/docs/vi/intlayer_with_react_router_v7.md +224 -1
  214. package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +225 -1
  215. package/docs/vi/intlayer_with_svelte_kit.md +158 -2
  216. package/docs/vi/intlayer_with_tanstack.md +159 -1
  217. package/docs/vi/intlayer_with_vite+preact.md +157 -1
  218. package/docs/vi/intlayer_with_vite+react.md +157 -1
  219. package/docs/vi/intlayer_with_vite+solid.md +157 -1
  220. package/docs/vi/intlayer_with_vite+svelte.md +157 -1
  221. package/docs/vi/intlayer_with_vite+vue.md +157 -1
  222. package/docs/zh/compiler.md +84 -49
  223. package/docs/zh/configuration.md +80 -37
  224. package/docs/zh/intlayer_with_adonisjs.md +1 -1
  225. package/docs/zh/intlayer_with_express.md +1 -1
  226. package/docs/zh/intlayer_with_fastify.md +1 -1
  227. package/docs/zh/intlayer_with_hono.md +1 -1
  228. package/docs/zh/intlayer_with_nestjs.md +1 -1
  229. package/docs/zh/intlayer_with_nextjs_16.md +174 -1
  230. package/docs/zh/intlayer_with_nextjs_compiler.md +174 -1
  231. package/docs/zh/intlayer_with_react_router_v7.md +227 -4
  232. package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +228 -4
  233. package/docs/zh/intlayer_with_svelte_kit.md +158 -2
  234. package/docs/zh/intlayer_with_tanstack.md +159 -1
  235. package/docs/zh/intlayer_with_vite+preact.md +159 -3
  236. package/docs/zh/intlayer_with_vite+react.md +157 -1
  237. package/docs/zh/intlayer_with_vite+solid.md +161 -5
  238. package/docs/zh/intlayer_with_vite+svelte.md +157 -1
  239. package/docs/zh/intlayer_with_vite+vue.md +158 -2
  240. package/package.json +6 -6
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-04-18
3
- updatedAt: 2025-12-30
3
+ updatedAt: 2026-03-12
4
4
  title: Vite + Svelte i18n - Cách dịch ứng dụng Svelte năm 2026
5
5
  description: Khám phá cách làm cho trang web Vite và Svelte của bạn đa ngôn ngữ. Theo dõi tài liệu để quốc tế hóa (i18n) và dịch nó.
6
6
  keywords:
@@ -496,6 +496,162 @@ Tiện ích mở rộng này cung cấp:
496
496
 
497
497
  ### Đi xa hơn
498
498
 
499
+ ### (Tùy chọn) Bước 1 : Trích xuất nội dung các thành phần của bạn
500
+
501
+ Nếu bạn có một cơ sở mã hiện có, việc chuyển đổi hàng nghìn tệp có thể tốn nhiều thời gian.
502
+
503
+ Để đơn giản hóa quy trình này, Intlayer đề xuất một [trình biên dịch](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/compiler.md) / [trình trích xuất](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/cli/extract.md) để chuyển đổi các thành phần của bạn và trích xuất nội dung.
504
+
505
+ Để thiết lập, bạn có thể thêm phần `compiler` vào tệp `intlayer.config.ts` của mình:
506
+
507
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
508
+ import { type IntlayerConfig } from "intlayer";
509
+
510
+ const config: IntlayerConfig = {
511
+ // ... Phần còn lại của cấu hình
512
+ compiler: {
513
+ /**
514
+ * Cho biết trình biên dịch có nên được bật hay không.
515
+ */
516
+ enabled: true,
517
+
518
+ /**
519
+ * Xác định đường dẫn các tệp đầu ra
520
+ */
521
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
522
+
523
+ /**
524
+ * Cho biết các thành phần có nên được lưu sau khi chuyển đổi hay không. Bằng cách đó, trình biên dịch có thể được chạy chỉ một lần để chuyển đổi ứng dụng, sau đó có thể được gỡ bỏ.
525
+ */
526
+ saveComponents: false,
527
+
528
+ /**
529
+ * Tiền tố khóa từ điển
530
+ */
531
+ dictionaryKeyPrefix: "",
532
+ },
533
+ };
534
+
535
+ export default config;
536
+ ```
537
+
538
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
539
+ /** @type {import('intlayer').IntlayerConfig} */
540
+ const config = {
541
+ // ... Phần còn lại của cấu hình
542
+ compiler: {
543
+ /**
544
+ * Cho biết trình biên dịch có nên được bật hay không.
545
+ */
546
+ enabled: true,
547
+
548
+ /**
549
+ * Xác định đường dẫn các tệp đầu ra
550
+ */
551
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
552
+
553
+ /**
554
+ * Cho biết các thành phần có nên được lưu sau khi chuyển đổi hay không. Bằng cách đó, trình biên dịch có thể được chạy chỉ một lần để chuyển đổi ứng dụng, sau đó có thể được gỡ bỏ.
555
+ */
556
+ saveComponents: false,
557
+
558
+ /**
559
+ * Tiền tố khóa từ điển
560
+ */
561
+ dictionaryKeyPrefix: "",
562
+ },
563
+ };
564
+
565
+ export default config;
566
+ ```
567
+
568
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
569
+ /** @type {import('intlayer').IntlayerConfig} */
570
+ const config = {
571
+ // ... Phần còn lại của cấu hình
572
+ compiler: {
573
+ /**
574
+ * Cho biết trình biên dịch có nên được bật hay không.
575
+ */
576
+ enabled: true,
577
+
578
+ /**
579
+ * Xác định đường dẫn các tệp đầu ra
580
+ */
581
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
582
+
583
+ /**
584
+ * Cho biết các thành phần có nên được lưu sau khi chuyển đổi hay không. Bằng cách đó, trình biên dịch có thể được chạy chỉ một lần để chuyển đổi ứng dụng, sau đó có thể được gỡ bỏ.
585
+ */
586
+ saveComponents: false,
587
+
588
+ /**
589
+ * Tiền tố khóa từ điển
590
+ */
591
+ dictionaryKeyPrefix: "",
592
+ },
593
+ };
594
+
595
+ module.exports = config;
596
+ ```
597
+
598
+ <Tabs>
599
+ <Tab value='Lệnh trích xuất'>
600
+
601
+ Chạy trình trích xuất để chuyển đổi các thành phần và trích xuất nội dung
602
+
603
+ ```bash packageManager="npm"
604
+ npx intlayer extract
605
+ ```
606
+
607
+ ```bash packageManager="pnpm"
608
+ pnpm intlayer extract
609
+ ```
610
+
611
+ ```bash packageManager="yarn"
612
+ yarn intlayer extract
613
+ ```
614
+
615
+ ```bash packageManager="bun"
616
+ bunx intlayer extract
617
+ ```
618
+
619
+ </Tab>
620
+ <Tab value='Trình biên dịch Babel'>
621
+
622
+ Cập nhật `vite.config.ts` của bạn để bao gồm plugin `intlayerCompiler`:
623
+
624
+ ```ts fileName="vite.config.ts"
625
+ import { defineConfig } from "vite";
626
+ import { intlayer, intlayerCompiler } from "vite-intlayer";
627
+
628
+ export default defineConfig({
629
+ plugins: [
630
+ intlayer(),
631
+ intlayerCompiler(), // Thêm plugin trình biên dịch
632
+ ],
633
+ });
634
+ ```
635
+
636
+ ```bash packageManager="npm"
637
+ npm run build # Hoặc npm run dev
638
+ ```
639
+
640
+ ```bash packageManager="pnpm"
641
+ pnpm run build # Or pnpm run dev
642
+ ```
643
+
644
+ ```bash packageManager="yarn"
645
+ yarn build # Or yarn dev
646
+ ```
647
+
648
+ ```bash packageManager="bun"
649
+ bun run build # Or bun run dev
650
+ ```
651
+
652
+ </Tab>
653
+ </Tabs>
654
+
499
655
  ### Tiến xa hơn
500
656
 
501
657
  Để tiến xa hơn, bạn có thể triển khai [trình chỉnh sửa trực quan](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_visual_editor.md) hoặc tách nội dung của bạn ra bên ngoài bằng cách sử dụng [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_CMS.md).
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-04-18
3
- updatedAt: 2025-12-30
3
+ updatedAt: 2026-03-12
4
4
  title: Vite + Vue i18n - Cách dịch ứng dụng Vue năm 2026
5
5
  description: Khám phá cách làm cho trang web Vite và Vue của bạn đa ngôn ngữ. Theo dõi tài liệu để quốc tế hóa (i18n) và dịch nó.
6
6
  keywords:
@@ -1080,6 +1080,162 @@ Tiện ích mở rộng này cung cấp:
1080
1080
 
1081
1081
  ---
1082
1082
 
1083
+ ### (Tùy chọn) Bước 1 : Trích xuất nội dung các thành phần của bạn
1084
+
1085
+ Nếu bạn có một cơ sở mã hiện có, việc chuyển đổi hàng nghìn tệp có thể tốn nhiều thời gian.
1086
+
1087
+ Để đơn giản hóa quy trình này, Intlayer đề xuất một [trình biên dịch](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/compiler.md) / [trình trích xuất](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/cli/extract.md) để chuyển đổi các thành phần của bạn và trích xuất nội dung.
1088
+
1089
+ Để thiết lập, bạn có thể thêm phần `compiler` vào tệp `intlayer.config.ts` của mình:
1090
+
1091
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
1092
+ import { type IntlayerConfig } from "intlayer";
1093
+
1094
+ const config: IntlayerConfig = {
1095
+ // ... Phần còn lại của cấu hình
1096
+ compiler: {
1097
+ /**
1098
+ * Cho biết trình biên dịch có nên được bật hay không.
1099
+ */
1100
+ enabled: true,
1101
+
1102
+ /**
1103
+ * Xác định đường dẫn các tệp đầu ra
1104
+ */
1105
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
1106
+
1107
+ /**
1108
+ * Cho biết các thành phần có nên được lưu sau khi chuyển đổi hay không. Bằng cách đó, trình biên dịch có thể được chạy chỉ một lần để chuyển đổi ứng dụng, sau đó có thể được gỡ bỏ.
1109
+ */
1110
+ saveComponents: false,
1111
+
1112
+ /**
1113
+ * Tiền tố khóa từ điển
1114
+ */
1115
+ dictionaryKeyPrefix: "",
1116
+ },
1117
+ };
1118
+
1119
+ export default config;
1120
+ ```
1121
+
1122
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
1123
+ /** @type {import('intlayer').IntlayerConfig} */
1124
+ const config = {
1125
+ // ... Phần còn lại của cấu hình
1126
+ compiler: {
1127
+ /**
1128
+ * Cho biết trình biên dịch có nên được bật hay không.
1129
+ */
1130
+ enabled: true,
1131
+
1132
+ /**
1133
+ * Xác định đường dẫn các tệp đầu ra
1134
+ */
1135
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
1136
+
1137
+ /**
1138
+ * Cho biết các thành phần có nên được lưu sau khi chuyển đổi hay không. Bằng cách đó, trình biên dịch có thể được chạy chỉ một lần để chuyển đổi ứng dụng, sau đó có thể được gỡ bỏ.
1139
+ */
1140
+ saveComponents: false,
1141
+
1142
+ /**
1143
+ * Tiền tố khóa từ điển
1144
+ */
1145
+ dictionaryKeyPrefix: "",
1146
+ },
1147
+ };
1148
+
1149
+ export default config;
1150
+ ```
1151
+
1152
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
1153
+ /** @type {import('intlayer').IntlayerConfig} */
1154
+ const config = {
1155
+ // ... Phần còn lại của cấu hình
1156
+ compiler: {
1157
+ /**
1158
+ * Cho biết trình biên dịch có nên được bật hay không.
1159
+ */
1160
+ enabled: true,
1161
+
1162
+ /**
1163
+ * Xác định đường dẫn các tệp đầu ra
1164
+ */
1165
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
1166
+
1167
+ /**
1168
+ * Cho biết các thành phần có nên được lưu sau khi chuyển đổi hay không. Bằng cách đó, trình biên dịch có thể được chạy chỉ một lần để chuyển đổi ứng dụng, sau đó có thể được gỡ bỏ.
1169
+ */
1170
+ saveComponents: false,
1171
+
1172
+ /**
1173
+ * Tiền tố khóa từ điển
1174
+ */
1175
+ dictionaryKeyPrefix: "",
1176
+ },
1177
+ };
1178
+
1179
+ module.exports = config;
1180
+ ```
1181
+
1182
+ <Tabs>
1183
+ <Tab value='Lệnh trích xuất'>
1184
+
1185
+ Chạy trình trích xuất để chuyển đổi các thành phần và trích xuất nội dung
1186
+
1187
+ ```bash packageManager="npm"
1188
+ npx intlayer extract
1189
+ ```
1190
+
1191
+ ```bash packageManager="pnpm"
1192
+ pnpm intlayer extract
1193
+ ```
1194
+
1195
+ ```bash packageManager="yarn"
1196
+ yarn intlayer extract
1197
+ ```
1198
+
1199
+ ```bash packageManager="bun"
1200
+ bunx intlayer extract
1201
+ ```
1202
+
1203
+ </Tab>
1204
+ <Tab value='Trình biên dịch Babel'>
1205
+
1206
+ Cập nhật `vite.config.ts` của bạn để bao gồm plugin `intlayerCompiler`:
1207
+
1208
+ ```ts fileName="vite.config.ts"
1209
+ import { defineConfig } from "vite";
1210
+ import { intlayer, intlayerCompiler } from "vite-intlayer";
1211
+
1212
+ export default defineConfig({
1213
+ plugins: [
1214
+ intlayer(),
1215
+ intlayerCompiler(), // Thêm plugin trình biên dịch
1216
+ ],
1217
+ });
1218
+ ```
1219
+
1220
+ ```bash packageManager="npm"
1221
+ npm run build # Hoặc npm run dev
1222
+ ```
1223
+
1224
+ ```bash packageManager="pnpm"
1225
+ pnpm run build # Or pnpm run dev
1226
+ ```
1227
+
1228
+ ```bash packageManager="yarn"
1229
+ yarn build # Or yarn dev
1230
+ ```
1231
+
1232
+ ```bash packageManager="bun"
1233
+ bun run build # Or bun run dev
1234
+ ```
1235
+
1236
+ </Tab>
1237
+ </Tabs>
1238
+
1083
1239
  ### Tiến xa hơn
1084
1240
 
1085
1241
  Để tiến xa 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 tách nội dung của bạn ra bên ngoài bằng cách sử dụng [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_CMS.md).
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-09-09
3
- updatedAt: 2026-03-10
3
+ updatedAt: 2026-03-12
4
4
  title: Intlayer 编译器 | 用于 i18n 的自动内容提取
5
5
  description: 使用 Intlayer 编译器自动化您的国际化流程。直接从组件中提取内容,实现 Vite、Next.js 等框架中更快速、更高效的 i18n。
6
6
  keywords:
@@ -21,8 +21,8 @@ slugs:
21
21
  - compiler
22
22
  history:
23
23
  - version: 8.2.0
24
- date: 2026-03-10
25
- changes: Update compiler options, add FilePathPattern support
24
+ date: 2026-03-09
25
+ changes: 更新编译器选项,添加 FilePathPattern 支持
26
26
  - version: 8.1.7
27
27
  date: 2026-02-25
28
28
  changes: 更新编译器选项
@@ -136,9 +136,9 @@ const {
136
136
  module.exports = {
137
137
  presets: ["next/babel"],
138
138
  plugins: [
139
- // Extract content from components into dictionaries
139
+ // 从组件提取内容到字典
140
140
  [intlayerExtractBabelPlugin, getExtractPluginOptions()],
141
- // Optimize imports by replacing useIntlayer with direct dictionary imports
141
+ // 通过将 useIntlayer 替换为直接字典导入来优化导入
142
142
  [intlayerOptimizeBabelPlugin, getOptimizePluginOptions()],
143
143
  ],
144
144
  };
@@ -149,73 +149,85 @@ module.exports = {
149
149
  See complete tutorial: [Intlayer Compiler with Next.js](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_with_nextjs_compiler.md)
150
150
 
151
151
  </Tab>
152
+ </Tabs>
152
153
 
153
154
  ### 自定义配置
154
155
 
155
156
  要自定义编译器的行为,您可以更新项目根目录中的 `intlayer.config.ts` 文件。
156
157
 
157
- ```ts fileName="intlayer.config.ts"
158
+ ````ts fileName="intlayer.config.ts"
158
159
  import { type IntlayerConfig, Locales } from "intlayer";
159
160
 
160
161
  const config: IntlayerConfig = {
161
162
  compiler: {
162
163
  /**
164
+ * 指示是否应启用编译器。
163
165
  * 设置为 “build-only” 以在开发期间跳过编译器并加快启动速度。
164
166
  */
165
167
  enabled: true,
166
168
 
167
169
  /**
168
- * Pattern to traverse the code to optimize.
170
+ * 定义输出文件路径。替换 `outputDir`。
171
+ *
172
+ * - 以 `./` 开头的路径相对于组件目录解析。
173
+ * - 以 `/` 开头的路径相对于项目根目录 (`baseDir`) 解析。
174
+ *
175
+ * - 在路径中包含 `{{locale}}` 变量将启用按语言分离开的字典生成。
176
+ *
177
+ * 示例:
178
+ * ```ts
179
+ * {
180
+ * // 在组件旁边创建多语言 .content.ts 文件
181
+ * output: ({ fileName, extension }) => `./${fileName}${extension}`,
182
+ *
183
+ * // output: './{{fileName}}{{extension}}', // 使用字符串模板的等效写法
184
+ * }
185
+ * ```
186
+ *
187
+ * ```ts
188
+ * {
189
+ * // 在项目根目录下创建按语言集中的 JSON 文件
190
+ * output: ({ key, locale }) => `/locales/${locale}/${key}.content.json`,
191
+ *
192
+ * // output: '/locales/{{locale}}/{{key}}.content.json', // 使用字符串模板的等效写法
193
+ * }
194
+ * ```
195
+ *
196
+ * 变量列表:
197
+ * - `fileName`: 文件名。
198
+ * - `key`: 内容键。
199
+ * - `locale`: 内容语言。
200
+ * - `extension`: 文件扩展名。
201
+ * - `componentFileName`: 组件文件名。
202
+ * - `componentExtension`: 组件文件扩展名。
203
+ * - `format`: 字典格式。
204
+ * - `componentFormat`: 组件字典格式。
205
+ * - `componentDirPath`: 组件目录路径。
169
206
  */
170
- transformPattern: [
171
- "**/*.{js,ts,mjs,cjs,jsx,tsx,vue,svelte}",
172
- "!**/node_modules/**",
173
- ],
207
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
174
208
 
175
209
  /**
176
- * Pattern to exclude from the optimization.
177
- */
178
- excludePattern: ["**/node_modules/**"],
179
-
180
- /**
181
- * 优化字典的输出目录。
210
+ * 指示转换后是否应保存组件。
211
+ * 这样,编译器只需运行一次即可转换应用程序,然后即可将其删除。
182
212
  */
183
- output: ({ locale, key }) => `compiler/${locale}/${key}.json`,
213
+ saveComponents: false,
184
214
 
185
215
  /**
186
- * 仅在生成的文件中插入内容,不含键。
216
+ * 仅在生成的文件中插入内容。对于每种语言的 i18next 或 ICU MessageFormat JSON 输出非常有用。
217
+ *
218
+ * - `output: ({ locale, key }) => `./locale/${locale}/${key}.json`,`
187
219
  */
188
220
  noMetadata: false,
189
221
 
190
222
  /**
191
223
  * 字典键前缀
192
224
  */
193
- dictionaryKeyPrefix: "", // Remove base prefix
194
-
195
- /**
196
- * 指示转换后是否应保存组件。
197
- * 这样,编译器只需运行一次即可转换应用程序,然后即可将其删除。
198
- */
199
- saveComponents: false,
225
+ dictionaryKeyPrefix: "", // 为提取的字典键添加可选前缀
200
226
  },
201
227
  };
202
228
 
203
229
  export default config;
204
- ```
205
-
206
- ### 填充缺失的翻译
207
-
208
- Intlayer 提供了一个 CLI 工具来帮助您填充缺失的翻译。您可以使用 `intlayer` 命令来测试并从代码中填充缺失的翻译。
209
-
210
- ```bash
211
- npx intlayer test # 测试是否存在缺失的翻译
212
- ```
213
-
214
- ```bash
215
- npx intlayer fill # 填充缺失的翻译
216
- ```
217
-
218
- > 有关更多详细信息,请参阅 [CLI 文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/cli/ci.md)
230
+ ````
219
231
 
220
232
  ### 编译器配置参考
221
233
 
@@ -225,28 +237,28 @@ npx intlayer fill # 填充缺失的翻译
225
237
  - _类型_: `boolean | 'build-only'`
226
238
  - _默认值_: `true`
227
239
  - _描述_: 指示是否应启用编译器。
240
+
228
241
  - **dictionaryKeyPrefix**:
229
242
  - _类型_: `string`
230
- - _默认值_: `'comp-'`
243
+ - _默认值_: `''`
231
244
  - _描述_: 提取的字典键的前缀。
245
+
232
246
  - **transformPattern**:
233
247
  - _类型_: `string | string[]`
234
248
  - _默认值_: `['**/*.{js,ts,mjs,cjs,jsx,tsx,vue,svelte}', '!**/node_modules/**']`
235
- - _描述_: 遍历代码进行优化的模式。
249
+ - _描述_: (已弃用:请改为使用 `build.traversePattern`) 遍历代码进行优化的模式。
250
+
236
251
  - **excludePattern**:
237
252
  - _类型_: `string | string[]`
238
253
  - _默认值_: `['**/node_modules/**']`
239
- - _描述_: 优化中排除的模式。
240
- - **outputDir** (Deprecated):
241
- - _类型_: `string`
242
- - _默认值_: `'compiler'`
243
- - _描述_: 存储提取的字典的目录。
254
+ - _描述_: (已弃用:请改为使用 `build.traversePattern`) 优化中排除的模式。
244
255
 
245
256
  - **output**:
246
257
  - _类型_: `FilePathPattern`
247
258
  - _默认值_: `({ key }) => 'compiler/${key}.content.json'`
248
259
  - _描述_: 定义输出文件路径。替换 `outputDir`。处理动态变量,如 `{{locale}}`、`{{key}}`、`{{fileName}}`、`{{extension}}`、`{{format}}`、`{{dirPath}}`、`{{componentFileName}}`、`{{componentExtension}}`、`{{componentFormat}}`。可以设置为字符串(使用 `'my/{{var}}/path'` 格式)或函数。
249
260
  - _注意_: `./**/*` 路径相对于组件解析。`/**/*` 路径相对于 Intlayer 的 `baseDir` 解析。
261
+ - _注意_: 如果路径中定义了语言,字典将按语言生成。
250
262
  - _示例_: `output: ({ locale, key }) => 'compiler/${locale}/${key}.json'`
251
263
 
252
264
  - **noMetadata**:
@@ -254,7 +266,8 @@ npx intlayer fill # 填充缺失的翻译
254
266
  - _默认值_: `false`
255
267
  - _描述_: 指示是否应在文件中保存元数据。如果为 true,编译器将不会保存字典的元数据(键、内容包装器)。
256
268
  - _注意_: 如果与 `loadJSON` 插件一起使用,则非常有用。
257
- - _示例_: 如果为 `true`:
269
+ - _示例_:
270
+ 如果为 `true`:
258
271
  ```json
259
272
  {
260
273
  "key": "value"
@@ -274,3 +287,25 @@ npx intlayer fill # 填充缺失的翻译
274
287
  - _类型_: `boolean`
275
288
  - _默认值_: `false`
276
289
  - _描述_: 指示转换后是否应保存组件。
290
+
291
+ ### 填充缺失的翻译
292
+
293
+ Intlayer 提供了一个 CLI 工具来帮助您填充缺失的翻译。您可以使用 `intlayer` 命令来测试并从代码中填充缺失的翻译。
294
+
295
+ ```bash
296
+ npx intlayer test # 测试是否存在缺失的翻译
297
+ ```
298
+
299
+ ```bash
300
+ npx intlayer fill # 填充缺失的翻译
301
+ ```
302
+
303
+ ### 提取
304
+
305
+ Intlayer 提供了一个 CLI 工具来从您的代码中提取内容。您可以使用 `intlayer extract` 命令从代码中提取内容。
306
+
307
+ ```bash
308
+ npx intlayer extract
309
+ ```
310
+
311
+ > 有关更多详细信息,请参阅 [CLI 文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/cli/index.md)