@intlayer/docs 8.4.4 → 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.
Files changed (107) hide show
  1. package/dist/cjs/_virtual/_rolldown/runtime.cjs +29 -0
  2. package/dist/cjs/blog.cjs +21 -1
  3. package/dist/cjs/blog.cjs.map +1 -1
  4. package/dist/cjs/common.cjs +81 -1
  5. package/dist/cjs/common.cjs.map +1 -0
  6. package/dist/cjs/doc.cjs +21 -1
  7. package/dist/cjs/doc.cjs.map +1 -1
  8. package/dist/cjs/frequentQuestions.cjs +21 -1
  9. package/dist/cjs/frequentQuestions.cjs.map +1 -1
  10. package/dist/cjs/generated/blog.entry.cjs +572 -1
  11. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  12. package/dist/cjs/generated/docs.entry.cjs +3032 -1
  13. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  14. package/dist/cjs/generated/frequentQuestions.entry.cjs +352 -1
  15. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  16. package/dist/cjs/generated/legal.entry.cjs +72 -1
  17. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  18. package/dist/cjs/index.cjs +34 -1
  19. package/dist/cjs/legal.cjs +21 -1
  20. package/dist/cjs/legal.cjs.map +1 -1
  21. package/dist/esm/blog.mjs +14 -1
  22. package/dist/esm/blog.mjs.map +1 -1
  23. package/dist/esm/common.mjs +67 -1
  24. package/dist/esm/common.mjs.map +1 -1
  25. package/dist/esm/doc.mjs +14 -1
  26. package/dist/esm/doc.mjs.map +1 -1
  27. package/dist/esm/frequentQuestions.mjs +14 -1
  28. package/dist/esm/frequentQuestions.mjs.map +1 -1
  29. package/dist/esm/generated/blog.entry.mjs +570 -1
  30. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  31. package/dist/esm/generated/docs.entry.mjs +3030 -1
  32. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  33. package/dist/esm/generated/frequentQuestions.entry.mjs +350 -1
  34. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  35. package/dist/esm/generated/legal.entry.mjs +70 -1
  36. package/dist/esm/generated/legal.entry.mjs.map +1 -1
  37. package/dist/esm/index.mjs +6 -1
  38. package/dist/esm/legal.mjs +14 -1
  39. package/dist/esm/legal.mjs.map +1 -1
  40. package/dist/types/blog.d.ts +2 -2
  41. package/dist/types/common.d.ts +37 -2
  42. package/dist/types/common.d.ts.map +1 -0
  43. package/dist/types/doc.d.ts +2 -2
  44. package/dist/types/frequentQuestions.d.ts +2 -2
  45. package/dist/types/generated/blog.entry.d.ts +35 -2
  46. package/dist/types/generated/blog.entry.d.ts.map +1 -0
  47. package/dist/types/generated/docs.entry.d.ts +158 -2
  48. package/dist/types/generated/docs.entry.d.ts.map +1 -0
  49. package/dist/types/generated/frequentQuestions.entry.d.ts +24 -2
  50. package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -0
  51. package/dist/types/generated/legal.entry.d.ts +10 -2
  52. package/dist/types/generated/legal.entry.d.ts.map +1 -0
  53. package/dist/types/legal.d.ts +2 -2
  54. package/docs/ar/configuration.md +520 -722
  55. package/docs/ar/intlayer_with_storybook.md +521 -0
  56. package/docs/bn/configuration.md +922 -0
  57. package/docs/bn/intlayer_with_hono.md +428 -0
  58. package/docs/de/configuration.md +369 -743
  59. package/docs/de/intlayer_with_storybook.md +521 -0
  60. package/docs/en/configuration.md +181 -507
  61. package/docs/en/intlayer_with_storybook.md +521 -0
  62. package/docs/en-GB/configuration.md +456 -657
  63. package/docs/en-GB/intlayer_with_storybook.md +521 -0
  64. package/docs/es/configuration.md +379 -754
  65. package/docs/es/intlayer_with_storybook.md +521 -0
  66. package/docs/fr/configuration.md +376 -757
  67. package/docs/fr/intlayer_with_storybook.md +521 -0
  68. package/docs/hi/configuration.md +532 -728
  69. package/docs/hi/intlayer_with_storybook.md +521 -0
  70. package/docs/id/configuration.md +371 -684
  71. package/docs/id/intlayer_with_storybook.md +521 -0
  72. package/docs/it/configuration.md +397 -775
  73. package/docs/it/intlayer_with_storybook.md +521 -0
  74. package/docs/ja/configuration.md +525 -724
  75. package/docs/ja/intlayer_with_storybook.md +521 -0
  76. package/docs/ko/configuration.md +525 -724
  77. package/docs/ko/intlayer_with_storybook.md +521 -0
  78. package/docs/pl/configuration.md +430 -734
  79. package/docs/pl/intlayer_with_storybook.md +521 -0
  80. package/docs/pt/configuration.md +375 -746
  81. package/docs/pt/intlayer_with_storybook.md +521 -0
  82. package/docs/ru/configuration.md +532 -701
  83. package/docs/ru/intlayer_with_storybook.md +521 -0
  84. package/docs/tr/configuration.md +527 -719
  85. package/docs/tr/intlayer_with_storybook.md +521 -0
  86. package/docs/uk/configuration.md +425 -744
  87. package/docs/uk/intlayer_with_storybook.md +521 -0
  88. package/docs/ur/configuration.md +922 -0
  89. package/docs/ur/intlayer_with_hono.md +428 -0
  90. package/docs/vi/configuration.md +412 -753
  91. package/docs/vi/intlayer_with_storybook.md +521 -0
  92. package/docs/zh/configuration.md +521 -714
  93. package/docs/zh/intlayer_with_storybook.md +521 -0
  94. package/package.json +6 -6
  95. package/src/generated/docs.entry.ts +20 -0
  96. package/dist/cjs/common-a-l0ULP6.cjs +0 -2
  97. package/dist/cjs/common-a-l0ULP6.cjs.map +0 -1
  98. package/dist/types/blog.entry-D5IgxPXY.d.ts +0 -35
  99. package/dist/types/blog.entry-D5IgxPXY.d.ts.map +0 -1
  100. package/dist/types/common-B45TZvLQ.d.ts +0 -37
  101. package/dist/types/common-B45TZvLQ.d.ts.map +0 -1
  102. package/dist/types/docs.entry-CergjAYt.d.ts +0 -157
  103. package/dist/types/docs.entry-CergjAYt.d.ts.map +0 -1
  104. package/dist/types/frequentQuestions.entry-BHglVS-U.d.ts +0 -24
  105. package/dist/types/frequentQuestions.entry-BHglVS-U.d.ts.map +0 -1
  106. package/dist/types/legal.entry-B5Lg5eeH.d.ts +0 -10
  107. package/dist/types/legal.entry-B5Lg5eeH.d.ts.map +0 -1
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  createdAt: 2024-08-13
3
- updatedAt: 2026-03-12
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 thiết lập và tùy chọn khác nhau để tùy chỉnh Intlayer theo nhu cầu của bạn.
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
- - Thiết lập
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: Di chuyển 'baseDir' từ cấu hình 'content' sang cấu hình 'system'
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 các tùy chọn trình biên dịch
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: Di chuyển cấu hình build importMode sang cấu hình từ điển.
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. Di chuyển các đường dẫn nội bộ sang thuộc tính `system`. Thêm `codeDir` để tách các tệp nội dung khỏi việc chuyển đổi mã.
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 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: Loại bỏ trường `dictionaryOutput` và trường `i18nextResourcesDir`
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 khẩu `live`
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` và thêm các trường `liveSyncPort` và `liveSyncURL`
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 giá trị mặc định của contentDir từ `['src']` thành `['.']`
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 nhiều khía cạnh khác nhau của plugin, chẳng hạn như quốc tế hóa, 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.
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
- ## Hỗ trợ tệp cấu hình
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
- * Example Intlayer configuration file showing all available options.
131
+ * 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
- * Configuration for internationalization settings.
135
+ * Cấu hình cài đặt quốc tế hóa.
124
136
  */
125
137
  internationalization: {
126
138
  /**
127
- * List of supported locales in the application.
128
- * Default: [Locales.ENGLISH]
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
- * List of required locales that must be defined in every dictionary.
134
- * If empty, all locales are required in `strict` mode.
135
- * Default: []
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
- * Strictness level for internationalized content.
141
- * - "strict": Errors if any declared locale is missing or undeclared.
142
- * - "inclusive": Warnings if a declared locale is missing.
143
- * - "loose": Accepts any existing locale.
144
- * Default: "inclusive"
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
- * Default locale used as a fallback if the requested locale is not found.
150
- * Default: Locales.ENGLISH
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
- * Settings that control dictionary operations and fallback behavior.
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
- * Controls how dictionaries are imported.
161
- * - "static": Statically imported at build time.
162
- * - "dynamic": Dynamically imported using Suspense.
163
- * - "fetch": Fetched dynamically via the live sync API.
164
- * Default: "static"
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
- * Strategy for auto-filling missing translations using AI.
170
- * Can be a boolean or a path pattern to store filled content.
171
- * Default: true
181
+ * Chiến lược tự động điền các bản dịch còn thiếu bằng AI.
182
+ * thể 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
- * Physical location of the dictionary files.
177
- * - "local": Stored in the local filesystem.
178
- * - "remote": Stored in the Intlayer CMS.
179
- * - "hybrid": Stored in the local filesystem and the Intlayer CMS.
180
- * - "plugin" (or any custom string): Provided by a plugin or a custom source.
181
- * Default: "local"
188
+ * Vị trí vật 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ộ 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
- * Whether to automatically transform content (e.g., Markdown to HTML).
187
- * Default: false
198
+ * Nội dung nên được tự động chuyển đổi hay không ( dụ: Markdown sang HTML).
199
+ * Mặc định: false
188
200
  */
189
201
  contentAutoTransformation: false,
190
202
  },
191
203
 
192
204
  /**
193
- * Routing and middleware configuration.
205
+ * Cấu hình routing và middleware.
194
206
  */
195
207
  routing: {
196
208
  /**
197
- * Locale routing strategy.
198
- * - "prefix-no-default": Prefix all except the default locale (e.g., /dashboard, /fr/dashboard).
199
- * - "prefix-all": Prefix all locales (e.g., /en/dashboard, /fr/dashboard).
200
- * - "no-prefix": No locale in the URL.
201
- * - "search-params": Use ?locale=...
202
- * Default: "prefix-no-default"
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 ( dụ: /dashboard, /fr/dashboard).
211
+ * - "prefix-all": Thêm tiền tố cho tất cả các ngôn ngữ ( dụ: /en/dashboard, /fr/dashboard).
212
+ * - "no-prefix": Không 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
- * Where to store the user's selected locale.
208
- * Options: 'cookie', 'localStorage', 'sessionStorage', 'header', or an array of these.
209
- * Default: ['cookie', 'header']
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
- * Base path for the application URLs.
215
- * Default: ""
226
+ * Đường dẫn sở cho các URL của ứng dụng.
227
+ * Mặc định: ""
216
228
  */
217
229
  basePath: "",
218
230
 
219
231
  /**
220
- * Custom URL rewriting rules for locale-specific paths.
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
- * Settings for finding and processing content files.
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
- * File extensions to scan for dictionaries.
236
- * Default: ['.content.ts', '.content.js', '.content.json', etc.]
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
- * Directories where .content files are located.
242
- * Default: ["."]
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
- * Directories where source code is located.
248
- * Used for build optimization and code transformation.
249
- * Default: ["."]
259
+ * Nơi chứa nguồn.
260
+ * Được sử dụng để tối ưu hóa build chuyển đổi mã.
261
+ * Mặc định: ["."]
250
262
  */
251
263
  codeDir: ["src"],
252
264
 
253
265
  /**
254
- * Patterns to exclude from scanning.
255
- * Default: ['node_modules', '.intlayer', etc.]
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
- * Whether to watch for changes and rebuild dictionaries in development.
261
- * Default: true in development
272
+ * theo dõi các thay đổi 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
- * Command to format newly created / updated .content files.
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 configuration.
284
+ * Cấu hình Trình chỉnh sửa trực quan (Visual Editor).
273
285
  */
274
286
  editor: {
275
287
  /**
276
- * Whether the visual editor is enabled.
277
- * Default: false
288
+ * 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 of your application for origin validation.
283
- * Default: ""
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
- * Port for the local editor server.
289
- * Default: 8000
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
- * Public URL for the editor.
295
- * Default: "http://localhost:8000"
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 URL.
301
- * Default: "https://app.intlayer.org"
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 URL.
307
- * Default: "https://back.intlayer.org"
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
- * Whether to enable real-time content synchronization.
313
- * Default: false
324
+ * 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
- * AI-powered translation and generation settings.
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 provider to use.
324
- * Options: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai'
325
- * Default: 'openai'
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 to use from the selected provider.
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
- * Provider API key.
347
+ * API key của nhà cung cấp.
336
348
  */
337
349
  apiKey: process.env.OPENAI_API_KEY,
338
350
 
339
351
  /**
340
- * Global context to guide the AI in generating translations.
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: "This is a travel booking application.",
354
+ applicationContext: "Đây một ứng dụng đặt vé du lịch.",
343
355
 
344
356
  /**
345
- * Base URL for the AI API.
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": Tiêu chuẩn, đáng tin cậy; tiêu tốn nhiều token hơn.
354
- * - "toon": Ít token hơn, kém nhất quán hơn JSON.
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, 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
- * Build and optimization settings.
374
+ * Các cài đặt build và tối ưu hóa.
363
375
  */
364
376
  build: {
365
377
  /**
366
- * Build execution mode.
367
- * - "auto": Automatic build during app build.
368
- * - "manual": Requires explicit build command.
369
- * Default: "auto"
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
- * Whether to optimize the final bundle by pruning unused dictionaries.
375
- * Default: true in production
386
+ * 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
- * Output format for generated dictionary files.
381
- * Default: ['esm', 'cjs']
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
- * Indicates if the build should check TypeScript types.
387
- * Default: false
398
+ * Xác định xem tiến trình build 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 configuration.
405
+ * Cấu hình trình ghi nhật ký (Logger).
394
406
  */
395
407
  log: {
396
408
  /**
397
- * Logging level.
398
- * - "default": Standard logging.
399
- * - "verbose": Detailed debug logging.
400
- * - "disabled": No logging.
401
- * Default: "default"
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
- * Prefix for all log messages.
407
- * Default: "[intlayer]"
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
- * System configuration (Advanced use cases)
425
+ * Cấu hình hệ thống (Để sử dụng nâng cao)
414
426
  */
415
427
  system: {
416
428
  /**
417
- * Directory for storing localization dictionaries.
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
- * Directory for module augmentation.
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
- * Directory for storing unmerged dictionaries.
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
- * Directory for storing dictionary types.
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
- * Directory where main application files are stored.
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
- * Directory where the configuration files are stored.
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
- * Directory where the cache files are stored.
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
- * Compiler configuration (Advanced use cases)
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
- * Cho biết trình biên dịch có nên được bật hay không.
469
+ * Xác định xem trình biên dịch có nên được bật hay không.
458
470
  *
459
- * - false : hiệu hóa trình biên dịch.
460
- * - true : Kích hoạt trình biên dịch.
461
- * - "build-only" : Bỏ qua trình biên dịch trong quá trình phát triển để tăng tốc thời gian khởi động.
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 tăng tốc thời gian khởi động.
462
474
  *
463
- * Giá trị mặc định : false
475
+ * Mặc định: false
464
476
  */
465
477
  enabled: true,
466
478
 
467
479
  /**
468
- * Xác định đường dẫn tệp đầu ra. Thay thế `outputDir`.
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 bắt đầu bằng `./` được giải quyết tương đối so với thư mục component.
471
- * - 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`).
482
+ * - Các đường dẫn `./` được giải quyết tương đối với thư mục thành phần.
483
+ * - Các đường dẫn `/` đượ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ẽ cho phép tạo các từ điển được tách biệt theo ngôn ngữ.
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 component
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}}', // Cách viết tương đương bằng template string
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 theo ngôn ngữ trong thư mục gốc của dự án
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', // Cách viết tương đương bằng template string
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 component.
500
- * - `componentExtension`: Phần mở rộng tệp component.
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 component.
503
- * - `componentDirPath`: Đường dẫn thư mục component.
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
- * Cho biết liệu các thành phần có nên được lưu sau khi được chuyển đổi hay không.
509
- * Bằng cách đó, trình biên dịch có thể được chạy một lần duy nhất để chuyển đổi ứng dụng, và sau đó nó có thể được gỡ bỏ.
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 đã tạo. Hữu ích cho đầu ra JSON i18next hoặc ICU MessageFormat theo từng ngôn ngữ.
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 cho các khóa từ điển được trích xuất
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
- * Custom schemas to validate the dictionaries content.
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 configuration.
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
- ## Tham chiếu Cấu hình
554
+ ---
555
+
556
+ ## Tham chiếu cấu hình (Configuration Reference)
543
557
 
