@intlayer/docs 8.4.5 → 8.4.6
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/dist/cjs/generated/docs.entry.cjs +20 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +20 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/configuration.md +520 -722
- package/docs/ar/intlayer_with_storybook.md +521 -0
- package/docs/bn/configuration.md +922 -0
- package/docs/bn/intlayer_with_hono.md +428 -0
- package/docs/de/configuration.md +369 -743
- package/docs/de/intlayer_with_storybook.md +521 -0
- package/docs/en/configuration.md +181 -507
- package/docs/en/intlayer_with_storybook.md +521 -0
- package/docs/en-GB/configuration.md +456 -657
- package/docs/en-GB/intlayer_with_storybook.md +521 -0
- package/docs/es/configuration.md +379 -754
- package/docs/es/intlayer_with_storybook.md +521 -0
- package/docs/fr/configuration.md +376 -757
- package/docs/fr/intlayer_with_storybook.md +521 -0
- package/docs/hi/configuration.md +532 -728
- package/docs/hi/intlayer_with_storybook.md +521 -0
- package/docs/id/configuration.md +371 -684
- package/docs/id/intlayer_with_storybook.md +521 -0
- package/docs/it/configuration.md +397 -775
- package/docs/it/intlayer_with_storybook.md +521 -0
- package/docs/ja/configuration.md +525 -724
- package/docs/ja/intlayer_with_storybook.md +521 -0
- package/docs/ko/configuration.md +525 -724
- package/docs/ko/intlayer_with_storybook.md +521 -0
- package/docs/pl/configuration.md +430 -734
- package/docs/pl/intlayer_with_storybook.md +521 -0
- package/docs/pt/configuration.md +375 -746
- package/docs/pt/intlayer_with_storybook.md +521 -0
- package/docs/ru/configuration.md +532 -701
- package/docs/ru/intlayer_with_storybook.md +521 -0
- package/docs/tr/configuration.md +527 -719
- package/docs/tr/intlayer_with_storybook.md +521 -0
- package/docs/uk/configuration.md +425 -744
- package/docs/uk/intlayer_with_storybook.md +521 -0
- package/docs/ur/configuration.md +922 -0
- package/docs/ur/intlayer_with_hono.md +428 -0
- package/docs/vi/configuration.md +412 -753
- package/docs/vi/intlayer_with_storybook.md +521 -0
- package/docs/zh/configuration.md +521 -714
- package/docs/zh/intlayer_with_storybook.md +521 -0
- package/package.json +6 -6
- package/src/generated/docs.entry.ts +20 -0
package/docs/vi/configuration.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-13
|
|
3
|
-
updatedAt: 2026-03-
|
|
4
|
-
title: Cấu hình
|
|
5
|
-
description: Tìm hiểu cách cấu hình Intlayer cho ứng dụng của bạn. Hiểu các
|
|
3
|
+
updatedAt: 2026-03-20
|
|
4
|
+
title: Cấu hình (Configuration)
|
|
5
|
+
description: Tìm hiểu cách cấu hình Intlayer cho ứng dụng của bạn. Hiểu các cài đặt và tùy chọn khác nhau có sẵn để tùy chỉnh Intlayer theo nhu cầu của bạn.
|
|
6
6
|
keywords:
|
|
7
7
|
- Cấu hình
|
|
8
|
-
-
|
|
8
|
+
- Cài đặt
|
|
9
9
|
- Tùy chỉnh
|
|
10
10
|
- Intlayer
|
|
11
11
|
- Tùy chọn
|
|
@@ -14,27 +14,39 @@ slugs:
|
|
|
14
14
|
- concept
|
|
15
15
|
- configuration
|
|
16
16
|
history:
|
|
17
|
+
- version: 8.4.0
|
|
18
|
+
date: 2026-03-20
|
|
19
|
+
changes: Thêm ký hiệu đối tượng theo từng ngôn ngữ cho 'compiler.output' và 'dictionary.fill'
|
|
17
20
|
- version: 8.3.0
|
|
18
21
|
date: 2026-03-11
|
|
19
|
-
changes:
|
|
22
|
+
changes: Chuyển 'baseDir' từ cấu hình 'content' sang cấu hình 'system'
|
|
20
23
|
- version: 8.2.0
|
|
21
24
|
date: 2026-03-09
|
|
22
|
-
changes: Cập nhật các tùy chọn trình biên dịch, thêm hỗ trợ 'output' và 'noMetadata'
|
|
25
|
+
changes: Cập nhật các tùy chọn của trình biên dịch (compiler), thêm hỗ trợ cho 'output' và 'noMetadata'
|
|
23
26
|
- version: 8.1.7
|
|
24
27
|
date: 2026-02-25
|
|
25
|
-
changes: Cập nhật
|
|
28
|
+
changes: Cập nhật tùy chọn trình biên dịch
|
|
29
|
+
- version: 8.1.5
|
|
30
|
+
date: 2026-02-23
|
|
31
|
+
changes: Thêm tùy chọn trình biên dịch 'build-only' và tiền tố từ điển
|
|
26
32
|
- version: 8.0.6
|
|
27
33
|
date: 2026-02-12
|
|
28
34
|
changes: Thêm hỗ trợ cho các nhà cung cấp Open Router, Alibaba, Amazon, Google Vertex Bedrock, Fireworks, Groq, Hugging Face và Together.ai
|
|
29
35
|
- version: 8.0.5
|
|
30
36
|
date: 2026-02-06
|
|
31
37
|
changes: Thêm `dataSerialization` vào cấu hình AI
|
|
38
|
+
- version: 8.0.0
|
|
39
|
+
date: 2026-01-24
|
|
40
|
+
changes: Đổi tên chế độ nhập `live` thành `fetch` để mô tả tốt hơn cơ chế cơ bản.
|
|
41
|
+
- version: 8.0.0
|
|
42
|
+
date: 2026-01-22
|
|
43
|
+
changes: Chuyển cấu hình build `importMode` sang cấu hình từ điển `dictionary`.
|
|
32
44
|
- version: 8.0.0
|
|
33
45
|
date: 2026-01-22
|
|
34
|
-
changes:
|
|
46
|
+
changes: Thêm tùy chọn `rewrite` cho cấu hình routing
|
|
35
47
|
- version: 8.0.0
|
|
36
48
|
date: 2026-01-18
|
|
37
|
-
changes: Tách cấu hình hệ thống khỏi cấu hình nội dung.
|
|
49
|
+
changes: Tách cấu hình hệ thống khỏi cấu hình nội dung. Chuyển các đường dẫn nội bộ vào thuộc tính `system`. Thêm `codeDir` để tách biệt các tệp nội dung và chuyển đổi mã.
|
|
38
50
|
- version: 8.0.0
|
|
39
51
|
date: 2026-01-18
|
|
40
52
|
changes: Thêm các tùy chọn từ điển `location` và `schema`
|
|
@@ -49,7 +61,7 @@ history:
|
|
|
49
61
|
changes: Thêm cấu hình `dictionary`
|
|
50
62
|
- version: 7.0.0
|
|
51
63
|
date: 2025-10-21
|
|
52
|
-
changes: Thay thế `middleware` bằng cấu hình `routing`
|
|
64
|
+
changes: Thay thế `middleware` bằng cấu hình routing `routing`
|
|
53
65
|
- version: 7.0.0
|
|
54
66
|
date: 2025-10-12
|
|
55
67
|
changes: Thêm tùy chọn `formatCommand`
|
|
@@ -61,19 +73,19 @@ history:
|
|
|
61
73
|
changes: Thêm tùy chọn `outputFormat`
|
|
62
74
|
- version: 6.0.0
|
|
63
75
|
date: 2025-09-21
|
|
64
|
-
changes:
|
|
76
|
+
changes: Xóa trường `dictionaryOutput` và trường `i18nextResourcesDir`
|
|
65
77
|
- version: 6.0.0
|
|
66
78
|
date: 2025-09-16
|
|
67
|
-
changes: Thêm chế độ nhập
|
|
79
|
+
changes: Thêm chế độ nhập `live`
|
|
68
80
|
- version: 6.0.0
|
|
69
81
|
date: 2025-09-04
|
|
70
|
-
changes: Thay thế trường `hotReload` bằng `liveSync
|
|
82
|
+
changes: Thay thế trường `hotReload` bằng `liveSync`, và thêm các trường `liveSyncPort` và `liveSyncURL`
|
|
71
83
|
- version: 5.6.1
|
|
72
84
|
date: 2025-07-25
|
|
73
85
|
changes: Thay thế `activateDynamicImport` bằng tùy chọn `importMode`
|
|
74
86
|
- version: 5.6.0
|
|
75
87
|
date: 2025-07-13
|
|
76
|
-
changes: Thay đổi
|
|
88
|
+
changes: Thay đổi contentDir mặc định từ `['src']` thành `['.']`
|
|
77
89
|
- version: 5.5.11
|
|
78
90
|
date: 2025-06-29
|
|
79
91
|
changes: Thêm các lệnh `docs`
|
|
@@ -83,7 +95,7 @@ history:
|
|
|
83
95
|
|
|
84
96
|
## Tổng quan
|
|
85
97
|
|
|
86
|
-
Các tệp cấu hình Intlayer cho phép tùy chỉnh
|
|
98
|
+
Các tệp cấu hình Intlayer cho phép bạn tùy chỉnh các khía cạnh khác nhau của plugin, chẳng hạn như quốc tế hóa (internationalization), middleware và xử lý nội dung. Tài liệu này cung cấp mô tả chi tiết về từng thuộc tính trong cấu hình.
|
|
87
99
|
|
|
88
100
|
---
|
|
89
101
|
|
|
@@ -93,7 +105,7 @@ Các tệp cấu hình Intlayer cho phép tùy chỉnh nhiều khía cạnh khá
|
|
|
93
105
|
|
|
94
106
|
---
|
|
95
107
|
|
|
96
|
-
##
|
|
108
|
+
## Các định dạng tệp cấu hình được hỗ trợ
|
|
97
109
|
|
|
98
110
|
Intlayer chấp nhận các định dạng tệp cấu hình JSON, JS, MJS và TS:
|
|
99
111
|
|
|
@@ -116,108 +128,108 @@ import { nextjsRewrite } from "intlayer/routing";
|
|
|
116
128
|
import { z } from "zod";
|
|
117
129
|
|
|
118
130
|
/**
|
|
119
|
-
*
|
|
131
|
+
* Ví dụ tệp cấu hình Intlayer hiển thị tất cả các tùy chọn có sẵn.
|
|
120
132
|
*/
|
|
121
133
|
const config: IntlayerConfig = {
|
|
122
134
|
/**
|
|
123
|
-
*
|
|
135
|
+
* Cấu hình cài đặt quốc tế hóa.
|
|
124
136
|
*/
|
|
125
137
|
internationalization: {
|
|
126
138
|
/**
|
|
127
|
-
*
|
|
128
|
-
*
|
|
139
|
+
* Danh sách các ngôn ngữ (locales) được hỗ trợ trong ứng dụng.
|
|
140
|
+
* Mặc định: [Locales.ENGLISH]
|
|
129
141
|
*/
|
|
130
142
|
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
131
143
|
|
|
132
144
|
/**
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
145
|
+
* Danh sách các ngôn ngữ bắt buộc phải được định nghĩa trong mỗi từ điển.
|
|
146
|
+
* Nếu để trống, tất cả các ngôn ngữ đều bắt buộc trong chế độ `strict`.
|
|
147
|
+
* Mặc định: []
|
|
136
148
|
*/
|
|
137
149
|
requiredLocales: [Locales.ENGLISH],
|
|
138
150
|
|
|
139
151
|
/**
|
|
140
|
-
*
|
|
141
|
-
* - "strict":
|
|
142
|
-
* - "inclusive":
|
|
143
|
-
* - "loose":
|
|
144
|
-
*
|
|
152
|
+
* Mức độ nghiêm ngặt cho nội dung được quốc tế hóa.
|
|
153
|
+
* - "strict": Báo lỗi nếu thiếu bất kỳ ngôn ngữ nào đã khai báo hoặc nếu không được khai báo.
|
|
154
|
+
* - "inclusive": Cảnh báo nếu thiếu ngôn ngữ đã khai báo.
|
|
155
|
+
* - "loose": Chấp nhận bất kỳ ngôn ngữ nào hiện có.
|
|
156
|
+
* Mặc định: "inclusive"
|
|
145
157
|
*/
|
|
146
158
|
strictMode: "inclusive",
|
|
147
159
|
|
|
148
160
|
/**
|
|
149
|
-
*
|
|
150
|
-
*
|
|
161
|
+
* Ngôn ngữ mặc định được sử dụng làm phương án dự phòng (fallback) trong trường hợp không tìm thấy ngôn ngữ yêu cầu.
|
|
162
|
+
* Mặc định: Locales.ENGLISH
|
|
151
163
|
*/
|
|
152
164
|
defaultLocale: Locales.ENGLISH,
|
|
153
165
|
},
|
|
154
166
|
|
|
155
167
|
/**
|
|
156
|
-
*
|
|
168
|
+
* Các cài đặt kiểm soát hoạt động của từ điển và hành vi dự phòng.
|
|
157
169
|
*/
|
|
158
170
|
dictionary: {
|
|
159
171
|
/**
|
|
160
|
-
*
|
|
161
|
-
* - "static":
|
|
162
|
-
* - "dynamic":
|
|
163
|
-
* - "fetch":
|
|
164
|
-
*
|
|
172
|
+
* Kiểm soát cách nhập từ điển.
|
|
173
|
+
* - "static": Được nhập tĩnh tại thời điểm build.
|
|
174
|
+
* - "dynamic": Được nhập động bằng Suspense.
|
|
175
|
+
* - "fetch": Được truy xuất động qua Live Sync API.
|
|
176
|
+
* Mặc định: "static"
|
|
165
177
|
*/
|
|
166
178
|
importMode: "static",
|
|
167
179
|
|
|
168
180
|
/**
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
*
|
|
181
|
+
* Chiến lược tự động điền các bản dịch còn thiếu bằng AI.
|
|
182
|
+
* Có thể là giá trị boolean hoặc một mẫu đường dẫn để lưu nội dung được điền.
|
|
183
|
+
* Mặc định: true
|
|
172
184
|
*/
|
|
173
185
|
fill: true,
|
|
174
186
|
|
|
175
187
|
/**
|
|
176
|
-
*
|
|
177
|
-
* - "local":
|
|
178
|
-
* - "remote":
|
|
179
|
-
* - "hybrid":
|
|
180
|
-
* - "plugin" (
|
|
181
|
-
*
|
|
188
|
+
* Vị trí vật lý của các tệp từ điển.
|
|
189
|
+
* - "local": Được lưu trữ trong hệ thống tệp cục bộ.
|
|
190
|
+
* - "remote": Được lưu trữ trong Intlayer CMS.
|
|
191
|
+
* - "hybrid": Được lưu trữ cả cục bộ và trong Intlayer CMS.
|
|
192
|
+
* - "plugin" (hoặc bất kỳ chuỗi tùy chỉnh nào): Được cung cấp bởi một plugin hoặc nguồn tùy chỉnh.
|
|
193
|
+
* Mặc định: "local"
|
|
182
194
|
*/
|
|
183
195
|
location: "local",
|
|
184
196
|
|
|
185
197
|
/**
|
|
186
|
-
*
|
|
187
|
-
*
|
|
198
|
+
* Nội dung có nên được tự động chuyển đổi hay không (ví dụ: Markdown sang HTML).
|
|
199
|
+
* Mặc định: false
|
|
188
200
|
*/
|
|
189
201
|
contentAutoTransformation: false,
|
|
190
202
|
},
|
|
191
203
|
|
|
192
204
|
/**
|
|
193
|
-
*
|
|
205
|
+
* Cấu hình routing và middleware.
|
|
194
206
|
*/
|
|
195
207
|
routing: {
|
|
196
208
|
/**
|
|
197
|
-
*
|
|
198
|
-
* - "prefix-no-default":
|
|
199
|
-
* - "prefix-all":
|
|
200
|
-
* - "no-prefix":
|
|
201
|
-
* - "search-params":
|
|
202
|
-
*
|
|
209
|
+
* Chiến lược định tuyến ngôn ngữ.
|
|
210
|
+
* - "prefix-no-default": Thêm tiền tố cho tất cả trừ ngôn ngữ mặc định (ví dụ: /dashboard, /fr/dashboard).
|
|
211
|
+
* - "prefix-all": Thêm tiền tố cho tất cả các ngôn ngữ (ví dụ: /en/dashboard, /fr/dashboard).
|
|
212
|
+
* - "no-prefix": Không có ngôn ngữ trong URL.
|
|
213
|
+
* - "search-params": Sử dụng ?locale=...
|
|
214
|
+
* Mặc định: "prefix-no-default"
|
|
203
215
|
*/
|
|
204
216
|
mode: "prefix-no-default",
|
|
205
217
|
|
|
206
218
|
/**
|
|
207
|
-
*
|
|
208
|
-
*
|
|
209
|
-
*
|
|
219
|
+
* Nơi lưu trữ ngôn ngữ đã chọn của người dùng.
|
|
220
|
+
* Tùy chọn: 'cookie', 'localStorage', 'sessionStorage', 'header' hoặc mảng của chúng.
|
|
221
|
+
* Mặc định: ['cookie', 'header']
|
|
210
222
|
*/
|
|
211
223
|
storage: ["cookie", "header"],
|
|
212
224
|
|
|
213
225
|
/**
|
|
214
|
-
*
|
|
215
|
-
*
|
|
226
|
+
* Đường dẫn cơ sở cho các URL của ứng dụng.
|
|
227
|
+
* Mặc định: ""
|
|
216
228
|
*/
|
|
217
229
|
basePath: "",
|
|
218
230
|
|
|
219
231
|
/**
|
|
220
|
-
*
|
|
232
|
+
* Các quy tắc ghi đè URL tùy chỉnh cho các đường dẫn cụ thể theo từng ngôn ngữ.
|
|
221
233
|
*/
|
|
222
234
|
rewrite: nextjsRewrite({
|
|
223
235
|
"/[locale]/about": {
|
|
@@ -228,130 +240,130 @@ const config: IntlayerConfig = {
|
|
|
228
240
|
},
|
|
229
241
|
|
|
230
242
|
/**
|
|
231
|
-
*
|
|
243
|
+
* Các cài đặt liên quan đến việc tìm kiếm và xử lý tệp nội dung.
|
|
232
244
|
*/
|
|
233
245
|
content: {
|
|
234
246
|
/**
|
|
235
|
-
*
|
|
236
|
-
*
|
|
247
|
+
* Phần mở rộng tệp để quét từ điển.
|
|
248
|
+
* Mặc định: ['.content.ts', '.content.js', '.content.json', v.v.]
|
|
237
249
|
*/
|
|
238
250
|
fileExtensions: [".content.ts", ".content.js", ".content.json"],
|
|
239
251
|
|
|
240
252
|
/**
|
|
241
|
-
*
|
|
242
|
-
*
|
|
253
|
+
* Các thư mục chứa các tệp .content.
|
|
254
|
+
* Mặc định: ["."]
|
|
243
255
|
*/
|
|
244
256
|
contentDir: ["src"],
|
|
245
257
|
|
|
246
258
|
/**
|
|
247
|
-
*
|
|
248
|
-
*
|
|
249
|
-
*
|
|
259
|
+
* Nơi chứa mã nguồn.
|
|
260
|
+
* Được sử dụng để tối ưu hóa build và chuyển đổi mã.
|
|
261
|
+
* Mặc định: ["."]
|
|
250
262
|
*/
|
|
251
263
|
codeDir: ["src"],
|
|
252
264
|
|
|
253
265
|
/**
|
|
254
|
-
*
|
|
255
|
-
*
|
|
266
|
+
* Các mẫu bị loại trừ khỏi quá trình quét.
|
|
267
|
+
* Mặc định: ['node_modules', '.intlayer', v.v.]
|
|
256
268
|
*/
|
|
257
269
|
excludedPath: ["node_modules"],
|
|
258
270
|
|
|
259
271
|
/**
|
|
260
|
-
*
|
|
261
|
-
*
|
|
272
|
+
* Có theo dõi các thay đổi và build lại từ điển trong quá trình phát triển không.
|
|
273
|
+
* Mặc định: true trong môi trường phát triển
|
|
262
274
|
*/
|
|
263
275
|
watch: true,
|
|
264
276
|
|
|
265
277
|
/**
|
|
266
|
-
*
|
|
278
|
+
* Lệnh được sử dụng để định dạng các tệp .content mới tạo / cập nhật.
|
|
267
279
|
*/
|
|
268
280
|
formatCommand: 'npx prettier --write "{{file}}"',
|
|
269
281
|
},
|
|
270
282
|
|
|
271
283
|
/**
|
|
272
|
-
* Visual Editor
|
|
284
|
+
* Cấu hình Trình chỉnh sửa trực quan (Visual Editor).
|
|
273
285
|
*/
|
|
274
286
|
editor: {
|
|
275
287
|
/**
|
|
276
|
-
*
|
|
277
|
-
*
|
|
288
|
+
* Có bật trình chỉnh sửa trực quan hay không.
|
|
289
|
+
* Mặc định: false
|
|
278
290
|
*/
|
|
279
291
|
enabled: true,
|
|
280
292
|
|
|
281
293
|
/**
|
|
282
|
-
* URL
|
|
283
|
-
*
|
|
294
|
+
* URL ứng dụng của bạn để xác thực nguồn (origin validation).
|
|
295
|
+
* Mặc định: ""
|
|
284
296
|
*/
|
|
285
297
|
applicationURL: "http://localhost:3000",
|
|
286
298
|
|
|
287
299
|
/**
|
|
288
|
-
*
|
|
289
|
-
*
|
|
300
|
+
* Cổng cho máy chủ trình chỉnh sửa cục bộ.
|
|
301
|
+
* Mặc định: 8000
|
|
290
302
|
*/
|
|
291
303
|
port: 8000,
|
|
292
304
|
|
|
293
305
|
/**
|
|
294
|
-
*
|
|
295
|
-
*
|
|
306
|
+
* URL công khai cho trình chỉnh sửa.
|
|
307
|
+
* Mặc định: "http://localhost:8000"
|
|
296
308
|
*/
|
|
297
309
|
editorURL: "http://localhost:8000",
|
|
298
310
|
|
|
299
311
|
/**
|
|
300
|
-
* Intlayer CMS
|
|
301
|
-
*
|
|
312
|
+
* URL của Intlayer CMS.
|
|
313
|
+
* Mặc định: "https://app.intlayer.org"
|
|
302
314
|
*/
|
|
303
315
|
cmsURL: "https://app.intlayer.org",
|
|
304
316
|
|
|
305
317
|
/**
|
|
306
|
-
* Backend API
|
|
307
|
-
*
|
|
318
|
+
* URL của Backend API.
|
|
319
|
+
* Mặc định: "https://back.intlayer.org"
|
|
308
320
|
*/
|
|
309
321
|
backendURL: "https://back.intlayer.org",
|
|
310
322
|
|
|
311
323
|
/**
|
|
312
|
-
*
|
|
313
|
-
*
|
|
324
|
+
* Có bật đồng bộ nội dung thời gian thực không.
|
|
325
|
+
* Mặc định: false
|
|
314
326
|
*/
|
|
315
327
|
liveSync: true,
|
|
316
328
|
},
|
|
317
329
|
|
|
318
330
|
/**
|
|
319
|
-
*
|
|
331
|
+
* Các cài đặt cho việc dịch và build dựa trên AI.
|
|
320
332
|
*/
|
|
321
333
|
ai: {
|
|
322
334
|
/**
|
|
323
|
-
* AI
|
|
324
|
-
*
|
|
325
|
-
*
|
|
335
|
+
* Nhà cung cấp AI sẽ sử dụng.
|
|
336
|
+
* Tùy chọn: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai'
|
|
337
|
+
* Mặc định: 'openai'
|
|
326
338
|
*/
|
|
327
339
|
provider: "openai",
|
|
328
340
|
|
|
329
341
|
/**
|
|
330
|
-
* Model
|
|
342
|
+
* Model của nhà cung cấp đã chọn để sử dụng.
|
|
331
343
|
*/
|
|
332
344
|
model: "gpt-4o",
|
|
333
345
|
|
|
334
346
|
/**
|
|
335
|
-
*
|
|
347
|
+
* API key của nhà cung cấp.
|
|
336
348
|
*/
|
|
337
349
|
apiKey: process.env.OPENAI_API_KEY,
|
|
338
350
|
|
|
339
351
|
/**
|
|
340
|
-
*
|
|
352
|
+
* Ngữ cảnh toàn cục để hướng dẫn AI khi build các bản dịch.
|
|
341
353
|
*/
|
|
342
|
-
applicationContext: "
|
|
354
|
+
applicationContext: "Đây là một ứng dụng đặt vé du lịch.",
|
|
343
355
|
|
|
344
356
|
/**
|
|
345
|
-
*
|
|
357
|
+
* URL đường dẫn cơ sở cho AI API.
|
|
346
358
|
*/
|
|
347
359
|
baseURL: "http://localhost:3000",
|
|
348
360
|
|
|
349
361
|
/**
|
|
350
|
-
* Tuần tự hóa dữ liệu
|
|
362
|
+
* Tuần tự hóa dữ liệu (Data Serialization)
|
|
351
363
|
*
|
|
352
364
|
* Tùy chọn:
|
|
353
|
-
* - "json":
|
|
354
|
-
* - "toon":
|
|
365
|
+
* - "json": Mặc định, mạnh mẽ; tiêu tốn nhiều token hơn.
|
|
366
|
+
* - "toon": Tiêu tốn ít token hơn, có thể không nhất quán như JSON.
|
|
355
367
|
*
|
|
356
368
|
* Mặc định: "json"
|
|
357
369
|
*/
|
|
@@ -359,170 +371,170 @@ const config: IntlayerConfig = {
|
|
|
359
371
|
},
|
|
360
372
|
|
|
361
373
|
/**
|
|
362
|
-
*
|
|
374
|
+
* Các cài đặt build và tối ưu hóa.
|
|
363
375
|
*/
|
|
364
376
|
build: {
|
|
365
377
|
/**
|
|
366
|
-
*
|
|
367
|
-
* - "auto":
|
|
368
|
-
* - "manual":
|
|
369
|
-
*
|
|
378
|
+
* Chế độ thực thi build.
|
|
379
|
+
* - "auto": Sẽ được build tự động trong quá trình build ứng dụng.
|
|
380
|
+
* - "manual": Yêu cầu lệnh build rõ ràng.
|
|
381
|
+
* Mặc định: "auto"
|
|
370
382
|
*/
|
|
371
383
|
mode: "auto",
|
|
372
384
|
|
|
373
385
|
/**
|
|
374
|
-
*
|
|
375
|
-
*
|
|
386
|
+
* Có tối ưu hóa bundle cuối cùng bằng cách loại bỏ các từ điển không sử dụng không.
|
|
387
|
+
* Mặc định: true trong môi trường production
|
|
376
388
|
*/
|
|
377
389
|
optimize: true,
|
|
378
390
|
|
|
379
391
|
/**
|
|
380
|
-
*
|
|
381
|
-
*
|
|
392
|
+
* Định dạng đầu ra cho các tệp từ điển được tạo.
|
|
393
|
+
* Mặc định: ['cjs', 'esm']
|
|
382
394
|
*/
|
|
383
|
-
outputFormat: ["esm"],
|
|
395
|
+
outputFormat: ["cjs", "esm"],
|
|
384
396
|
|
|
385
397
|
/**
|
|
386
|
-
*
|
|
387
|
-
*
|
|
398
|
+
* Xác định xem tiến trình build có nên kiểm tra các kiểu TypeScript hay không.
|
|
399
|
+
* Mặc định: false
|
|
388
400
|
*/
|
|
389
401
|
checkTypes: false,
|
|
390
402
|
},
|
|
391
403
|
|
|
392
404
|
/**
|
|
393
|
-
* Logger
|
|
405
|
+
* Cấu hình trình ghi nhật ký (Logger).
|
|
394
406
|
*/
|
|
395
407
|
log: {
|
|
396
408
|
/**
|
|
397
|
-
*
|
|
398
|
-
* - "default":
|
|
399
|
-
* - "verbose":
|
|
400
|
-
* - "disabled":
|
|
401
|
-
*
|
|
409
|
+
* Mức độ ghi nhật ký.
|
|
410
|
+
* - "default": Ghi nhật ký tiêu chuẩn.
|
|
411
|
+
* - "verbose": Ghi nhật ký gỡ lỗi chuyên sâu.
|
|
412
|
+
* - "disabled": Tắt ghi nhật ký.
|
|
413
|
+
* Mặc định: "default"
|
|
402
414
|
*/
|
|
403
415
|
mode: "default",
|
|
404
416
|
|
|
405
417
|
/**
|
|
406
|
-
*
|
|
407
|
-
*
|
|
418
|
+
* Tiền tố cho tất cả các thông báo nhật ký.
|
|
419
|
+
* Mặc định: "[intlayer]"
|
|
408
420
|
*/
|
|
409
421
|
prefix: "[intlayer]",
|
|
410
422
|
},
|
|
411
423
|
|
|
412
424
|
/**
|
|
413
|
-
*
|
|
425
|
+
* Cấu hình hệ thống (Để sử dụng nâng cao)
|
|
414
426
|
*/
|
|
415
427
|
system: {
|
|
416
428
|
/**
|
|
417
|
-
*
|
|
429
|
+
* Thư mục để lưu trữ các từ điển đã được bản địa hóa.
|
|
418
430
|
*/
|
|
419
431
|
dictionariesDir: ".intlayer/dictionary",
|
|
420
432
|
|
|
421
433
|
/**
|
|
422
|
-
*
|
|
434
|
+
* Thư mục cho việc mở rộng module TypeScript (module augmentation).
|
|
423
435
|
*/
|
|
424
436
|
moduleAugmentationDir: ".intlayer/types",
|
|
425
437
|
|
|
426
438
|
/**
|
|
427
|
-
*
|
|
439
|
+
* Thư mục để lưu trữ các từ điển chưa hợp nhất (unmerged).
|
|
428
440
|
*/
|
|
429
441
|
unmergedDictionariesDir: ".intlayer/unmerged_dictionary",
|
|
430
442
|
|
|
431
443
|
/**
|
|
432
|
-
*
|
|
444
|
+
* Thư mục để lưu trữ các kiểu từ điển.
|
|
433
445
|
*/
|
|
434
446
|
typesDir: ".intlayer/types",
|
|
435
447
|
|
|
436
448
|
/**
|
|
437
|
-
*
|
|
449
|
+
* Thư mục chứa các tệp ứng dụng chính.
|
|
438
450
|
*/
|
|
439
451
|
mainDir: ".intlayer/main",
|
|
440
452
|
|
|
441
453
|
/**
|
|
442
|
-
*
|
|
454
|
+
* Thư mục chứa các tệp cấu hình.
|
|
443
455
|
*/
|
|
444
456
|
configDir: ".intlayer/config",
|
|
445
457
|
|
|
446
458
|
/**
|
|
447
|
-
*
|
|
459
|
+
* Thư mục chứa các tệp bộ nhớ đệm (cache).
|
|
448
460
|
*/
|
|
449
461
|
cacheDir: ".intlayer/cache",
|
|
450
462
|
},
|
|
451
463
|
|
|
452
464
|
/**
|
|
453
|
-
*
|
|
465
|
+
* Cấu hình Trình biên dịch (Để sử dụng nâng cao)
|
|
454
466
|
*/
|
|
455
467
|
compiler: {
|
|
456
468
|
/**
|
|
457
|
-
*
|
|
469
|
+
* Xác định xem trình biên dịch có nên được bật hay không.
|
|
458
470
|
*
|
|
459
|
-
* - false
|
|
460
|
-
* - true
|
|
461
|
-
* - "build-only"
|
|
471
|
+
* - false: Tắt trình biên dịch.
|
|
472
|
+
* - true: Bật trình biên dịch.
|
|
473
|
+
* - "build-only": Bỏ qua trình biên dịch trong quá trình phát triển và tăng tốc thời gian khởi động.
|
|
462
474
|
*
|
|
463
|
-
*
|
|
475
|
+
* Mặc định: false
|
|
464
476
|
*/
|
|
465
477
|
enabled: true,
|
|
466
478
|
|
|
467
479
|
/**
|
|
468
|
-
*
|
|
480
|
+
* Định nghĩa đường dẫn cho các tệp đầu ra. Thay thế `outputDir`.
|
|
469
481
|
*
|
|
470
|
-
* - Các đường dẫn
|
|
471
|
-
* - Các đường dẫn
|
|
482
|
+
* - Các đường dẫn có `./` được giải quyết tương đối với thư mục thành phần.
|
|
483
|
+
* - Các đường dẫn có `/` được giải quyết tương đối với thư mục gốc của dự án (`baseDir`).
|
|
472
484
|
*
|
|
473
|
-
* - Việc bao gồm biến `{{locale}}` trong đường dẫn sẽ
|
|
485
|
+
* - Việc bao gồm biến `{{locale}}` trong đường dẫn sẽ kích hoạt việc tạo các từ điển riêng biệt cho từng ngôn ngữ.
|
|
474
486
|
*
|
|
475
487
|
* Ví dụ:
|
|
476
488
|
* ```ts
|
|
477
489
|
* {
|
|
478
|
-
* // Tạo tệp .content.ts đa ngôn ngữ bên cạnh
|
|
490
|
+
* // Tạo các tệp .content.ts đa ngôn ngữ bên cạnh thành phần
|
|
479
491
|
* output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
480
492
|
*
|
|
481
|
-
* // output: './{{fileName}}{{extension}}', //
|
|
493
|
+
* // output: './{{fileName}}{{extension}}', // Tương đương khi sử dụng template string
|
|
482
494
|
* }
|
|
483
495
|
* ```
|
|
484
496
|
*
|
|
485
497
|
* ```ts
|
|
486
498
|
* {
|
|
487
|
-
* // Tạo tệp JSON tập trung
|
|
499
|
+
* // Tạo các tệp JSON tập trung cho từng ngôn ngữ tại thư mục gốc của dự án
|
|
488
500
|
* output: ({ key, locale }) => `/locales/${locale}/${key}.content.json`,
|
|
489
501
|
*
|
|
490
|
-
* // output: '/locales/{{locale}}/{{key}}.content.json', //
|
|
502
|
+
* // output: '/locales/{{locale}}/{{key}}.content.json', // Tương đương khi sử dụng template string
|
|
491
503
|
* }
|
|
492
504
|
* ```
|
|
493
505
|
*
|
|
494
|
-
* Danh sách biến:
|
|
506
|
+
* Danh sách các biến:
|
|
495
507
|
* - `fileName`: Tên tệp.
|
|
496
|
-
* - `key`: Khóa nội dung.
|
|
508
|
+
* - `key`: Khóa nội dung (key).
|
|
497
509
|
* - `locale`: Ngôn ngữ nội dung.
|
|
498
510
|
* - `extension`: Phần mở rộng tệp.
|
|
499
|
-
* - `componentFileName`: Tên tệp
|
|
500
|
-
* - `componentExtension`: Phần mở rộng tệp
|
|
511
|
+
* - `componentFileName`: Tên tệp thành phần.
|
|
512
|
+
* - `componentExtension`: Phần mở rộng tệp thành phần.
|
|
501
513
|
* - `format`: Định dạng từ điển.
|
|
502
|
-
* - `componentFormat`: Định dạng từ điển
|
|
503
|
-
* - `componentDirPath`: Đường dẫn thư mục
|
|
514
|
+
* - `componentFormat`: Định dạng từ điển thành phần.
|
|
515
|
+
* - `componentDirPath`: Đường dẫn thư mục thành phần.
|
|
504
516
|
*/
|
|
505
517
|
output: ({ locale, key }) => `compiler/${locale}/${key}.json`,
|
|
506
518
|
|
|
507
519
|
/**
|
|
508
|
-
*
|
|
509
|
-
*
|
|
520
|
+
* Xác định xem các thành phần có nên được lưu sau khi được chuyển đổi hay không.
|
|
521
|
+
* Theo cách này, trình biên dịch có thể chỉ chạy một lần để chuyển đổi ứng dụng của bạn và sau đó được gỡ bỏ.
|
|
510
522
|
*/
|
|
511
523
|
saveComponents: false,
|
|
512
524
|
|
|
513
525
|
/**
|
|
514
|
-
* Chỉ chèn nội dung vào tệp
|
|
526
|
+
* Chỉ chèn nội dung vào tệp được tạo. Hữu ích cho đầu ra JSON theo từng ngôn ngữ cho i18next hoặc ICU MessageFormat.
|
|
515
527
|
*/
|
|
516
528
|
noMetadata: false,
|
|
517
529
|
|
|
518
530
|
/**
|
|
519
531
|
* Tiền tố khóa từ điển
|
|
520
532
|
*/
|
|
521
|
-
dictionaryKeyPrefix: "", // Thêm tiền tố tùy chọn
|
|
533
|
+
dictionaryKeyPrefix: "", // Thêm một tiền tố tùy chọn vào các khóa từ điển được trích xuất
|
|
522
534
|
},
|
|
523
535
|
|
|
524
536
|
/**
|
|
525
|
-
*
|
|
537
|
+
* Các schema tùy chỉnh (Schemas) để xác thực nội dung từ điển.
|
|
526
538
|
*/
|
|
527
539
|
schemas: {
|
|
528
540
|
"my-schema": z.object({
|
|
@@ -531,7 +543,7 @@ const config: IntlayerConfig = {
|
|
|
531
543
|
},
|
|
532
544
|
|
|
533
545
|
/**
|
|
534
|
-
* Plugins
|
|
546
|
+
* Cấu hình các plugin (Plugins).
|
|
535
547
|
*/
|
|
536
548
|
plugins: [],
|
|
537
549
|
};
|
|
@@ -539,292 +551,114 @@ const config: IntlayerConfig = {
|
|
|
539
551
|
export default config;
|
|
540
552
|
````
|
|
541
553
|
|
|
542
|
-
|
|
554
|
+
---
|
|
555
|
+
|
|
556
|
+
## Tham chiếu cấu hình (Configuration Reference)
|
|
543
557
|
|
|
544
|
-
Các phần sau mô tả các
|
|
558
|
+
Các phần sau đây mô tả các tùy chọn cấu hình khác nhau có sẵn trong Intlayer.
|
|
545
559
|
|
|
546
560
|
---
|
|
547
561
|
|
|
548
|
-
### Cấu hình
|
|
549
|
-
|
|
550
|
-
Định nghĩa các
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
- _Ví dụ_: `['en', 'fr', 'es']`
|
|
559
|
-
|
|
560
|
-
- **requiredLocales**:
|
|
561
|
-
- _Kiểu_: `string[]`
|
|
562
|
-
- _Mặc định_: `[]`
|
|
563
|
-
- _Mô tả_: Danh sách các ngôn ngữ bắt buộc trong ứng dụng.
|
|
564
|
-
- _Ví dụ_: `[]`
|
|
565
|
-
- _Lưu ý_: Nếu để trống, tất cả các ngôn ngữ đều bắt buộc trong chế độ `strict`.
|
|
566
|
-
- _Lưu ý_: Đảm bảo các ngôn ngữ bắt buộc cũng được định nghĩa trong trường `locales`.
|
|
567
|
-
- **strictMode**:
|
|
568
|
-
- _Kiểu_: `string`
|
|
569
|
-
- _Mặc định_: `inclusive`
|
|
570
|
-
- _Mô tả_: Đảm bảo việc triển khai nội dung quốc tế hóa mạnh mẽ bằng cách sử dụng typescript.
|
|
571
|
-
- _Lưu ý_: Nếu được đặt thành "strict", hàm dịch `t` sẽ yêu cầu mỗi ngôn ngữ được khai báo phải được định nghĩa. Nếu thiếu một ngôn ngữ hoặc nếu một ngôn ngữ không được khai báo trong cấu hình của bạn, nó sẽ báo lỗi.
|
|
572
|
-
- _Lưu ý_: Nếu được đặt thành "inclusive", hàm dịch `t` sẽ yêu cầu mỗi ngôn ngữ được khai báo phải được định nghĩa. Nếu thiếu một ngôn ngữ, nó sẽ cảnh báo. Nhưng sẽ chấp nhận nếu một ngôn ngữ không được khai báo trong cấu hình của bạn nhưng tồn tại.
|
|
573
|
-
- _Lưu ý_: Nếu được đặt thành "loose", hàm dịch `t` sẽ chấp nhận bất kỳ ngôn ngữ nào tồn tại.
|
|
574
|
-
|
|
575
|
-
- **defaultLocale**:
|
|
576
|
-
- _Kiểu_: `string`
|
|
577
|
-
- _Mặc định_: `'en'`
|
|
578
|
-
- _Mô tả_: Ngôn ngữ mặc định được sử dụng làm dự phòng nếu ngôn ngữ yêu cầu không được tìm thấy.
|
|
579
|
-
- _Ví dụ_: `'en'`
|
|
580
|
-
- _Lưu ý_: Điều này được sử dụng để xác định ngôn ngữ khi không có ngôn ngữ nào được chỉ định trong URL, cookie hoặc header.
|
|
562
|
+
### Cấu hình quốc tế hóa (Internationalization Configuration)
|
|
563
|
+
|
|
564
|
+
Định nghĩa các cài đặt liên quan đến quốc tế hóa, bao gồm các ngôn ngữ có sẵn và ngôn ngữ mặc định cho ứng dụng.
|
|
565
|
+
|
|
566
|
+
| Trường | Kiểu | Mô tả | Ví dụ | Lưu ý |
|
|
567
|
+
| ----------------- | ---------- | ------------------------------------------------------------------------------------------------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
568
|
+
| `locales` | `string[]` | Danh sách các ngôn ngữ được hỗ trợ trong ứng dụng. Mặc định: `[Locales.ENGLISH]` | `['en', 'fr', 'es']` | |
|
|
569
|
+
| `requiredLocales` | `string[]` | Danh sách các ngôn ngữ bắt buộc trong ứng dụng. Mặc định: `[]` | `[]` | Nếu để trống, tất cả các ngôn ngữ đều bắt buộc trong chế độ `strict`. Đảm bảo các ngôn ngữ bắt buộc cũng được định nghĩa trong trường `locales`. |
|
|
570
|
+
| `strictMode` | `string` | Đảm bảo triển khai mạnh mẽ nội dung được quốc tế hóa thông qua việc sử dụng TypeScript. Mặc định: `inclusive` | | Nếu `"strict"`: hàm `t` yêu cầu mọi ngôn ngữ đã khai báo phải được định nghĩa — báo lỗi nếu thiếu hoặc không được khai báo. Nếu `"inclusive"`: cảnh báo về các ngôn ngữ bị thiếu nhưng chấp nhận các ngôn ngữ chưa khai báo hiện có. Nếu `"loose"`: chấp nhận bất kỳ ngôn ngữ nào hiện có. |
|
|
571
|
+
| `defaultLocale` | `string` | Ngôn ngữ mặc định được sử dụng làm dự phòng nếu không tìm thấy ngôn ngữ yêu cầu. Mặc định: `Locales.ENGLISH` | `'en'` | Được sử dụng để xác định ngôn ngữ khi không có ngôn ngữ nào được chỉ định trong URL, cookie hoặc header. |
|
|
581
572
|
|
|
582
573
|
---
|
|
583
574
|
|
|
584
|
-
### Cấu hình
|
|
585
|
-
|
|
586
|
-
Định nghĩa các thiết lập liên quan đến trình soạn thảo tích hợp, bao gồm cổng máy chủ và trạng thái hoạt động.
|
|
587
|
-
|
|
588
|
-
#### Thuộc tính
|
|
589
|
-
|
|
590
|
-
- **applicationURL**:
|
|
591
|
-
- _Kiểu_: `string`
|
|
592
|
-
- _Mặc định_: `http://localhost:3000`
|
|
593
|
-
- _Mô tả_: URL của ứng dụng. Được sử dụng để giới hạn nguồn gốc của trình soạn thảo vì lý do bảo mật.
|
|
594
|
-
- _Ví dụ_:
|
|
595
|
-
- `'http://localhost:3000'`
|
|
596
|
-
- `'https://example.com'`
|
|
597
|
-
- `process.env.INTLAYER_EDITOR_URL`
|
|
598
|
-
- _Lưu ý_: URL của ứng dụng. Được sử dụng để giới hạn nguồn gốc của trình soạn thảo vì lý do bảo mật. Nếu được đặt thành `'*'`, trình soạn thảo có thể truy cập từ bất kỳ nguồn gốc nào.
|
|
599
|
-
|
|
600
|
-
- **port**:
|
|
601
|
-
- _Kiểu_: `number`
|
|
602
|
-
- _Mặc định_: `8000`
|
|
603
|
-
- _Mô tả_: Cổng được sử dụng bởi máy chủ trình soạn thảo trực quan.
|
|
604
|
-
|
|
605
|
-
- **editorURL**:
|
|
606
|
-
- _Kiểu_: `string`
|
|
607
|
-
- _Mặc định_: `'http://localhost:8000'`
|
|
608
|
-
- _Mô tả_: URL của máy chủ trình soạn thảo. Được sử dụng để giới hạn nguồn gốc của trình soạn thảo vì lý do bảo mật.
|
|
609
|
-
- `'http://localhost:3000'`
|
|
610
|
-
- `'https://example.com'`
|
|
611
|
-
- `process.env.INTLAYER_EDITOR_URL`
|
|
612
|
-
- _Lưu ý_: URL của máy chủ trình soạn thảo để truy cập từ ứng dụng. Được sử dụng để giới hạn các nguồn gốc có thể tương tác với ứng dụng vì lý do bảo mật. Nếu được đặt thành `'*'`, trình soạn thảo có thể truy cập từ bất kỳ nguồn gốc nào. Nên được đặt nếu cổng bị thay đổi, hoặc nếu trình soạn thảo được lưu trữ trên một miền khác.
|
|
613
|
-
|
|
614
|
-
- **cmsURL**:
|
|
615
|
-
- _Kiểu_: `string`
|
|
616
|
-
- _Mặc định_: `'https://intlayer.org'`
|
|
617
|
-
- _Mô tả_: URL của Intlayer CMS.
|
|
618
|
-
- _Ví dụ_: `'https://intlayer.org'`
|
|
619
|
-
- _Lưu ý_: URL của Intlayer CMS.
|
|
620
|
-
|
|
621
|
-
- **backendURL**:
|
|
622
|
-
- _Kiểu_: `string`
|
|
623
|
-
- _Mặc định_: `https://back.intlayer.org`
|
|
624
|
-
- _Mô tả_: URL của máy chủ backend.
|
|
625
|
-
- _Ví dụ_: `http://localhost:4000`
|
|
626
|
-
|
|
627
|
-
- **enabled**:
|
|
628
|
-
- _Kiểu_: `boolean`
|
|
629
|
-
- _Mặc định_: `true`
|
|
630
|
-
- _Mô tả_: Chỉ ra liệu ứng dụng có tương tác với trình soạn thảo trực quan hay không.
|
|
631
|
-
- _Ví dụ_: `process.env.NODE_ENV !== 'production'`
|
|
632
|
-
- _Lưu ý_: Nếu là true, trình soạn thảo sẽ có thể tương tác với ứng dụng. Nếu là false, trình soạn thảo sẽ không thể tương tác với ứng dụng. Trong mọi trường hợp, trình soạn thảo chỉ có thể được kích hoạt bởi trình soạn thảo trực quan. Việc vô hiệu hóa trình soạn thảo cho các môi trường cụ thể là một cách để tăng cường bảo mật.
|
|
633
|
-
|
|
634
|
-
- **clientId**:
|
|
635
|
-
- _Kiểu_: `string` | `undefined`
|
|
636
|
-
- _Mặc định_: `undefined`
|
|
637
|
-
- _Mô tả_: clientId và clientSecret cho phép các package của intlayer xác thực với backend sử dụng xác thực oAuth2. Một access token được sử dụng để xác thực người dùng liên quan đến dự án. Để lấy access token, truy cập https://app.intlayer.org/project và tạo một tài khoản.
|
|
638
|
-
- _Ví dụ_: `true`
|
|
639
|
-
- _Lưu ý_: Quan trọng: clientId và clientSecret cần được giữ bí mật và không được chia sẻ công khai. Vui lòng đảm bảo giữ chúng ở nơi an toàn, chẳng hạn như biến môi trường.
|
|
640
|
-
|
|
641
|
-
- **clientSecret**:
|
|
642
|
-
- _Kiểu_: `string` | `undefined`
|
|
643
|
-
- _Mặc định_: `undefined`
|
|
644
|
-
- _Mô tả_: clientId và clientSecret cho phép các package của intlayer xác thực với backend sử dụng xác thực oAuth2. Một access token được sử dụng để xác thực người dùng liên quan đến dự án. Để lấy access token, truy cập https://app.intlayer.org/project và tạo một tài khoản.
|
|
645
|
-
- _Ví dụ_: `true`
|
|
646
|
-
- _Lưu ý_: Quan trọng: clientId và clientSecret cần được giữ bí mật và không được chia sẻ công khai. Vui lòng đảm bảo giữ chúng ở nơi an toàn, chẳng hạn như biến môi trường.
|
|
647
|
-
|
|
648
|
-
- **dictionaryPriorityStrategy**:
|
|
649
|
-
- _Kiểu_: `string`
|
|
650
|
-
- _Mặc định_: `'local_first'`
|
|
651
|
-
- _Mô tả_: Chiến lược ưu tiên từ điển trong trường hợp có cả từ điển cục bộ và từ điển từ xa. Nếu được đặt thành `'distant_first'`, ứng dụng sẽ ưu tiên từ điển từ xa hơn từ điển cục bộ. Nếu được đặt thành `'local_first'`, ứng dụng sẽ ưu tiên từ điển cục bộ hơn từ điển từ xa.
|
|
652
|
-
- _Ví dụ_: `'distant_first'`
|
|
653
|
-
|
|
654
|
-
- **liveSync**:
|
|
655
|
-
- _Kiểu_: `boolean`
|
|
656
|
-
- _Mặc định_: `false`
|
|
657
|
-
- _Mô tả_: Chỉ định liệu server ứng dụng có nên tải lại nóng nội dung của ứng dụng khi phát hiện có thay đổi trên CMS / Visual Editor / Backend hay không.
|
|
658
|
-
- _Ví dụ_: `true`
|
|
659
|
-
- _Lưu ý_: Ví dụ, khi một từ điển mới được thêm hoặc cập nhật, ứng dụng sẽ cập nhật nội dung để hiển thị trên trang.
|
|
660
|
-
- _Lưu ý_: Live sync cần phải đưa nội dung của ứng dụng ra một server khác. Điều này có nghĩa là nó có thể ảnh hưởng nhẹ đến hiệu năng của ứng dụng. Để hạn chế điều này, chúng tôi khuyến nghị nên host ứng dụng và server live sync trên cùng một máy. Ngoài ra, sự kết hợp giữa live sync và `optimize` có thể tạo ra một số lượng lớn các yêu cầu đến server live sync. Tùy thuộc vào hạ tầng của bạn, chúng tôi khuyến nghị nên thử nghiệm cả hai tùy chọn và sự kết hợp của chúng.
|
|
661
|
-
|
|
662
|
-
- **liveSyncPort**:
|
|
663
|
-
- _Kiểu_: `number`
|
|
664
|
-
- _Mặc định_: `4000`
|
|
665
|
-
- _Mô tả_: Cổng của server live sync.
|
|
666
|
-
- _Ví dụ_: `4000`
|
|
667
|
-
- _Lưu ý_: Cổng của server live sync.
|
|
668
|
-
|
|
669
|
-
- **liveSyncURL**:
|
|
670
|
-
- _Kiểu_: `string`
|
|
671
|
-
- _Mặc định_: `'http://localhost:{liveSyncPort}'`
|
|
672
|
-
- _Mô tả_: URL của server live sync.
|
|
673
|
-
- _Ví dụ_: `'https://example.com'`
|
|
674
|
-
- _Lưu ý_: Mặc định trỏ tới localhost nhưng có thể thay đổi thành bất kỳ URL nào trong trường hợp server live sync từ xa.
|
|
675
|
-
|
|
676
|
-
### Cấu hình Routing
|
|
677
|
-
|
|
678
|
-
Các thiết lập kiểm soát hành vi routing, bao gồm cấu trúc URL, lưu trữ locale và xử lý middleware.
|
|
679
|
-
|
|
680
|
-
#### Thuộc tính
|
|
681
|
-
|
|
682
|
-
- **mode**:
|
|
683
|
-
- _Kiểu_: `'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'`
|
|
684
|
-
- _Mặc định_: `'prefix-no-default'`
|
|
685
|
-
- _Mô tả_: Chế độ routing URL để xử lý locale.
|
|
686
|
-
- _Ví dụ_:
|
|
687
|
-
- `'prefix-no-default'`: `/dashboard` (en) hoặc `/fr/dashboard` (fr)
|
|
688
|
-
- `'prefix-all'`: `/en/dashboard` (en) hoặc `/fr/dashboard` (fr)
|
|
689
|
-
- `'no-prefix'`: `/dashboard` (locale được xử lý bằng cách khác)
|
|
690
|
-
- `'search-params'`: `/dashboard?locale=fr`
|
|
691
|
-
- _Lưu ý_: Thiết lập này không ảnh hưởng đến quản lý cookie hoặc lưu trữ locale.
|
|
692
|
-
|
|
693
|
-
- **storage**:
|
|
694
|
-
- _Kiểu_: `false | 'cookie' | 'localStorage' | 'sessionStorage' | 'header' | CookiesAttributes | StorageAttributes | Array`
|
|
695
|
-
- _Mặc định_: `'localStorage'`
|
|
696
|
-
- _Mô tả_: Cấu hình để lưu trữ locale trên client.
|
|
697
|
-
|
|
698
|
-
- **cookie**:
|
|
699
|
-
- _Mô tả_: Lưu dữ liệu trong cookie, các mẩu dữ liệu nhỏ được lưu trên trình duyệt của client, có thể truy cập cả phía client và server.
|
|
700
|
-
- _Lưu ý_: Để tuân thủ GDPR, cần đảm bảo có sự đồng ý của người dùng trước khi sử dụng.
|
|
701
|
-
- _Lưu ý_: Các tham số cookie có thể tùy chỉnh nếu được đặt dưới dạng CookiesAttributes (`{ type: 'cookie', name: 'custom-locale', secure: true, httpOnly: false }`).
|
|
702
|
-
|
|
703
|
-
- **localStorage**:
|
|
704
|
-
- _Mô tả_: Lưu dữ liệu trong trình duyệt mà không có ngày hết hạn, cho phép dữ liệu tồn tại qua các phiên làm việc, chỉ có thể truy cập ở phía client.
|
|
705
|
-
- _Lưu ý_: Phù hợp để lưu trữ dữ liệu lâu dài nhưng cần lưu ý về các vấn đề bảo mật và quyền riêng tư do dữ liệu không hết hạn trừ khi được xóa rõ ràng.
|
|
706
|
-
- _Lưu ý_: Bộ lưu trữ locale chỉ có thể truy cập ở phía client, proxy intlayer sẽ không thể truy cập được.
|
|
707
|
-
- _Lưu ý_: Các tham số lưu trữ locale có thể tùy chỉnh nếu được đặt dưới dạng StorageAttributes (`{ type: 'localStorage', name: 'custom-locale' }`).
|
|
708
|
-
|
|
709
|
-
- **sessionStorage**:
|
|
710
|
-
- _Mô tả_: Lưu dữ liệu trong suốt phiên làm việc của trang, nghĩa là dữ liệu sẽ bị xóa khi tab hoặc cửa sổ trình duyệt đóng, chỉ có thể truy cập ở phía client.
|
|
711
|
-
- _Lưu ý_: Phù hợp để lưu trữ dữ liệu tạm thời cho mỗi phiên làm việc.
|
|
712
|
-
- _Lưu ý_: Bộ lưu trữ locale chỉ có thể truy cập ở phía client, proxy intlayer sẽ không thể truy cập được.
|
|
713
|
-
- _Lưu ý_: Các tham số lưu trữ locale có thể tùy chỉnh nếu được đặt dưới dạng StorageAttributes (`{ type: 'sessionStorage', name: 'custom-locale' }`).
|
|
714
|
-
|
|
715
|
-
- **header**:
|
|
716
|
-
- _Mô tả_: Sử dụng các header HTTP để lưu trữ hoặc truyền dữ liệu locale, phù hợp cho việc xác định ngôn ngữ phía server.
|
|
717
|
-
- _Lưu ý_: Hữu ích trong các cuộc gọi API để duy trì cài đặt ngôn ngữ nhất quán qua các yêu cầu.
|
|
718
|
-
- _Lưu ý_: Header chỉ có thể truy cập ở phía server, phía client sẽ không thể truy cập được.
|
|
719
|
-
- _Lưu ý_: Tên header có thể tùy chỉnh nếu được đặt dưới dạng StorageAttributes (`{ type: 'header', name: 'custom-locale' }`).
|
|
720
|
-
|
|
721
|
-
- **basePath**:
|
|
722
|
-
- _Kiểu_: `string`
|
|
723
|
-
- _Mặc định_: `''`
|
|
724
|
-
- _Mô tả_: Đường dẫn cơ sở cho các URL của ứng dụng.
|
|
725
|
-
- _Ví dụ_: `'/my-app'`
|
|
726
|
-
- _Lưu ý_:
|
|
727
|
-
- Nếu ứng dụng được lưu trữ tại `https://example.com/my-app`
|
|
728
|
-
- Đường dẫn cơ sở là `'/my-app'`
|
|
729
|
-
- URL sẽ là `https://example.com/my-app/en`
|
|
730
|
-
- Nếu không đặt đường dẫn cơ sở, URL sẽ là `https://example.com/en`
|
|
731
|
-
|
|
732
|
-
- **rewrite**:
|
|
733
|
-
- _Kiểu_: `Record<string, StrictModeLocaleMap<string>>`
|
|
734
|
-
- _Mặc định_: `undefined`
|
|
735
|
-
- _Mô tả_: Quy tắc viết lại URL tùy chỉnh ghi đè chế độ định tuyến mặc định cho các đường dẫn cụ thể. Cho phép bạn xác định các đường dẫn cụ thể theo ngôn ngữ khác với hành vi định tuyến tiêu chuẩn. Hỗ trợ tham số tuyến động bằng cách sử dụng cú pháp `[param]`.
|
|
736
|
-
- _Ví dụ_:
|
|
737
|
-
```typescript
|
|
738
|
-
routing: {
|
|
739
|
-
mode: "prefix-no-default", // Chiến lược dự phòng
|
|
740
|
-
rewrite: nextjsRewrite({
|
|
741
|
-
"/[locale]/about": {
|
|
742
|
-
en: "/[locale]/about",
|
|
743
|
-
fr: "/[locale]/a-propos",
|
|
744
|
-
},
|
|
745
|
-
"/[locale]/product/[slug]": {
|
|
746
|
-
en: "/[locale]/product/[slug]",
|
|
747
|
-
fr: "/[locale]/produit/[slug]",
|
|
748
|
-
},
|
|
749
|
-
"/[locale]/blog/[category]/[id]": {
|
|
750
|
-
en: "/[locale]/blog/[category]/[id]",
|
|
751
|
-
fr: "/[locale]/journal/[category]/[id]",
|
|
752
|
-
},
|
|
753
|
-
}),
|
|
754
|
-
}
|
|
755
|
-
```
|
|
756
|
-
- _Lưu ý_: Các quy tắc viết lại có ưu tiên cao hơn hành vi `mode` mặc định. Nếu một đường dẫn khớp với quy tắc viết lại, đường dẫn đã được bản địa hóa từ cấu hình viết lại sẽ được sử dụng thay vì tiền tố ngôn ngữ tiêu chuẩn.
|
|
757
|
-
- _Lưu ý_: Tham số tuyến động được hỗ trợ bằng cách sử dụng ký hiệu ngoặc vuông (ví dụ: `[slug]`, `[id]`). Giá trị tham số được tự động trích xuất từ URL và nội suy vào đường dẫn đã viết lại.
|
|
758
|
-
- _Lưu ý_: Hoạt động với ứng dụng Next.js và Vite. Middleware/proxy sẽ tự động viết lại các yêu cầu đến để khớp với cấu trúc tuyến nội bộ.
|
|
759
|
-
- _Lưu ý_: Khi tạo URL bằng `getLocalizedUrl()`, các quy tắc viết lại được áp dụng tự động nếu chúng khớp với đường dẫn được cung cấp.
|
|
760
|
-
- _Tham khảo_: Để biết thêm thông tin, xem [Viết lại URL tùy chỉnh](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/custom_url_rewrites.md).
|
|
761
|
-
|
|
762
|
-
#### Thuộc tính Cookie
|
|
763
|
-
|
|
764
|
-
Khi sử dụng lưu trữ cookie, bạn có thể cấu hình thêm các thuộc tính cookie:
|
|
765
|
-
|
|
766
|
-
- **name**: Tên cookie (mặc định: `'INTLAYER_LOCALE'`)
|
|
767
|
-
- **domain**: Miền cookie (mặc định: không xác định)
|
|
768
|
-
- **path**: Đường dẫn cookie (mặc định: không xác định)
|
|
769
|
-
- **secure**: Yêu cầu HTTPS (mặc định: không xác định)
|
|
770
|
-
- **httpOnly**: Cờ chỉ HTTP (mặc định: không xác định)
|
|
771
|
-
- **sameSite**: Chính sách SameSite (`'strict' | 'lax' | 'none'`)
|
|
772
|
-
- **expires**: Ngày hết hạn hoặc số ngày (mặc định: không xác định)
|
|
773
|
-
|
|
774
|
-
#### Thuộc tính lưu trữ Locale
|
|
575
|
+
### Cấu hình trình chỉnh sửa (Editor Configuration)
|
|
775
576
|
|
|
776
|
-
|
|
577
|
+
Định nghĩa các cài đặt liên quan đến trình chỉnh sửa tích hợp, bao gồm cổng máy chủ và trạng thái hoạt động.
|
|
578
|
+
|
|
579
|
+
| Trường | Kiểu | Mô tả | Ví dụ | Lưu ý |
|
|
580
|
+
| ---------------------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
581
|
+
| `applicationURL` | `string` | URL ứng dụng của bạn. Mặc định: `''` | `'http://localhost:3000'`, `'https://example.com'`, `process.env.INTLAYER_EDITOR_URL` | Được sử dụng để hạn chế các nguồn (origins) của trình chỉnh sửa vì lý do bảo mật. Nếu được đặt thành `'*'`, trình chỉnh sửa có thể được truy cập từ bất kỳ nguồn nào. |
|
|
582
|
+
| `port` | `number` | Cổng được sử dụng bởi máy chủ Trình chỉnh sửa trực quan. Mặc định: `8000` | | |
|
|
583
|
+
| `editorURL` | `string` | URL máy chủ trình chỉnh sửa. Mặc định: `'http://localhost:8000'` | `'http://localhost:3000'`, `'https://example.com'`, `process.env.INTLAYER_EDITOR_URL` | Được sử dụng để hạn chế các nguồn có thể tương tác với ứng dụng. Nếu được đặt thành `'*'`, có thể truy cập từ bất kỳ nguồn nào. Phải được đặt nếu bạn thay đổi cổng hoặc trình chỉnh sửa được host trên một domain khác. |
|
|
584
|
+
| `cmsURL` | `string` | URL của Intlayer CMS. Mặc định: `'https://intlayer.org'` | `'https://intlayer.org'` | |
|
|
585
|
+
| `backendURL` | `string` | URL của máy chủ backend. Mặc định: `https://back.intlayer.org` | `http://localhost:4000` | |
|
|
586
|
+
| `enabled` | `boolean` | Xác định xem ứng dụng có tương tác với trình chỉnh sửa trực quan hay không. Mặc định: `true` | `process.env.NODE_ENV !== 'production'` | Nếu là `false`, trình chỉnh sửa không thể tương tác với ứng dụng. Tắt nó cho các môi trường cụ thể giúp tăng cường bảo mật. |
|
|
587
|
+
| `clientId` | `string | undefined` | Cho phép các gói intlayer xác thực với backend bằng oAuth2. Để nhận access token, hãy truy cập [intlayer.org/project](https://app.intlayer.org/project). Mặc định: `undefined` | | Giữ bí mật; lưu trữ trong biến môi trường. |
|
|
588
|
+
| `clientSecret` | `string | undefined` | Cho phép các gói intlayer xác thực với backend bằng oAuth2. Để nhận access token, hãy truy cập [intlayer.org/project](https://app.intlayer.org/project). Mặc định: `undefined` | | Giữ bí mật; lưu trữ trong biến môi trường. |
|
|
589
|
+
| `dictionaryPriorityStrategy` | `string` | Chiến lược ưu tiên từ điển khi tồn tại cả từ điển cục bộ và từ xa. Mặc định: `'local_first'` | `'distant_first'` | `'distant_first'`: Ưu tiên từ xa thay vì cục bộ. `'local_first'`: Ưu tiên cục bộ thay vì từ xa. |
|
|
590
|
+
| `liveSync` | `boolean` | Xác định xem máy chủ ứng dụng có nên hot reload nội dung khi phát hiện thay đổi trong CMS / Trình chỉnh sửa trực quan / Backend hay không. Mặc định: `true` | `true` | Khi một từ điển được thêm/cập nhật, ứng dụng sẽ cập nhật nội dung trang. Live sync thuê ngoài nội dung cho một máy chủ khác, điều này có thể ảnh hưởng nhẹ đến hiệu năng. Khuyến nghị host cả hai trên cùng một máy. |
|
|
591
|
+
| `liveSyncPort` | `number` | Cổng máy chủ Live Sync. Mặc định: `4000` | `4000` | |
|
|
592
|
+
| `liveSyncURL` | `string` | URL máy chủ Live Sync. Mặc định: `'http://localhost:{liveSyncPort}'` | `'https://example.com'` | Chỉ đến localhost theo mặc định; có thể thay đổi thành máy chủ live sync từ xa. |
|
|
593
|
+
|
|
594
|
+
### Cấu hình routing (Routing Configuration)
|
|
777
595
|
|
|
778
|
-
|
|
779
|
-
- **name**: Tên khóa lưu trữ (mặc định: `'INTLAYER_LOCALE'`)
|
|
596
|
+
Các cài đặt kiểm soát hành vi định tuyến, bao gồm cấu trúc URL, lưu trữ ngôn ngữ và xử lý middleware.
|
|
780
597
|
|
|
781
|
-
|
|
598
|
+
| Trường | Kiểu | Mô tả | Ví dụ | Lưu ý |
|
|
599
|
+
| ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
600
|
+
| `mode` | `'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'` | Chế độ routing URL để xử lý ngôn ngữ. Mặc định: `'prefix-no-default'` | `'prefix-no-default'`: `/dashboard` (en) hoặc `/fr/dashboard` (fr). `'prefix-all'`: `/en/dashboard`. `'no-prefix'`: ngôn ngữ được xử lý bằng các phương tiện khác. `'search-params'`: sử dụng `/dashboard?locale=fr` | Không ảnh hưởng đến quản lý cookie hoặc lưu trữ ngôn ngữ (locale storage). |
|
|
601
|
+
| `storage` | `false | 'cookie' | 'localStorage' | 'sessionStorage' | 'header' | CookiesAttributes | StorageAttributes | Array` | Cấu hình để lưu trữ ngôn ngữ trên client. Mặc định: `['cookie', 'header']` | `'localStorage'`, `[{ type: 'cookie', name: 'custom-locale', secure: true }]` | Xem bảng Tùy chọn lưu trữ bên dưới. |
|
|
602
|
+
| `basePath` | `string` | Đường dẫn cơ sở cho các URL của ứng dụng. Mặc định: `''` | `'/my-app'` | Nếu ứng dụng nằm trên `https://example.com/my-app`, basePath là `'/my-app'` và các URL trở thành `https://example.com/my-app/en`. |
|
|
603
|
+
| `rewrite` | `Record<string, StrictModeLocaleMap<string>>` | Các quy tắc ghi đè URL tùy chỉnh thay thế chế độ định tuyến mặc định cho các đường dẫn cụ thể. Hỗ trợ các tham số động `[param]`. Mặc định: `undefined` | Xem ví dụ bên dưới | Các quy tắc ghi đè có ưu tiên hơn `mode`. Hoạt động với Next.js và Vite. `getLocalizedUrl()` tự động áp dụng các quy tắc phù hợp. Xem [Ghi đè URL tùy chỉnh](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/custom_url_rewrites.md). |
|
|
782
604
|
|
|
783
|
-
|
|
605
|
+
**Ví dụ về `rewrite`**:
|
|
784
606
|
|
|
785
|
-
|
|
607
|
+
```typescript
|
|
608
|
+
routing: {
|
|
609
|
+
mode: "prefix-no-default", // Chiến lược dự phòng
|
|
610
|
+
rewrite: nextjsRewrite({
|
|
611
|
+
"/about": {
|
|
612
|
+
en: "/about",
|
|
613
|
+
fr: "/a-propos",
|
|
614
|
+
},
|
|
615
|
+
"/product/[slug]": {
|
|
616
|
+
en: "/product/[slug]",
|
|
617
|
+
fr: "/produit/[slug]",
|
|
618
|
+
},
|
|
619
|
+
"/blog/[category]/[id]": {
|
|
620
|
+
en: "/blog/[category]/[id]",
|
|
621
|
+
fr: "/journal/[category]/[id]",
|
|
622
|
+
},
|
|
623
|
+
}),
|
|
624
|
+
}
|
|
625
|
+
```
|
|
786
626
|
|
|
787
|
-
|
|
788
|
-
- _Kiểu_: `string`
|
|
789
|
-
- _Mặc định_: `process.cwd()`
|
|
790
|
-
- _Mô tả_: Thư mục gốc của dự án.
|
|
791
|
-
- _Ví dụ_: `'/path/to/project'`
|
|
792
|
-
- _Lưu ý_: Được sử dụng để giải quyết tất cả các thư mục liên quan đến Intlayer.
|
|
627
|
+
#### Tùy chọn lưu trữ (Storage Options)
|
|
793
628
|
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
629
|
+
| Giá trị | Mô tả | Lưu ý |
|
|
630
|
+
| ------------------ | -------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
631
|
+
| `'cookie'` | Lưu ngôn ngữ trong cookie — có thể truy cập từ cả phía client và server. | Để tuân thủ GDPR, hãy đảm bảo đã nhận được sự đồng ý thích hợp của người dùng. Có thể tùy chỉnh qua `CookiesAttributes` (`{ type: 'cookie', name: 'custom-locale', secure: true, httpOnly: false }`). |
|
|
632
|
+
| `'localStorage'` | Lưu ngôn ngữ trong trình duyệt mà không có ngày hết hạn — chỉ phía client. | Không hết hạn trừ khi bị xóa rõ ràng. Proxy của Intlayer không thể truy cập cái này. Có thể tùy chỉnh qua `StorageAttributes` (`{ type: 'localStorage', name: 'custom-locale' }`). |
|
|
633
|
+
| `'sessionStorage'` | Lưu ngôn ngữ trong suốt thời gian của phiên trang — chỉ phía client. | Bị xóa khi đóng tab/cửa sổ. Proxy của Intlayer không thể truy cập cái này. Có thể tùy chỉnh qua `StorageAttributes` (`{ type: 'sessionStorage', name: 'custom-locale' }`). |
|
|
634
|
+
| `'header'` | Lưu hoặc truyền ngôn ngữ qua các HTTP header — chỉ phía server. | Hữu ích cho các cuộc gọi API. Phía client không thể truy cập. Có thể tùy chỉnh qua `StorageAttributes` (`{ type: 'header', name: 'custom-locale' }`). |
|
|
799
635
|
|
|
800
|
-
|
|
801
|
-
- _Kiểu_: `string`
|
|
802
|
-
- _Mặc định_: `'.intlayer/types'`
|
|
803
|
-
- _Mô tả_: Thư mục dành cho việc mở rộng module, giúp IDE gợi ý và kiểm tra kiểu tốt hơn.
|
|
804
|
-
- _Ví dụ_: `'intlayer-types'`
|
|
805
|
-
- _Lưu ý_: Hãy chắc chắn bao gồm thư mục này trong `tsconfig.json`.
|
|
636
|
+
#### Thuộc tính Cookie (Cookie Attributes)
|
|
806
637
|
|
|
807
|
-
|
|
808
|
-
- _Kiểu_: `string`
|
|
809
|
-
- _Mặc định_: `'.intlayer/unmerged_dictionary'`
|
|
810
|
-
- _Mô tả_: Thư mục để lưu trữ các từ điển chưa được hợp nhất.
|
|
811
|
-
- _Ví dụ_: `'translations'`
|
|
638
|
+
Khi sử dụng lưu trữ qua cookie, bạn có thể cấu hình các thuộc tính cookie bổ sung:
|
|
812
639
|
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
640
|
+
| Trường | Kiểu | Mô tả |
|
|
641
|
+
| ---------- | ------------------------------------- | ------------------------------------------------ |
|
|
642
|
+
| `name` | `string` | Tên của cookie. Mặc định: `'INTLAYER_LOCALE'` |
|
|
643
|
+
| `domain` | `string` | Domain của cookie. Mặc định: `undefined` |
|
|
644
|
+
| `path` | `string` | Đường dẫn của cookie. Mặc định: `undefined` |
|
|
645
|
+
| `secure` | `boolean` | Yêu cầu HTTPS. Mặc định: `undefined` |
|
|
646
|
+
| `httpOnly` | `boolean` | Cờ HTTP-only. Mặc định: `undefined` |
|
|
647
|
+
| `sameSite` | `'strict' | 'lax' | 'none'` | Chính sách SameSite. |
|
|
648
|
+
| `expires` | `Date | number` | Ngày hết hạn hoặc số ngày. Mặc định: `undefined` |
|
|
818
649
|
|
|
819
|
-
|
|
820
|
-
- _Kiểu_: `string`
|
|
821
|
-
- _Mặc định_: `'main'`
|
|
822
|
-
- _Mô tả_: Thư mục nơi lưu trữ các tệp chính của ứng dụng.
|
|
823
|
-
- _Ví dụ_: `'intlayer-main'`
|
|
650
|
+
#### Thuộc tính lưu trữ ngôn ngữ (Locale Storage Attributes)
|
|
824
651
|
|
|
825
|
-
|
|
652
|
+
Khi sử dụng localStorage hoặc sessionStorage:
|
|
653
|
+
|
|
654
|
+
| Trường | Kiểu | Mô tả |
|
|
655
|
+
| ------ | ---------------------------------------- | --------------------------------------------------- |
|
|
656
|
+
| `type` | `'localStorage' | 'sessionStorage'` | Kiểu lưu trữ. |
|
|
657
|
+
| `name` | `string` | Tên của khóa lưu trữ. Mặc định: `'INTLAYER_LOCALE'` |
|
|
658
|
+
|
|
659
|
+
#### Các ví dụ cấu hình
|
|
826
660
|
|
|
827
|
-
Dưới đây là một số ví dụ cấu hình phổ biến cho cấu trúc
|
|
661
|
+
Dưới đây là một số ví dụ cấu hình phổ biến cho cấu trúc định tuyến v7 mới:
|
|
828
662
|
|
|
829
663
|
**Cấu hình cơ bản (Mặc định)**:
|
|
830
664
|
|
|
@@ -839,7 +673,7 @@ const config: IntlayerConfig = {
|
|
|
839
673
|
routing: {
|
|
840
674
|
mode: "prefix-no-default",
|
|
841
675
|
storage: "localStorage",
|
|
842
|
-
|
|
676
|
+
basePath: "",
|
|
843
677
|
},
|
|
844
678
|
};
|
|
845
679
|
|
|
@@ -871,13 +705,14 @@ const config: IntlayerConfig = {
|
|
|
871
705
|
httpOnly: false,
|
|
872
706
|
},
|
|
873
707
|
],
|
|
708
|
+
basePath: "",
|
|
874
709
|
},
|
|
875
710
|
};
|
|
876
711
|
|
|
877
712
|
export default config;
|
|
878
713
|
```
|
|
879
714
|
|
|
880
|
-
**Chế độ
|
|
715
|
+
**Chế độ tham số tìm kiếm (Search Parameters Mode)**:
|
|
881
716
|
|
|
882
717
|
```typescript
|
|
883
718
|
import { Locales, type IntlayerConfig } from "intlayer";
|
|
@@ -889,13 +724,15 @@ const config: IntlayerConfig = {
|
|
|
889
724
|
},
|
|
890
725
|
routing: {
|
|
891
726
|
mode: "search-params",
|
|
727
|
+
storage: "localStorage",
|
|
728
|
+
basePath: "",
|
|
892
729
|
},
|
|
893
730
|
};
|
|
894
731
|
|
|
895
732
|
export default config;
|
|
896
733
|
```
|
|
897
734
|
|
|
898
|
-
**Chế độ
|
|
735
|
+
**Chế độ không tiền tố (No Prefix Mode) với lưu trữ tùy chỉnh**:
|
|
899
736
|
|
|
900
737
|
```typescript
|
|
901
738
|
import { Locales, type IntlayerConfig } from "intlayer";
|
|
@@ -909,355 +746,177 @@ const config: IntlayerConfig = {
|
|
|
909
746
|
mode: "no-prefix",
|
|
910
747
|
storage: {
|
|
911
748
|
type: "sessionStorage",
|
|
749
|
+
name: "app-locale",
|
|
912
750
|
},
|
|
751
|
+
basePath: "/my-app",
|
|
913
752
|
},
|
|
914
753
|
};
|
|
915
754
|
|
|
916
755
|
export default config;
|
|
917
756
|
```
|
|
918
757
|
|
|
758
|
+
**Ghi đè URL tùy chỉnh với đường dẫn động**:
|
|
759
|
+
|
|
760
|
+
```typescript
|
|
761
|
+
// intlayer.config.ts
|
|
762
|
+
import { nextjsRewrite } from "intlayer/routing";
|
|
763
|
+
|
|
764
|
+
const config: IntlayerConfig = {
|
|
765
|
+
internationalization: {
|
|
766
|
+
locales: ["en", "fr"],
|
|
767
|
+
defaultLocale: "en",
|
|
768
|
+
},
|
|
769
|
+
routing: {
|
|
770
|
+
mode: "prefix-no-default", // Chiến lược dự phòng cho các đường dẫn không được ghi đè
|
|
771
|
+
storage: "cookie",
|
|
772
|
+
rewrite: nextjsRewrite({
|
|
773
|
+
"/about": {
|
|
774
|
+
en: "/about",
|
|
775
|
+
fr: "/a-propos",
|
|
776
|
+
},
|
|
777
|
+
"/product/[slug]": {
|
|
778
|
+
en: "/product/[slug]",
|
|
779
|
+
fr: "/produit/[slug]",
|
|
780
|
+
},
|
|
781
|
+
"/blog/[category]/[id]": {
|
|
782
|
+
en: "/blog/[category]/[id]",
|
|
783
|
+
fr: "/journal/[category]/[id]",
|
|
784
|
+
},
|
|
785
|
+
}),
|
|
786
|
+
},
|
|
787
|
+
};
|
|
788
|
+
|
|
789
|
+
export default config;
|
|
790
|
+
```
|
|
791
|
+
|
|
792
|
+
---
|
|
793
|
+
|
|
794
|
+
### Cấu hình nội dung (Content Configuration)
|
|
795
|
+
|
|
796
|
+
Các cài đặt liên quan đến việc xử lý nội dung trong ứng dụng (tên thư mục, phần mở rộng tệp và các cấu hình phái sinh).
|
|
797
|
+
|
|
798
|
+
| Trường | Kiểu | Mô tả | Ví dụ | Lưu ý |
|
|
799
|
+
| ---------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
800
|
+
| `watch` | `boolean` | Xác định xem Intlayer có nên theo dõi các thay đổi trong các tệp khai báo nội dung để build lại từ điển hay không. Mặc định: `process.env.NODE_ENV === 'development'` | | |
|
|
801
|
+
| `fileExtensions` | `string[]` | Các phần mở rộng tệp được sử dụng để quét các tệp khai báo nội dung. Mặc định: `['.content.ts', '.content.js', '.content.mjs', '.content.cjs', '.content.json', '.content.json5', '.content.jsonc']` | `['.content.ts', '.content.js']` | |
|
|
802
|
+
| `contentDir` | `string[]` | Đường dẫn đến các thư mục chứa các tệp khai báo nội dung. Mặc định: `['.']` | `['src/content']` | |
|
|
803
|
+
| `codeDir` | `string[]` | Đường dẫn đến các thư mục chứa các tệp mã nguồn của ứng dụng. Mặc định: `['.']` | `['src']` | Được sử dụng để tối ưu hóa build và đảm bảo rằng việc chuyển đổi mã và hot reload chỉ được áp dụng cho các tệp cần thiết. |
|
|
804
|
+
| `excludedPath` | `string[]` | Các đường dẫn bị loại trừ khỏi việc quét nội dung. Mặc định: `['node_modules', '.intlayer', '.next', 'dist', 'build']` | `['src/styles']` | |
|
|
805
|
+
| `formatCommand` | `string` | Lệnh sẽ được chạy để định dạng các tệp nội dung mới tạo hoặc cập nhật. Mặc định: `undefined` | `'npx prettier --write "{{file}}"'` | Được sử dụng trong quá trình trích xuất nội dung hoặc qua trình chỉnh sửa trực quan. |
|
|
806
|
+
|
|
919
807
|
---
|
|
920
808
|
|
|
921
|
-
### Cấu hình
|
|
922
|
-
|
|
923
|
-
Các thiết lập liên quan đến việc xử lý nội dung trong ứng dụng, bao gồm tên thư mục, phần mở rộng tệp, và các cấu hình dẫn xuất.
|
|
924
|
-
|
|
925
|
-
#### Thuộc tính
|
|
926
|
-
|
|
927
|
-
- **watch**:
|
|
928
|
-
- _Kiểu_: `boolean`
|
|
929
|
-
- _Mặc định_: `process.env.NODE_ENV === 'development'`
|
|
930
|
-
- _Mô tả_: Chỉ định liệu Intlayer có nên theo dõi các thay đổi trong các tệp khai báo nội dung trong ứng dụng để xây dựng lại các từ điển liên quan hay không.
|
|
931
|
-
|
|
932
|
-
- **fileExtensions**:
|
|
933
|
-
- _Kiểu_: `string[]`
|
|
934
|
-
- _Mặc định_: `['.content.ts', '.content.js', '.content.cjs', '.content.mjs', '.content.json', '.content.tsx', '.content.jsx']`
|
|
935
|
-
- _Mô tả_: Các phần mở rộng tệp cần tìm khi xây dựng từ điển.
|
|
936
|
-
- _Ví dụ_: `['.data.ts', '.data.js', '.data.json']`
|
|
937
|
-
- _Lưu ý_: Tùy chỉnh phần mở rộng tệp có thể giúp tránh xung đột.
|
|
938
|
-
|
|
939
|
-
- **contentDir**:
|
|
940
|
-
- _Kiểu_: `string[]`
|
|
941
|
-
- _Mặc định_: `['.']`
|
|
942
|
-
- _Ví dụ_: `['src', '../../ui-library', require.resolve("@my-package/content")]`
|
|
943
|
-
- _Mô tả_: Đường dẫn thư mục nơi lưu trữ các tệp định nghĩa nội dung (`.content.*`).
|
|
944
|
-
- _Lưu ý_: Được sử dụng để theo dõi các tệp nội dung để xây dựng lại từ điển.
|
|
945
|
-
|
|
946
|
-
- **codeDir**:
|
|
947
|
-
- _Kiểu_: `string[]`
|
|
948
|
-
- _Mặc định_: `['.']`
|
|
949
|
-
- _Ví dụ_: `['src', '../../ui-library']`
|
|
950
|
-
- _Mô tả_: Đường dẫn thư mục nơi lưu trữ mã, tương đối với thư mục cơ sở.
|
|
951
|
-
- _Lưu ý_: Được sử dụng để theo dõi các tệp mã để chuyển đổi (cắt tỉa, tối ưu hóa). Giữ điều này tách biệt khỏi `contentDir` có thể cải thiện hiệu suất xây dựng bằng cách tránh quét không cần thiết các tệp nội dung.
|
|
952
|
-
|
|
953
|
-
- **dictionariesDir**:
|
|
954
|
-
- _Kiểu_: `string`
|
|
955
|
-
- _Mặc định_: `'.intlayer/dictionaries'`
|
|
956
|
-
- _Mô tả_: Đường dẫn thư mục để lưu trữ kết quả trung gian hoặc đầu ra.
|
|
957
|
-
|
|
958
|
-
- **moduleAugmentationDir**:
|
|
959
|
-
- _Kiểu_: `string`
|
|
960
|
-
- _Mặc định_: `'.intlayer/types'`
|
|
961
|
-
- _Mô tả_: Thư mục dành cho việc mở rộng module, giúp IDE gợi ý và kiểm tra kiểu tốt hơn.
|
|
962
|
-
- _Ví dụ_: `'intlayer-types'`
|
|
963
|
-
- _Lưu ý_: Hãy chắc chắn bao gồm thư mục này trong `tsconfig.json`.
|
|
964
|
-
|
|
965
|
-
- **unmergedDictionariesDir**:
|
|
966
|
-
- _Kiểu_: `string`
|
|
967
|
-
- _Mặc định_: `'.intlayer/unmerged_dictionary'`
|
|
968
|
-
- _Mô tả_: Thư mục để lưu trữ các từ điển chưa được hợp nhất.
|
|
969
|
-
- _Ví dụ_: `'translations'`
|
|
970
|
-
|
|
971
|
-
- **dictionariesDir**:
|
|
972
|
-
- _Kiểu_: `string`
|
|
973
|
-
- _Mặc định_: `'.intlayer/dictionary'`
|
|
974
|
-
- _Mô tả_: Thư mục để lưu trữ các từ điển bản địa hóa.
|
|
975
|
-
- _Ví dụ_: `'translations'`
|
|
976
|
-
|
|
977
|
-
- **typesDir**:
|
|
978
|
-
- _Kiểu_: `string`
|
|
979
|
-
- _Mặc định_: `'types'`
|
|
980
|
-
- _Mô tả_: Thư mục để lưu trữ các kiểu của từ điển.
|
|
981
|
-
- _Ví dụ_: `'intlayer-types'`
|
|
982
|
-
|
|
983
|
-
- **mainDir**:
|
|
984
|
-
- _Kiểu_: `string`
|
|
985
|
-
- _Mặc định_: `'main'`
|
|
986
|
-
- _Mô tả_: Thư mục nơi lưu trữ các tệp chính của ứng dụng.
|
|
987
|
-
- _Ví dụ_: `'intlayer-main'`
|
|
988
|
-
|
|
989
|
-
- **excludedPath**:
|
|
990
|
-
- _Kiểu_: `string[]`
|
|
991
|
-
- _Mặc định_: `['**/node_modules/**', '**/dist/**', '**/build/**', '**/.intlayer/**', '**/.next/**', '**/.nuxt/**', '**/.expo/**', '**/.vercel/**', '**/.turbo/**', '**/.tanstack/**']`
|
|
992
|
-
- _Mô tả_: Các thư mục bị loại trừ khỏi việc tìm kiếm nội dung.
|
|
993
|
-
- _Lưu ý_: Cài đặt này hiện chưa được sử dụng, nhưng dự kiến sẽ được triển khai trong tương lai.
|
|
994
|
-
|
|
995
|
-
- **formatCommand**:
|
|
996
|
-
- _Kiểu_: `string`
|
|
997
|
-
- _Mặc định_: `undefined`
|
|
998
|
-
- _Mô tả_: Lệnh để định dạng nội dung. Khi Intlayer ghi các tệp .content của bạn trên máy cục bộ, lệnh này sẽ được sử dụng để định dạng nội dung.
|
|
999
|
-
- _Ví dụ_: `'npx prettier --write "{{file}}" --log-level silent'` Sử dụng Prettier
|
|
1000
|
-
- _Ví dụ_: `'npx biome format "{{file}}" --write --log-level none'` Sử dụng Biome
|
|
1001
|
-
- _Ví dụ_: `'npx eslint --fix "{{file}}" --quiet'` Sử dụng ESLint
|
|
1002
|
-
- _Lưu ý_: Intlayer sẽ thay thế {{file}} bằng đường dẫn của tệp cần định dạng.
|
|
1003
|
-
- _Lưu ý_: Nếu không được thiết lập, Intlayer sẽ cố gắng tự động phát hiện lệnh định dạng. Bằng cách thử giải quyết các lệnh sau: prettier, biome, eslint.
|
|
1004
|
-
|
|
1005
|
-
### Cấu hình Từ điển
|
|
809
|
+
### Cấu hình từ điển (Dictionary Configuration)
|
|
1006
810
|
|
|
1007
811
|
Các cài đặt kiểm soát hoạt động của từ điển, bao gồm hành vi tự động điền và tạo nội dung.
|
|
1008
812
|
|
|
1009
|
-
Cấu hình từ điển này
|
|
813
|
+
Cấu hình từ điển này có hai mục đích chính:
|
|
814
|
+
|
|
815
|
+
1. **Giá trị mặc định**: Định nghĩa các giá trị mặc định khi tạo các tệp khai báo nội dung.
|
|
816
|
+
2. **Hành vi dự phòng**: Cho phép thiết lập hành vi của các hoạt động từ điển trên toàn cầu, cung cấp các giá trị dự phòng khi các trường cụ thể không được định nghĩa.
|
|
817
|
+
|
|
818
|
+
Để biết thêm thông tin về cách áp dụng các tệp khai báo nội dung và giá trị cấu hình, hãy xem [tài liệu tệp nội dung](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/content_file.md).
|
|
819
|
+
|
|
820
|
+
| Trường | Kiểu | Mô tả | Ví dụ | Lưu ý |
|
|
821
|
+
| --------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
822
|
+
| `fill` | `boolean | FilePathPattern | Partial<Record<Locale, boolean | FilePathPattern>>` | Kiểm soát cách tạo các tệp đầu ra tự động điền (dịch bằng AI). Mặc định: `true` | Xem ví dụ bên dưới | `true`: đường dẫn mặc định (cùng tệp với nguồn). `false`: tắt. Các mẫu chuỗi/hàm tạo các tệp theo từng ngôn ngữ. Đối tượng theo từng ngôn ngữ: mỗi ngôn ngữ ánh xạ tới mẫu riêng; `false` sẽ bỏ qua ngôn ngữ đó. Việc bao gồm biến `{{locale}}` sẽ kích hoạt việc tạo theo từng ngôn ngữ. `fill` ở cấp độ từ điển luôn được ưu tiên hơn cấu hình toàn cầu này. |
|
|
823
|
+
| `importMode` | `'static' | 'dynamic' | 'fetch'` | Kiểm soát cách nhập từ điển. Mặc định: `'static'` | `'dynamic'` | `'static'`: Được nhập tĩnh. `'dynamic'`: Được nhập động qua 'Suspense'. `'fetch'`: Được truy xuất động qua 'Live Sync API'. Không ảnh hưởng đến `getIntlayer`, `getDictionary`, `useDictionary`, v.v. |
|
|
824
|
+
| `location` | `'local' | 'remote' | 'hybrid' | string` | Nơi lưu trữ từ điển. Mặc định: `'local'` | `'remote'` | `'local'`: hệ thống tệp. `'remote'`: Intlayer CMS. `'hybrid'`: cả hai. |
|
|
825
|
+
| `contentAutoTransformation` | `boolean` | Có nên tự động chuyển đổi các tệp nội dung hay không (ví dụ: từ Markdown sang HTML). Mặc định: `false` | `true` | Hữu ích để xử lý các trường Markdown qua @intlayer/markdown. |
|
|
826
|
+
|
|
827
|
+
**Ví dụ về `fill`**:
|
|
828
|
+
|
|
829
|
+
```ts
|
|
830
|
+
dictionary: {
|
|
831
|
+
fill: {
|
|
832
|
+
en: '/locales/en/{{key}}.content.json',
|
|
833
|
+
fr: ({ key }) => `/locales/fr/${key}.content.json`,
|
|
834
|
+
es: false,
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
```
|
|
838
|
+
|
|
839
|
+
---
|
|
840
|
+
|
|
841
|
+
### Cấu hình AI (AI Configuration)
|
|
842
|
+
|
|
843
|
+
Định nghĩa các cài đặt cho các tính năng được hỗ trợ bởi AI của Intlayer, chẳng hạn như bản dịch build.
|
|
1010
844
|
|
|
1011
|
-
|
|
1012
|
-
|
|
845
|
+
| Trường | Kiểu | Mô tả | Ví dụ | Lưu ý |
|
|
846
|
+
| -------------------- | ---------------------- | ------------------------------------------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
|
847
|
+
| `provider` | `string` | Nhà cung cấp AI sẽ sử dụng. | `'openai'`, `'anthropic'`, `'googlevertex'` | |
|
|
848
|
+
| `model` | `string` | Model AI sẽ sử dụng. | `'gpt-4o'`, `'claude-3-5-sonnet-20240620'` | |
|
|
849
|
+
| `apiKey` | `string` | API key cho nhà cung cấp đã chọn. | `process.env.OPENAI_API_KEY` | |
|
|
850
|
+
| `applicationContext` | `string` | Ngữ cảnh bổ sung về ứng dụng của bạn để cải thiện độ chính xác của bản dịch AI. | `'Nền tảng học tập cho trẻ em.'` | |
|
|
851
|
+
| `baseURL` | `string` | URL đường dẫn cơ sở tùy chọn cho các cuộc gọi API. | | Hữu ích nếu bạn đang sử dụng proxy hoặc triển khai AI cục bộ. |
|
|
852
|
+
| `dataSerialization` | `'json' | 'toon'` | Định nghĩa cách gửi dữ liệu cho AI. Mặc định: `'json'` | `'json'` | `'json'`: mạnh mẽ và chính xác hơn. `'toon'`: tiêu tốn ít token hơn nhưng có thể kém ổn định hơn. |
|
|
1013
853
|
|
|
1014
|
-
|
|
854
|
+
---
|
|
855
|
+
|
|
856
|
+
### Cấu hình build (Build Configuration)
|
|
857
|
+
|
|
858
|
+
Các cài đặt của quá trình build và tối ưu hóa Intlayer.
|
|
859
|
+
|
|
860
|
+
| Trường | Kiểu | Mô tả | Ví dụ | Lưu ý |
|
|
861
|
+
| -------------- | ------------------------ | ----------------------------------------------------------------------------------------------------------------- | ----- | ----- |
|
|
862
|
+
| `mode` | `'auto' | 'manual'` | Xác định xem Intlayer có nên chạy tự động trong các bước pre-build của ứng dụng hay không. Mặc định: `'auto'` | | |
|
|
863
|
+
| `optimize` | `boolean` | Xác định xem các từ điển đã biên dịch có nên được tối ưu hóa cho runtime không. Mặc định: `true` trong production | | |
|
|
864
|
+
| `outputFormat` | `('cjs' | 'esm')[]` | Định dạng đầu ra cho các tệp từ điển được tạo. Mặc định: `['cjs', 'esm']` | | |
|
|
865
|
+
| `checkTypes` | `boolean` | Xác định xem Intlayer có nên kiểm tra các kiểu trong các tệp được tạo hay không. Mặc định: `false` | | |
|
|
866
|
+
|
|
867
|
+
---
|
|
868
|
+
|
|
869
|
+
### Cấu hình hệ thống (System Configuration)
|
|
1015
870
|
|
|
1016
|
-
|
|
871
|
+
Các cài đặt này dành cho các trường hợp sử dụng nâng cao và cho cấu hình nội bộ của Intlayer.
|
|
1017
872
|
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
- **version**
|
|
873
|
+
| Trường | Kiểu | Mô tả | Mặc định |
|
|
874
|
+
| ------------------------- | -------- | ------------------------------------------- | --------------------------------- |
|
|
875
|
+
| `dictionariesDir` | `string` | Thư mục từ điển đã biên dịch. | `'.intlayer/dictionary'` |
|
|
876
|
+
| `moduleAugmentationDir` | `string` | Thư mục cho việc mở rộng module TypeScript. | `'.intlayer/types'` |
|
|
877
|
+
| `unmergedDictionariesDir` | `string` | Thư mục từ điển chưa hợp nhất. | `'.intlayer/unmerged_dictionary'` |
|
|
878
|
+
| `typesDir` | `string` | Thư mục các kiểu đã tạo. | `'.intlayer/types'` |
|
|
879
|
+
| `mainDir` | `string` | Thư mục tệp Intlayer chính. | `'.intlayer/main'` |
|
|
880
|
+
| `configDir` | `string` | Thư mục các tệp cấu hình đã biên dịch. | `'.intlayer/config'` |
|
|
881
|
+
| `cacheDir` | `string` | Thư mục các tệp bộ nhớ đệm. | `'.intlayer/cache'` |
|
|
1028
882
|
|
|
1029
883
|
---
|
|
1030
884
|
|
|
1031
|
-
### Cấu hình
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
- _Ví dụ_: `default`
|
|
1043
|
-
- _Lưu ý_: Chế độ của logger. Chế độ verbose sẽ ghi lại nhiều thông tin hơn, nhưng có thể được sử dụng cho mục đích gỡ lỗi. Chế độ disabled sẽ tắt logger.
|
|
1044
|
-
|
|
1045
|
-
- **prefix**:
|
|
1046
|
-
- _Kiểu_: `string`
|
|
1047
|
-
- _Mặc định_: `'[intlayer] '`
|
|
1048
|
-
- _Mô tả_: Tiền tố của logger.
|
|
1049
|
-
- _Ví dụ_: `'[my custom prefix] '`
|
|
1050
|
-
- _Lưu ý_: Tiền tố của logger.
|
|
1051
|
-
|
|
1052
|
-
### Cấu hình AI
|
|
1053
|
-
|
|
1054
|
-
Các cài đặt kiểm soát các tính năng AI của Intlayer, bao gồm nhà cung cấp, mô hình và khóa API.
|
|
1055
|
-
|
|
1056
|
-
Cấu hình này là tùy chọn nếu bạn đã đăng ký trên [Bảng điều khiển Intlayer](https://app.intlayer.org/project) bằng khóa truy cập. Intlayer sẽ tự động quản lý giải pháp AI hiệu quả và tiết kiệm chi phí nhất cho nhu cầu của bạn. Sử dụng các tùy chọn mặc định đảm bảo khả năng bảo trì lâu dài tốt hơn khi Intlayer liên tục cập nhật để sử dụng các mô hình phù hợp nhất.
|
|
1057
|
-
|
|
1058
|
-
Nếu bạn muốn sử dụng khóa API riêng hoặc mô hình cụ thể, bạn có thể định nghĩa cấu hình AI tùy chỉnh của mình.
|
|
1059
|
-
Cấu hình AI này sẽ được sử dụng toàn cục trong môi trường Intlayer của bạn. Các lệnh CLI sẽ sử dụng các cài đặt này làm mặc định cho các lệnh (ví dụ: `fill`), cũng như SDK, Visual Editor và CMS. Bạn có thể ghi đè các giá trị mặc định này cho các trường hợp sử dụng cụ thể bằng cách sử dụng các tham số lệnh.
|
|
1060
|
-
|
|
1061
|
-
Intlayer hỗ trợ nhiều nhà cung cấp AI để tăng tính linh hoạt và lựa chọn. Các nhà cung cấp hiện được hỗ trợ bao gồm:
|
|
1062
|
-
|
|
1063
|
-
- **OpenAI** (mặc định)
|
|
1064
|
-
- **Anthropic Claude**
|
|
1065
|
-
- **Mistral AI**
|
|
1066
|
-
- **DeepSeek**
|
|
1067
|
-
- **Google Gemini**
|
|
1068
|
-
- **Meta Llama**
|
|
1069
|
-
- **Ollama**
|
|
1070
|
-
- **OpenRouter**
|
|
1071
|
-
- **Alibaba Cloud**
|
|
1072
|
-
- **Fireworks**
|
|
1073
|
-
- **Hugging Face**
|
|
1074
|
-
- **Groq**
|
|
1075
|
-
- **Amazon Bedrock**
|
|
1076
|
-
- **Google AI Studio**
|
|
1077
|
-
- **Google Vertex**
|
|
1078
|
-
- **Together.ai**
|
|
1079
|
-
- **ollama**
|
|
1080
|
-
|
|
1081
|
-
#### Thuộc tính
|
|
1082
|
-
|
|
1083
|
-
- **provider**:
|
|
1084
|
-
- _Kiểu_: `string`
|
|
1085
|
-
- _Mặc định_: `'openai'`
|
|
1086
|
-
- _Mô tả_: Nhà cung cấp được sử dụng cho các tính năng AI của Intlayer.
|
|
1087
|
-
- _Tùy chọn_: `'openai'`, `'anthropic'`, `'mistral'`, `'deepseek'`, `'gemini'`, `'ollama'`, `'openrouter'`, `'alibaba'`, `'fireworks'`, `'groq'`, `'huggingface'`, `'bedrock'`, `'googleaistudio'`, `'googlevertex'`, `'togetherai'`
|
|
1088
|
-
- _Ví dụ_: `'anthropic'`
|
|
1089
|
-
- _Lưu ý_: Các nhà cung cấp khác nhau có thể yêu cầu các khóa API khác nhau và có các mô hình giá khác nhau.
|
|
1090
|
-
|
|
1091
|
-
- **model**:
|
|
1092
|
-
- _Kiểu_: `string`
|
|
1093
|
-
- _Mặc định_: Không có
|
|
1094
|
-
- _Mô tả_: Mô hình được sử dụng cho các tính năng AI của Intlayer.
|
|
1095
|
-
- _Ví dụ_: `'gpt-4o-2024-11-20'`
|
|
1096
|
-
- _Lưu ý_: Mô hình cụ thể được sử dụng sẽ khác nhau tùy theo nhà cung cấp.
|
|
1097
|
-
|
|
1098
|
-
- **temperature**:
|
|
1099
|
-
- _Kiểu_: `number`
|
|
1100
|
-
- _Mặc định_: Không có
|
|
1101
|
-
- _Mô tả_: Tham số temperature điều khiển độ ngẫu nhiên trong các phản hồi của AI.
|
|
1102
|
-
- _Ví dụ_: `0.1`
|
|
1103
|
-
- _Lưu ý_: Temperature cao hơn sẽ làm AI sáng tạo hơn và ít dự đoán được hơn.
|
|
1104
|
-
|
|
1105
|
-
- **apiKey**:
|
|
1106
|
-
- _Kiểu_: `string`
|
|
1107
|
-
- _Mặc định_: Không có
|
|
1108
|
-
- _Mô tả_: Khóa API của bạn cho nhà cung cấp đã chọn.
|
|
1109
|
-
- _Ví dụ_: `process.env.OPENAI_API_KEY`
|
|
1110
|
-
- _Lưu ý_: Quan trọng: Các khóa API cần được giữ bí mật và không được chia sẻ công khai. Vui lòng đảm bảo giữ chúng ở một vị trí an toàn, chẳng hạn như biến môi trường.
|
|
1111
|
-
|
|
1112
|
-
- **applicationContext**:
|
|
1113
|
-
- _Kiểu_: `string`
|
|
1114
|
-
- _Mặc định_: Không có
|
|
1115
|
-
- _Mô tả_: Cung cấp bối cảnh bổ sung về ứng dụng của bạn cho mô hình AI, giúp nó tạo ra các bản dịch chính xác hơn và phù hợp với ngữ cảnh. Điều này có thể bao gồm thông tin về lĩnh vực ứng dụng, đối tượng mục tiêu, giọng điệu hoặc thuật ngữ cụ thể của bạn.
|
|
1116
|
-
|
|
1117
|
-
- **baseURL**:
|
|
1118
|
-
- _Kiểu_: `string`
|
|
1119
|
-
- _Mặc định_: Không có
|
|
1120
|
-
- _Mô tả_: URL cơ sở cho API AI.
|
|
1121
|
-
- _Ví dụ_: `'https://api.openai.com/v1'`
|
|
1122
|
-
- _Lưu ý_: Có thể được sử dụng để trỏ đến một điểm cuối API AI cục bộ hoặc tùy chỉnh.
|
|
1123
|
-
|
|
1124
|
-
- **dataSerialization**:
|
|
1125
|
-
- _Loại_: `'json' | 'toon'`
|
|
1126
|
-
- _Mặc định_: `'json'`
|
|
1127
|
-
- _Mô tả_: Định dạng tuần tự hóa dữ liệu được sử dụng cho các tính năng AI của Intlayer.
|
|
1128
|
-
- _Ví dụ_: `'toon'`
|
|
1129
|
-
- _Ghi chú_: `json`: Tiêu chuẩn, đáng tin cậy; sử dụng nhiều token hơn. `toon`: Ít token hơn, kém nhất quán hơn JSON.
|
|
1130
|
-
|
|
1131
|
-
### Cấu hình Build
|
|
1132
|
-
|
|
1133
|
-
Các thiết lập kiểm soát cách Intlayer tối ưu hóa và xây dựng tính quốc tế hóa của ứng dụng bạn.
|
|
1134
|
-
|
|
1135
|
-
Các tùy chọn build áp dụng cho các plugin `@intlayer/babel` và `@intlayer/swc`.
|
|
1136
|
-
|
|
1137
|
-
> Ở chế độ phát triển, Intlayer sử dụng các import tĩnh cho từ điển để đơn giản hóa trải nghiệm phát triển.
|
|
1138
|
-
|
|
1139
|
-
> Khi được tối ưu hóa, Intlayer sẽ thay thế các lệnh gọi từ điển để tối ưu hóa việc chia nhỏ, do đó gói cuối cùng chỉ nhập các từ điển thực sự được sử dụng.
|
|
1140
|
-
|
|
1141
|
-
#### Thuộc tính
|
|
1142
|
-
|
|
1143
|
-
- **mode**:
|
|
1144
|
-
- _Kiểu_: `'auto' | 'manual'`
|
|
1145
|
-
- _Mặc định_: `'auto'`
|
|
1146
|
-
- _Mô tả_: Điều khiển chế độ build.
|
|
1147
|
-
- _Ví dụ_: `'manual'`
|
|
1148
|
-
- _Lưu ý_: Nếu 'auto', build sẽ được bật tự động khi ứng dụng được build.
|
|
1149
|
-
- _Lưu ý_: Nếu 'manual', build sẽ chỉ được đặt khi lệnh build được thực thi.
|
|
1150
|
-
- _Lưu ý_: Có thể được sử dụng để vô hiệu hóa build từ điển, ví dụ khi nên tránh thực thi trong môi trường Node.js.
|
|
1151
|
-
|
|
1152
|
-
- **optimize**:
|
|
1153
|
-
- _Kiểu_: `boolean`
|
|
1154
|
-
- _Mặc định_: `process.env.NODE_ENV === 'production'`
|
|
1155
|
-
- _Mô tả_: Điều khiển việc có nên tối ưu hóa quá trình build hay không.
|
|
1156
|
-
- _Ví dụ_: `true`
|
|
1157
|
-
- _Lưu ý_: Khi được bật, Intlayer sẽ thay thế tất cả các lệnh gọi từ điển để tối ưu hóa việc chia nhỏ. Bằng cách đó, gói cuối cùng sẽ chỉ nhập các từ điển được sử dụng. Tất cả các import sẽ vẫn giữ ở dạng import tĩnh để tránh xử lý bất đồng bộ khi tải các từ điển.
|
|
1158
|
-
- _Lưu ý_: Intlayer sẽ thay thế tất cả các lệnh gọi `useIntlayer` bằng chế độ được định nghĩa trong tùy chọn `importMode` và `getIntlayer` bằng `getDictionary`.
|
|
1159
|
-
- _Lưu ý_: Tùy chọn này dựa vào các plugin `@intlayer/babel` và `@intlayer/swc`.
|
|
1160
|
-
- _Lưu ý_: Đảm bảo tất cả các khóa được khai báo tĩnh trong các lệnh gọi `useIntlayer`. Ví dụ: `useIntlayer('navbar')`.
|
|
1161
|
-
|
|
1162
|
-
- **checkTypes**:
|
|
1163
|
-
- _Loại_: `boolean`
|
|
1164
|
-
- _Mặc định_: `false`
|
|
1165
|
-
- _Mô tả_: Cho biết liệu quá trình xây dựng có nên kiểm tra các kiểu TypeScript và ghi lại lỗi hay không.
|
|
1166
|
-
- _Ghi chú_: Điều này có thể làm chậm quá trình xây dựng.
|
|
1167
|
-
|
|
1168
|
-
- **outputFormat**:
|
|
1169
|
-
- _Kiểu_: `'esm' | 'cjs'`
|
|
1170
|
-
- _Mặc định_: `'esm'`
|
|
1171
|
-
- _Mô tả_: Điều khiển định dạng đầu ra của các từ điển.
|
|
1172
|
-
- _Ví dụ_: `'cjs'`
|
|
1173
|
-
- _Lưu ý_: Định dạng đầu ra của các từ điển.
|
|
1174
|
-
|
|
1175
|
-
- **traversePattern**:
|
|
1176
|
-
- _Kiểu_: `string[]`
|
|
1177
|
-
- _Mặc định_: `['**\/*.{js,ts,mjs,cjs,jsx,tsx}', '!**\/node_modules/**']`
|
|
1178
|
-
- _Mô tả_: Các mẫu định nghĩa những tệp nào sẽ được duyệt trong quá trình tối ưu hóa.
|
|
1179
|
-
- _Ví dụ_: `['src/**\/*.{ts,tsx}', '../ui-library/**\/*.{ts,tsx}', '!**/node_modules/**']`
|
|
1180
|
-
- _Lưu ý_: Sử dụng để giới hạn tối ưu hóa chỉ cho các tệp mã liên quan và cải thiện hiệu suất xây dựng.
|
|
1181
|
-
- _Lưu ý_: Tùy chọn này sẽ bị bỏ qua nếu `optimize` bị vô hiệu hóa.
|
|
1182
|
-
- _Lưu ý_: Sử dụng mẫu glob.
|
|
885
|
+
### Cấu hình trình biên dịch (Compiler Configuration)
|
|
886
|
+
|
|
887
|
+
Cài đặt cho trình biên dịch Intlayer (`intlayer compiler`).
|
|
888
|
+
|
|
889
|
+
| Trường | Kiểu | Mô tả | Mặc định |
|
|
890
|
+
| --------------------- | ------------------------ | --------------------------------------------------------------------------------------------- | -------- |
|
|
891
|
+
| `enabled` | `boolean` | Xác định xem trình biên dịch có hoạt động không. | `false` |
|
|
892
|
+
| `output` | `string | Function` | Đường dẫn đầu ra cho các từ điển được trích xuất. | |
|
|
893
|
+
| `saveComponents` | `boolean` | Xác định xem các tệp nguồn gốc có nên được ghi đè bằng các phiên bản đã chuyển đổi hay không. | `false` |
|
|
894
|
+
| `noMetadata` | `boolean` | Nếu là `true`, trình biên dịch sẽ không bao gồm metadata trong các tệp được tạo. | `false` |
|
|
895
|
+
| `dictionaryKeyPrefix` | `string` | Tiền tố khóa từ điển tùy chọn. | `''` |
|
|
1183
896
|
|
|
1184
897
|
---
|
|
1185
898
|
|
|
1186
|
-
### Cấu hình
|
|
1187
|
-
|
|
1188
|
-
Các cài đặt
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
- _Lưu ý_: Nếu đúng (true), trình biên dịch sẽ thay thế các tệp gốc bằng các tệp đã chuyển đổi. Bằng cách đó, trình biên dịch chỉ có thể được chạy một lần để chuyển đổi ứng dụng, sau đó có thể được gỡ bỏ.
|
|
1211
|
-
|
|
1212
|
-
- **transformPattern**:
|
|
1213
|
-
- _Kiểu_: `string | string[]`
|
|
1214
|
-
- _Mặc định_: `['**/*.{ts,tsx,jsx,js,cjs,mjs,svelte,vue}', '!**/node_modules/**']`
|
|
1215
|
-
- _Mô tả_: Các mẫu xác định những tệp nào akan được duyệt qua trong quá trình tối ưu hóa.
|
|
1216
|
-
- _Ví dụ_: `['src/**/*.{ts,tsx}', '!**/node_modules/**']`
|
|
1217
|
-
- _Lưu ý_: Sử dụng điều này để giới hạn tối ưu hóa cho các tệp mã liên quan và cải thiện hiệu suất xây dựng.
|
|
1218
|
-
|
|
1219
|
-
- **excludePattern**:
|
|
1220
|
-
- _Kiểu_: `string | string[]`
|
|
1221
|
-
- _Mặc định_: `['**/node_modules/**']`
|
|
1222
|
-
- _Mô tả_: Các mẫu xác định những tệp nào sẽ bị loại trừ trong quá trình tối ưu hóa.
|
|
1223
|
-
- _Ví dụ_: `['**/node_modules/**', '!**/node_modules/react/**']`
|
|
1224
|
-
|
|
1225
|
-
- **output**:
|
|
1226
|
-
- _Kiểu_: `FilePathPattern`
|
|
1227
|
-
- _Mặc định_: `undefined`
|
|
1228
|
-
- _Mô tả_: Xác định đường dẫn tệp đầu ra. Thay thế `outputDir`. Hỗ trợ các biến động thông qua template string hoặc hàm. Các biến được hỗ trợ: `{{fileName}}`, `{{key}}`, `{{locale}}`, `{{extension}}`, `{{componentFileName}}`, `{{componentExtension}}`, `{{format}}`, `{{componentFormat}}`, và `{{componentDirPath}}`.
|
|
1229
|
-
- _Lưu ý_: Các đường dẫn bắt đầu bằng `./` được giải quyết tương đối so với thư mục component. Các đường dẫn bắt đầu bằng `/` được giải quyết tương đối so với thư mục gốc của dự án (`baseDir`).
|
|
1230
|
-
- _Lưu ý_: Việc bao gồm biến `{{locale}}` trong đường dẫn sẽ cho phép tạo các từ điển được tách biệt theo ngôn ngữ.
|
|
1231
|
-
- _Ví dụ_:
|
|
1232
|
-
- **Tạo các tệp đa ngôn ngữ bên cạnh component**:
|
|
1233
|
-
- Chuỗi: `'./{{fileName}}{{extension}}'`
|
|
1234
|
-
- Hàm: `({ fileName, extension }) => \`./${fileName}${extension}\``
|
|
1235
|
-
|
|
1236
|
-
- **Xuất các tệp JSON tập trung cho mỗi ngôn ngữ**:
|
|
1237
|
-
- Chuỗi: `'/locales/{{locale}}/{{key}}.content.json'`
|
|
1238
|
-
- Hàm: `({ key, locale }) => \`/locales/${locale}/${key}.content.json\``
|
|
1239
|
-
|
|
1240
|
-
- **noMetadata**:
|
|
1241
|
-
- _Kiểu_: `boolean`
|
|
1242
|
-
- _Mặc định_: `false`
|
|
1243
|
-
- _Mô tả_: Cho biết liệu siêu dữ liệu có nên được lưu trong tệp hay không. Nếu true, trình biên dịch sẽ không lưu siêu dữ liệu của từ điển (khóa, trình bao bọc nội dung). Hữu ích cho đầu ra JSON i18next hoặc ICU MessageFormat cho mỗi ngôn ngữ.
|
|
1244
|
-
- _Ghi chú_: Hữu ích nếu được sử dụng với plugin `loadJSON`.
|
|
1245
|
-
- _Ví dụ_:
|
|
1246
|
-
Nếu `true` :
|
|
1247
|
-
|
|
1248
|
-
```json
|
|
1249
|
-
{
|
|
1250
|
-
"key": "value"
|
|
1251
|
-
}
|
|
1252
|
-
```
|
|
1253
|
-
|
|
1254
|
-
Nếu `false`:
|
|
1255
|
-
|
|
1256
|
-
```json
|
|
1257
|
-
{
|
|
1258
|
-
"key": "value",
|
|
1259
|
-
"content": {
|
|
1260
|
-
"key": "value"
|
|
1261
|
-
}
|
|
1262
|
-
}
|
|
1263
|
-
```
|
|
899
|
+
### Cấu hình trình ghi nhật ký (Logger Configuration)
|
|
900
|
+
|
|
901
|
+
Các cài đặt để tùy chỉnh đầu ra nhật ký của Intlayer.
|
|
902
|
+
|
|
903
|
+
| Trường | Kiểu | Mô tả | Mặc định |
|
|
904
|
+
| -------- | ---------------------------------------------- | -------------------------- | -------------- |
|
|
905
|
+
| `mode` | `'default' | 'verbose' | 'disabled'` | Chế độ ghi nhật ký. | `'default'` |
|
|
906
|
+
| `prefix` | `string` | Tiền tố thông báo nhật ký. | `'[intlayer]'` |
|
|
907
|
+
|
|
908
|
+
---
|
|
909
|
+
|
|
910
|
+
### Schema tùy chỉnh (Custom Schemas)
|
|
911
|
+
|
|
912
|
+
| Trường | Kiểu | Mô tả |
|
|
913
|
+
| --------- | --------------------------- | ---------------------------------------------------------------------------- |
|
|
914
|
+
| `schemas` | `Record<string, ZodSchema>` | Cho phép bạn định nghĩa các Zod schema để xác thực cấu trúc của các từ điển. |
|
|
915
|
+
|
|
916
|
+
---
|
|
917
|
+
|
|
918
|
+
### Plugin (Plugins)
|
|
919
|
+
|
|
920
|
+
| Trường | Kiểu | Mô tả |
|
|
921
|
+
| --------- | ------------------ | -------------------------------------------- |
|
|
922
|
+
| `plugins` | `IntlayerPlugin[]` | Danh sách các plugin Intlayer cần kích hoạt. |
|