@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.
- package/docs/ar/compiler.md +84 -49
- package/docs/ar/configuration.md +80 -37
- package/docs/ar/intlayer_with_nextjs_16.md +174 -1
- package/docs/ar/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/ar/intlayer_with_react_router_v7.md +224 -1
- package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/ar/intlayer_with_svelte_kit.md +175 -2
- package/docs/ar/intlayer_with_tanstack.md +176 -1
- package/docs/ar/intlayer_with_vite+preact.md +174 -1
- package/docs/ar/intlayer_with_vite+react.md +174 -1
- package/docs/ar/intlayer_with_vite+solid.md +174 -1
- package/docs/ar/intlayer_with_vite+svelte.md +174 -1
- package/docs/ar/intlayer_with_vite+vue.md +174 -1
- package/docs/de/compiler.md +83 -48
- package/docs/de/configuration.md +434 -212
- package/docs/de/intlayer_with_nextjs_16.md +176 -1
- package/docs/de/intlayer_with_nextjs_compiler.md +106 -349
- package/docs/de/intlayer_with_react_router_v7.md +225 -2
- package/docs/de/intlayer_with_react_router_v7_fs_routes.md +221 -79
- package/docs/de/intlayer_with_svelte_kit.md +158 -2
- package/docs/de/intlayer_with_tanstack.md +159 -1
- package/docs/de/intlayer_with_vite+preact.md +157 -1
- package/docs/de/intlayer_with_vite+react.md +157 -1
- package/docs/de/intlayer_with_vite+solid.md +159 -3
- package/docs/de/intlayer_with_vite+svelte.md +157 -1
- package/docs/de/intlayer_with_vite+vue.md +157 -1
- package/docs/en/compiler.md +60 -33
- package/docs/en/configuration.md +80 -57
- package/docs/en/intlayer_with_nextjs_16.md +176 -0
- package/docs/en/intlayer_with_nextjs_compiler.md +179 -1
- package/docs/en/intlayer_with_react_router_v7.md +159 -0
- package/docs/en/intlayer_with_react_router_v7_fs_routes.md +159 -0
- package/docs/en/intlayer_with_svelte_kit.md +159 -0
- package/docs/en/intlayer_with_tanstack.md +160 -1
- package/docs/en/intlayer_with_vite+preact.md +159 -0
- package/docs/en/intlayer_with_vite+react.md +159 -0
- package/docs/en/intlayer_with_vite+solid.md +148 -27
- package/docs/en/intlayer_with_vite+svelte.md +159 -0
- package/docs/en/intlayer_with_vite+vue.md +142 -41
- package/docs/en-GB/compiler.md +66 -34
- package/docs/en-GB/configuration.md +78 -36
- package/docs/es/compiler.md +83 -48
- package/docs/es/configuration.md +429 -206
- package/docs/es/intlayer_with_adonisjs.md +1 -1
- package/docs/es/intlayer_with_express.md +1 -1
- package/docs/es/intlayer_with_fastify.md +1 -1
- package/docs/es/intlayer_with_hono.md +1 -1
- package/docs/es/intlayer_with_nestjs.md +1 -1
- package/docs/es/intlayer_with_nextjs_16.md +176 -3
- package/docs/es/intlayer_with_nextjs_compiler.md +175 -2
- package/docs/es/intlayer_with_nuxt.md +1 -1
- package/docs/es/intlayer_with_react_router_v7.md +227 -4
- package/docs/es/intlayer_with_react_router_v7_fs_routes.md +162 -4
- package/docs/es/intlayer_with_svelte_kit.md +158 -2
- package/docs/es/intlayer_with_tanstack.md +160 -2
- package/docs/es/intlayer_with_vite+preact.md +162 -6
- package/docs/es/intlayer_with_vite+react.md +160 -4
- package/docs/es/intlayer_with_vite+solid.md +163 -7
- package/docs/es/intlayer_with_vite+svelte.md +157 -1
- package/docs/es/intlayer_with_vite+vue.md +165 -9
- package/docs/fr/compiler.md +81 -46
- package/docs/fr/configuration.md +355 -134
- package/docs/fr/intlayer_with_adonisjs.md +1 -1
- package/docs/fr/intlayer_with_express.md +1 -1
- package/docs/fr/intlayer_with_fastify.md +1 -1
- package/docs/fr/intlayer_with_hono.md +1 -1
- package/docs/fr/intlayer_with_nestjs.md +1 -1
- package/docs/fr/intlayer_with_nextjs_16.md +183 -7
- package/docs/fr/intlayer_with_nextjs_compiler.md +179 -3
- package/docs/fr/intlayer_with_react_router_v7.md +229 -3
- package/docs/fr/intlayer_with_react_router_v7_fs_routes.md +237 -6
- package/docs/fr/intlayer_with_svelte_kit.md +158 -2
- package/docs/fr/intlayer_with_tanstack.md +159 -1
- package/docs/fr/intlayer_with_vite+preact.md +164 -8
- package/docs/fr/intlayer_with_vite+react.md +162 -6
- package/docs/fr/intlayer_with_vite+solid.md +163 -7
- package/docs/fr/intlayer_with_vite+svelte.md +157 -1
- package/docs/fr/intlayer_with_vite+vue.md +164 -8
- package/docs/hi/compiler.md +81 -46
- package/docs/hi/configuration.md +87 -44
- package/docs/hi/intlayer_with_nextjs_16.md +174 -1
- package/docs/hi/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/hi/intlayer_with_react_router_v7.md +224 -1
- package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/hi/intlayer_with_svelte_kit.md +158 -2
- package/docs/hi/intlayer_with_tanstack.md +159 -1
- package/docs/hi/intlayer_with_vite+preact.md +157 -1
- package/docs/hi/intlayer_with_vite+react.md +157 -1
- package/docs/hi/intlayer_with_vite+solid.md +157 -1
- package/docs/hi/intlayer_with_vite+svelte.md +157 -1
- package/docs/hi/intlayer_with_vite+vue.md +157 -1
- package/docs/id/compiler.md +84 -51
- package/docs/id/configuration.md +83 -45
- package/docs/id/intlayer_with_nextjs_16.md +174 -1
- package/docs/id/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/id/intlayer_with_react_router_v7.md +224 -1
- package/docs/id/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/id/intlayer_with_svelte_kit.md +158 -2
- package/docs/id/intlayer_with_tanstack.md +159 -1
- package/docs/id/intlayer_with_vite+preact.md +157 -1
- package/docs/id/intlayer_with_vite+react.md +157 -1
- package/docs/id/intlayer_with_vite+solid.md +157 -1
- package/docs/id/intlayer_with_vite+svelte.md +157 -1
- package/docs/id/intlayer_with_vite+vue.md +157 -1
- package/docs/it/compiler.md +81 -46
- package/docs/it/configuration.md +426 -204
- package/docs/it/intlayer_with_nextjs_16.md +174 -1
- package/docs/it/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/it/intlayer_with_react_router_v7.md +225 -2
- package/docs/it/intlayer_with_react_router_v7_fs_routes.md +226 -2
- package/docs/it/intlayer_with_svelte_kit.md +158 -2
- package/docs/it/intlayer_with_tanstack.md +159 -1
- package/docs/it/intlayer_with_vite+preact.md +157 -1
- package/docs/it/intlayer_with_vite+react.md +157 -1
- package/docs/it/intlayer_with_vite+solid.md +159 -3
- package/docs/it/intlayer_with_vite+svelte.md +157 -1
- package/docs/it/intlayer_with_vite+vue.md +157 -1
- package/docs/ja/compiler.md +94 -58
- package/docs/ja/configuration.md +88 -45
- package/docs/ja/intlayer_with_nextjs_16.md +174 -1
- package/docs/ja/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/ja/intlayer_with_react_router_v7.md +184 -394
- package/docs/ja/intlayer_with_react_router_v7_fs_routes.md +226 -2
- package/docs/ja/intlayer_with_svelte_kit.md +119 -595
- package/docs/ja/intlayer_with_tanstack.md +131 -642
- package/docs/ja/intlayer_with_vite+preact.md +111 -1231
- package/docs/ja/intlayer_with_vite+react.md +129 -1304
- package/docs/ja/intlayer_with_vite+solid.md +159 -3
- package/docs/ja/intlayer_with_vite+svelte.md +157 -1
- package/docs/ja/intlayer_with_vite+vue.md +157 -1
- package/docs/ko/compiler.md +88 -52
- package/docs/ko/configuration.md +87 -44
- package/docs/ko/intlayer_with_nextjs_16.md +174 -1
- package/docs/ko/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/ko/intlayer_with_react_router_v7.md +225 -2
- package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +226 -2
- package/docs/ko/intlayer_with_svelte_kit.md +158 -2
- package/docs/ko/intlayer_with_tanstack.md +159 -1
- package/docs/ko/intlayer_with_vite+preact.md +157 -1
- package/docs/ko/intlayer_with_vite+react.md +157 -1
- package/docs/ko/intlayer_with_vite+solid.md +159 -3
- package/docs/ko/intlayer_with_vite+svelte.md +157 -1
- package/docs/ko/intlayer_with_vite+vue.md +157 -1
- package/docs/pl/compiler.md +84 -51
- package/docs/pl/configuration.md +83 -37
- package/docs/pl/intlayer_with_nextjs_16.md +174 -1
- package/docs/pl/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/pl/intlayer_with_react_router_v7.md +224 -1
- package/docs/pl/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/pl/intlayer_with_svelte_kit.md +158 -2
- package/docs/pl/intlayer_with_tanstack.md +159 -1
- package/docs/pl/intlayer_with_vite+preact.md +157 -1
- package/docs/pl/intlayer_with_vite+react.md +157 -1
- package/docs/pl/intlayer_with_vite+solid.md +157 -1
- package/docs/pl/intlayer_with_vite+svelte.md +157 -1
- package/docs/pl/intlayer_with_vite+vue.md +157 -1
- package/docs/pt/compiler.md +81 -46
- package/docs/pt/configuration.md +404 -194
- package/docs/pt/intlayer_with_nextjs_16.md +174 -1
- package/docs/pt/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/pt/intlayer_with_react_router_v7.md +224 -1
- package/docs/pt/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/pt/intlayer_with_svelte_kit.md +158 -2
- package/docs/pt/intlayer_with_tanstack.md +159 -1
- package/docs/pt/intlayer_with_vite+preact.md +157 -1
- package/docs/pt/intlayer_with_vite+react.md +157 -1
- package/docs/pt/intlayer_with_vite+solid.md +157 -1
- package/docs/pt/intlayer_with_vite+svelte.md +157 -1
- package/docs/pt/intlayer_with_vite+vue.md +157 -1
- package/docs/ru/compiler.md +90 -57
- package/docs/ru/configuration.md +76 -46
- package/docs/ru/intlayer_with_nextjs_16.md +174 -1
- package/docs/ru/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/ru/intlayer_with_react_router_v7.md +224 -1
- package/docs/ru/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/ru/intlayer_with_svelte_kit.md +158 -2
- package/docs/ru/intlayer_with_tanstack.md +159 -1
- package/docs/ru/intlayer_with_vite+preact.md +157 -1
- package/docs/ru/intlayer_with_vite+react.md +157 -1
- package/docs/ru/intlayer_with_vite+solid.md +157 -1
- package/docs/ru/intlayer_with_vite+svelte.md +157 -1
- package/docs/ru/intlayer_with_vite+vue.md +157 -1
- package/docs/tr/compiler.md +85 -52
- package/docs/tr/configuration.md +83 -40
- package/docs/tr/intlayer_with_nextjs_16.md +174 -1
- package/docs/tr/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/tr/intlayer_with_react_router_v7.md +224 -1
- package/docs/tr/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/tr/intlayer_with_svelte_kit.md +158 -2
- package/docs/tr/intlayer_with_tanstack.md +159 -1
- package/docs/tr/intlayer_with_vite+preact.md +157 -1
- package/docs/tr/intlayer_with_vite+react.md +157 -1
- package/docs/tr/intlayer_with_vite+solid.md +157 -1
- package/docs/tr/intlayer_with_vite+svelte.md +157 -1
- package/docs/tr/intlayer_with_vite+vue.md +157 -1
- package/docs/uk/compiler.md +96 -61
- package/docs/uk/configuration.md +83 -37
- package/docs/uk/intlayer_with_nextjs_16.md +174 -1
- package/docs/uk/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/uk/intlayer_with_react_router_v7.md +224 -1
- package/docs/uk/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/uk/intlayer_with_svelte_kit.md +157 -1
- package/docs/uk/intlayer_with_tanstack.md +159 -1
- package/docs/uk/intlayer_with_vite+preact.md +157 -1
- package/docs/uk/intlayer_with_vite+react.md +157 -1
- package/docs/uk/intlayer_with_vite+solid.md +157 -1
- package/docs/uk/intlayer_with_vite+svelte.md +157 -1
- package/docs/uk/intlayer_with_vite+vue.md +157 -1
- package/docs/vi/compiler.md +85 -50
- package/docs/vi/configuration.md +85 -39
- package/docs/vi/intlayer_with_nextjs_16.md +174 -1
- package/docs/vi/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/vi/intlayer_with_react_router_v7.md +224 -1
- package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/vi/intlayer_with_svelte_kit.md +158 -2
- package/docs/vi/intlayer_with_tanstack.md +159 -1
- package/docs/vi/intlayer_with_vite+preact.md +157 -1
- package/docs/vi/intlayer_with_vite+react.md +157 -1
- package/docs/vi/intlayer_with_vite+solid.md +157 -1
- package/docs/vi/intlayer_with_vite+svelte.md +157 -1
- package/docs/vi/intlayer_with_vite+vue.md +157 -1
- package/docs/zh/compiler.md +84 -49
- package/docs/zh/configuration.md +80 -37
- package/docs/zh/intlayer_with_adonisjs.md +1 -1
- package/docs/zh/intlayer_with_express.md +1 -1
- package/docs/zh/intlayer_with_fastify.md +1 -1
- package/docs/zh/intlayer_with_hono.md +1 -1
- package/docs/zh/intlayer_with_nestjs.md +1 -1
- package/docs/zh/intlayer_with_nextjs_16.md +174 -1
- package/docs/zh/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/zh/intlayer_with_react_router_v7.md +227 -4
- package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +228 -4
- package/docs/zh/intlayer_with_svelte_kit.md +158 -2
- package/docs/zh/intlayer_with_tanstack.md +159 -1
- package/docs/zh/intlayer_with_vite+preact.md +159 -3
- package/docs/zh/intlayer_with_vite+react.md +157 -1
- package/docs/zh/intlayer_with_vite+solid.md +161 -5
- package/docs/zh/intlayer_with_vite+svelte.md +157 -1
- package/docs/zh/intlayer_with_vite+vue.md +158 -2
- package/package.json +6 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-04-18
|
|
3
|
-
updatedAt:
|
|
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:
|
|
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).
|
package/docs/zh/compiler.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-09-09
|
|
3
|
-
updatedAt: 2026-03-
|
|
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-
|
|
25
|
-
changes:
|
|
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
|
-
//
|
|
139
|
+
// 从组件提取内容到字典
|
|
140
140
|
[intlayerExtractBabelPlugin, getExtractPluginOptions()],
|
|
141
|
-
//
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
-
|
|
171
|
-
"**/*.{js,ts,mjs,cjs,jsx,tsx,vue,svelte}",
|
|
172
|
-
"!**/node_modules/**",
|
|
173
|
-
],
|
|
207
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
174
208
|
|
|
175
209
|
/**
|
|
176
|
-
*
|
|
177
|
-
|
|
178
|
-
excludePattern: ["**/node_modules/**"],
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* 优化字典的输出目录。
|
|
210
|
+
* 指示转换后是否应保存组件。
|
|
211
|
+
* 这样,编译器只需运行一次即可转换应用程序,然后即可将其删除。
|
|
182
212
|
*/
|
|
183
|
-
|
|
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: "", //
|
|
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
|
-
- _默认值_: `'
|
|
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
|
-
- _示例_:
|
|
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)
|