544
- Các phần sau mô tả các thiết lập cấu hình khác nhau có sẵn cho Intlayer.
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 Quốc tế hóa
549
-
550
- Định nghĩa các thiết lập 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.
551
-
552
- #### Thuộc tính
553
-
554
- - **locales**:
555
- - _Kiểu_: `string[]`
556
- - _Mặc định_: `['en']`
557
- - _Mô tả_: Danh sách các ngôn ngữ được hỗ trợ trong ứng dụng.
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 Trình soạn thảo
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
- Khi sử dụng localStorage hoặc sessionStorage:
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 &#124; 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 &#124; 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
- - **type**: Loại lưu trữ (`'localStorage' | 'sessionStorage'`)
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
- ### Cấu hình Hệ thống
598
+ | Trường | Kiểu | tả | Ví dụ | Lưu ý |
599
+ | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
600
+ | `mode` | `'prefix-no-default' &#124; 'prefix-all' &#124; 'no-prefix' &#124; '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 &#124; 'cookie' &#124; 'localStorage' &#124; 'sessionStorage' &#124; 'header' &#124; CookiesAttributes &#124; StorageAttributes &#124; 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
- Các cài đặt liên quan đến đường dẫn nội bộ và kết quả đầu ra của Intlayer. Các cài đặt này thường mang tính nội bộ và người dùng không cần phải sửa đổi.
605
+ **Ví dụ về `rewrite`**:
784
606
 
785
- #### Thuộc tính
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
- - **baseDir**:
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
- - **dictionariesDir**:
795
- - _Kiểu_: `string`
796
- - _Mặc định_: `'.intlayer/dictionary'`
797
- - _Mô tả_: Đường dẫn thư mục để lưu trữ các từ điển bản địa hóa.
798
- - _Ví dụ_: `'translations'`
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 không 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
- - **moduleAugmentationDir**:
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
- - **unmergedDictionariesDir**:
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
- - **typesDir**:
814
- - _Kiểu_: `string`
815
- - _Mặc định_: `'types'`
816
- - _Mô tả_: Thư mục để lưu trữ các kiểu của từ điển.
817
- - _Ví dụ_: `'intlayer-types'`
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' &#124; 'lax' &#124; 'none'` | Chính sách SameSite. |
648
+ | `expires` | `Date &#124; number` | Ngày hết hạn hoặc số ngày. Mặc định: `undefined` |
818
649
 
819
- - **mainDir**:
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
- #### dụ cấu hình
652
+ Khi sử dụng localStorage hoặc sessionStorage:
653
+
654
+ | Trường | Kiểu | Mô tả |
655
+ | ------ | ---------------------------------------- | --------------------------------------------------- |
656
+ | `type` | `'localStorage' &#124; '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 routing mới v7:
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
- headerName: "x-intlayer-locale",
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ế độ Tham số Tìm kiếm**:
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ế độ Không Tiền Tố với Bộ Lưu Trữ Tùy Chỉnh**:
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 Nội dung
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 phục vụ hai mục đích chính:
813
+ Cấu hình từ điển này 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 &#124; FilePathPattern &#124; Partial<Record<Locale, boolean &#124; 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' &#124; 'dynamic' &#124; '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' &#124; 'remote' &#124; 'hybrid' &#124; 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
- 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
1012
- 2. **Hành vi Dự phòng**: Cung cấp các giá trị dự phòng khi các trường cụ thể không được định nghĩa, cho phép bạn định nghĩa hành vi hoạt động của từ điển trên toàn cục
845
+ | Trường | Kiểu | tả | 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' &#124; '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
- Để biết thêm thông tin về các tệp khai báo nội dung và cách các giá trị cấu hình được áp dụng, xem [Tài liệu Tệp Nội dung](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/content_file.md).
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' &#124; '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' &#124; '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
- #### Thuộc tính
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
- - **fill**
1019
- - **description**
1020
- - **locale**
1021
- - **location**
1022
- - **priority**
1023
- - **live**
1024
- - **schema**
1025
- - **title**
1026
- - **tags**
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 Logger
1032
-
1033
- Các cài đặt kiểm soát logger, bao gồm tiền tố sử dụng.
1034
-
1035
- #### Thuộc tính
1036
-
1037
- - **mode**:
1038
- - _Kiểu_: `string`
1039
- - _Mặc định_: `default`
1040
- - _Mô tả_: Chỉ định chế độ của logger.
1041
- - _Tùy chọn_: `default`, `verbose`, `disabled`
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 &#124; 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 `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 Trình biên dịch
1187
-
1188
- Các cài đặt kiểm soát trình biên dịch Intlayer, trình biên dịch này sẽ trích xuất các từ điển trực tiếp từ các thành phần của bạn.
1189
-
1190
- #### Thuộc tính
1191
-
1192
- - **enabled**:
1193
- - _Kiểu_: `boolean | 'build-only'`
1194
- - _Mặc định_: `true`
1195
- - _Mô tả_: Cho biết liệu trình biên dịch có nên được bật để trích xuất từ điển hay không.
1196
- - _Ví dụ_: `'build-only'`
1197
- - _Lưu ý_: Đặt thành `'build-only'` sẽ bỏ qua trình biên dịch trong chế độ phát triển để tăng tốc thời gian khởi động. Nó sẽ chỉ chạy trên các lệnh build.
1198
-
1199
- - **dictionaryKeyPrefix**:
1200
- - _Kiểu_: `string`
1201
- - _Mặc định_: `''`
1202
- - _Mô tả_: Tiền tố cho các khóa từ điển được trích xuất.
1203
- - _Ví dụ_: `'my-key-'`
1204
- - _Lưu ý_: Khi từ điển được trích xuất, khóa được tạo dựa trên tên tệp. Tiền tố này được thêm vào khóa đã tạo để ngăn chặn xung đột.
1205
-
1206
- - **saveComponents**:
1207
- - _Kiểu_: `boolean`
1208
- - _Mặc định_: `false`
1209
- - _Mô tả_: Cho biết liệu các thành phần nên được lưu sau khi được chuyển đổi hay không.
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 của Intlayer.
902
+
903
+ | Trường | Kiểu | Mô tả | Mặc định |
904
+ | -------- | ---------------------------------------------- | -------------------------- | -------------- |
905
+ | `mode` | `'default' &#124; 'verbose' &#124; '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. |