@intlayer/docs 9.0.0-canary.15 → 9.0.0-canary.17
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/blog/en/rag_powered_documentation_assistant.md +6 -0
- package/dist/cjs/generated/docs.entry.cjs +40 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +40 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +2 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/cli/index.md +1 -1
- package/docs/ar/configuration.md +42 -1
- package/docs/ar/intlayer_CMS.md +5 -128
- package/docs/ar/live-sync.md +174 -0
- package/docs/ar/releases/v9.md +45 -1
- package/docs/bn/cli/index.md +1 -1
- package/docs/bn/configuration.md +45 -1
- package/docs/cs/cli/index.md +1 -1
- package/docs/cs/configuration.md +45 -1
- package/docs/de/cli/index.md +1 -1
- package/docs/de/configuration.md +42 -1
- package/docs/de/intlayer_CMS.md +5 -135
- package/docs/de/live-sync.md +174 -0
- package/docs/de/releases/v9.md +45 -1
- package/docs/en/analytics.md +222 -0
- package/docs/en/cli/index.md +1 -1
- package/docs/en/configuration.md +42 -1
- package/docs/en/intlayer_CMS.md +6 -140
- package/docs/en/live-sync.md +184 -0
- package/docs/en/releases/v9.md +53 -3
- package/docs/en-GB/cli/index.md +1 -1
- package/docs/en-GB/configuration.md +42 -1
- package/docs/en-GB/intlayer_CMS.md +5 -128
- package/docs/en-GB/live-sync.md +173 -0
- package/docs/en-GB/releases/v9.md +45 -1
- package/docs/es/cli/index.md +1 -1
- package/docs/es/configuration.md +42 -1
- package/docs/es/intlayer_CMS.md +5 -140
- package/docs/es/live-sync.md +176 -0
- package/docs/es/releases/v9.md +45 -1
- package/docs/fr/cli/index.md +1 -1
- package/docs/fr/configuration.md +42 -1
- package/docs/fr/intlayer_CMS.md +5 -135
- package/docs/fr/live-sync.md +174 -0
- package/docs/fr/releases/v9.md +45 -1
- package/docs/hi/cli/index.md +1 -1
- package/docs/hi/configuration.md +42 -1
- package/docs/hi/intlayer_CMS.md +5 -128
- package/docs/hi/live-sync.md +174 -0
- package/docs/hi/releases/v9.md +45 -1
- package/docs/id/cli/index.md +1 -1
- package/docs/id/configuration.md +42 -1
- package/docs/id/intlayer_CMS.md +5 -139
- package/docs/id/live-sync.md +185 -0
- package/docs/id/releases/v9.md +45 -1
- package/docs/it/cli/index.md +1 -1
- package/docs/it/configuration.md +42 -1
- package/docs/it/intlayer_CMS.md +5 -128
- package/docs/it/live-sync.md +174 -0
- package/docs/it/releases/v9.md +45 -1
- package/docs/ja/cli/index.md +1 -1
- package/docs/ja/configuration.md +42 -1
- package/docs/ja/intlayer_CMS.md +5 -139
- package/docs/ja/live-sync.md +185 -0
- package/docs/ja/releases/v9.md +45 -1
- package/docs/ko/cli/index.md +1 -1
- package/docs/ko/configuration.md +42 -1
- package/docs/ko/intlayer_CMS.md +5 -141
- package/docs/ko/live-sync.md +187 -0
- package/docs/ko/releases/v9.md +45 -1
- package/docs/nl/cli/index.md +1 -1
- package/docs/nl/configuration.md +45 -1
- package/docs/pl/cli/index.md +1 -1
- package/docs/pl/configuration.md +45 -1
- package/docs/pl/intlayer_CMS.md +5 -139
- package/docs/pl/live-sync.md +185 -0
- package/docs/pl/releases/v9.md +45 -1
- package/docs/pt/cli/index.md +1 -1
- package/docs/pt/configuration.md +45 -1
- package/docs/pt/intlayer_CMS.md +5 -143
- package/docs/pt/live-sync.md +174 -0
- package/docs/pt/releases/v9.md +45 -1
- package/docs/ru/cli/index.md +1 -1
- package/docs/ru/configuration.md +42 -1
- package/docs/ru/intlayer_CMS.md +5 -139
- package/docs/ru/live-sync.md +185 -0
- package/docs/ru/releases/v9.md +45 -1
- package/docs/tr/cli/index.md +1 -1
- package/docs/tr/configuration.md +42 -1
- package/docs/tr/intlayer_CMS.md +5 -127
- package/docs/tr/live-sync.md +173 -0
- package/docs/tr/releases/v9.md +45 -1
- package/docs/uk/cli/index.md +1 -1
- package/docs/uk/configuration.md +42 -1
- package/docs/uk/intlayer_CMS.md +5 -139
- package/docs/uk/live-sync.md +185 -0
- package/docs/uk/releases/v9.md +45 -1
- package/docs/ur/cli/index.md +1 -1
- package/docs/ur/configuration.md +45 -1
- package/docs/vi/cli/index.md +1 -1
- package/docs/vi/configuration.md +42 -1
- package/docs/vi/intlayer_CMS.md +5 -139
- package/docs/vi/live-sync.md +185 -0
- package/docs/vi/releases/v9.md +45 -1
- package/docs/zh/cli/index.md +1 -1
- package/docs/zh/configuration.md +42 -1
- package/docs/zh/intlayer_CMS.md +5 -129
- package/docs/zh/live-sync.md +175 -0
- package/docs/zh/releases/v9.md +45 -1
- package/package.json +7 -7
- package/src/generated/docs.entry.ts +40 -0
package/docs/vi/cli/index.md
CHANGED
|
@@ -125,7 +125,7 @@ Intlayer chấp nhận nhiều định dạng tệp cấu hình khác nhau:
|
|
|
125
125
|
|
|
126
126
|
### Xác thực
|
|
127
127
|
|
|
128
|
-
- **[Đăng nhập](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/login.md)** - Xác thực với Intlayer CMS và nhận thông tin xác thực truy cập
|
|
128
|
+
- **[Đăng nhập](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/cli/login.md)** - Xác thực với Intlayer CMS và nhận thông tin xác thực truy cập
|
|
129
129
|
|
|
130
130
|
### Các lệnh cốt lõi
|
|
131
131
|
|
package/docs/vi/configuration.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-13
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-07-11
|
|
4
4
|
title: Cấu hình (Configuration)
|
|
5
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:
|
|
@@ -14,6 +14,9 @@ slugs:
|
|
|
14
14
|
- concept
|
|
15
15
|
- configuration
|
|
16
16
|
history:
|
|
17
|
+
- version: 9.0.0
|
|
18
|
+
date: 2026-07-11
|
|
19
|
+
changes: "Thêm cấu hình `analytics`"
|
|
17
20
|
- version: 9.0.0
|
|
18
21
|
date: 2026-06-24
|
|
19
22
|
changes: "Add `enableProxy` option to the routing configuration"
|
|
@@ -355,6 +358,30 @@ const config: IntlayerConfig = {
|
|
|
355
358
|
liveSync: true,
|
|
356
359
|
},
|
|
357
360
|
|
|
361
|
+
/**
|
|
362
|
+
* Cấu hình phân tích (analytics).
|
|
363
|
+
*/
|
|
364
|
+
analytics: {
|
|
365
|
+
/**
|
|
366
|
+
* Có bật thu thập dữ liệu phân tích hay không (lượt xem trang, hiển thị nội dung, sự kiện A/B).
|
|
367
|
+
* Yêu cầu phải thiết lập `editor.clientId` để phục vụ việc quy kết (attribution).
|
|
368
|
+
* Mặc định: false
|
|
369
|
+
*/
|
|
370
|
+
enabled: true,
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* Số mili giây giữa các lần gửi hàng loạt tự động đến backend.
|
|
374
|
+
* Mặc định: 20000
|
|
375
|
+
*/
|
|
376
|
+
flushInterval: 20000,
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* Tỷ lệ phiên được ghi lại, từ 0 (không có) đến 1 (tất cả).
|
|
380
|
+
* Mặc định: 1
|
|
381
|
+
*/
|
|
382
|
+
sampleRate: 1,
|
|
383
|
+
},
|
|
384
|
+
|
|
358
385
|
/**
|
|
359
386
|
* Cài đặt cho các bản dịch và thế hệ (generation) bằng AI.
|
|
360
387
|
*/
|
|
@@ -668,6 +695,20 @@ Xác định cài đặt cho visual editor, bao gồm cổng máy chủ và tr
|
|
|
668
695
|
|
|
669
696
|
---
|
|
670
697
|
|
|
698
|
+
### Cấu hình Phân tích (Analytics)
|
|
699
|
+
|
|
700
|
+
Xác định các cài đặt liên quan đến phân tích của Intlayer: thu thập dữ liệu về nội dung thực sự được hiển thị cho người dùng (lượt xem trang, hiển thị nội dung) và hỗ trợ thử nghiệm A/B trên nội dung.
|
|
701
|
+
|
|
702
|
+
Tính năng phân tích hoàn toàn là tùy chọn tham gia (opt-in): không có gì được thu thập trừ khi `analytics.enabled` được đặt rõ ràng thành `true` **và** một khóa dự án (`editor.clientId`) được cấu hình để quy kết. Khi bị vô hiệu hóa (mặc định), toàn bộ tích hợp phân tích sẽ bị loại bỏ khỏi gói ứng dụng của bạn (dead-code elimination).
|
|
703
|
+
|
|
704
|
+
| Trường | Mô tả | Kiểu | Mặc định | Ví dụ | Ghi chú |
|
|
705
|
+
| --------------- | -------------------------------------------------------------------------------- | --------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
706
|
+
| `enabled` | Bật thu thập dữ liệu phân tích (lượt xem trang, hiển thị nội dung, sự kiện A/B). | `boolean` | `false` | `true` | Yêu cầu phải thiết lập `editor.clientId` để phục vụ việc quy kết; nếu không, phân tích vẫn bị vô hiệu hóa ngay cả khi `enabled` là `true`. |
|
|
707
|
+
| `flushInterval` | Số mili giây giữa các lần gửi hàng loạt tự động đến backend. | `number` | `20000` | `10000` | |
|
|
708
|
+
| `sampleRate` | Tỷ lệ phiên được ghi lại, từ `0` (không có) đến `1` (tất cả). | `number` | `1` | `0.5` | Việc lấy mẫu là xác định theo từng phiên, vì vậy một phiên được ghi lại sẽ báo cáo tất cả các sự kiện của nó (không có phễu một phần). |
|
|
709
|
+
|
|
710
|
+
---
|
|
711
|
+
|
|
671
712
|
### Cấu hình Routing (Routing)
|
|
672
713
|
|
|
673
714
|
Cài đặt kiểm soát hành vi routing, bao gồm cấu trúc URL, lưu trữ locale và quản lý middleware.
|
package/docs/vi/intlayer_CMS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-08-23
|
|
3
|
-
updatedAt:
|
|
3
|
+
updatedAt: 2026-07-08
|
|
4
4
|
title: Intlayer CMS | Đưa nội dung của bạn ra ngoài vào Intlayer CMS
|
|
5
5
|
description: Đưa nội dung của bạn ra ngoài vào Intlayer CMS để ủy quyền quản lý nội dung cho nhóm của bạn.
|
|
6
6
|
keywords:
|
|
@@ -18,6 +18,9 @@ slugs:
|
|
|
18
18
|
- cms
|
|
19
19
|
youtubeVideo: https://www.youtube.com/watch?v=UDDTnirwi_4
|
|
20
20
|
history:
|
|
21
|
+
- version: 9.0.0
|
|
22
|
+
date: 2026-07-08
|
|
23
|
+
changes: "Chuyển phần 'Đồng bộ trực tiếp' sang trang riêng (live-sync.md), chỉ giữ lại phần giới thiệu ngắn gọn và liên kết ở đây"
|
|
21
24
|
- version: 6.0.1
|
|
22
25
|
date: 2025-09-22
|
|
23
26
|
changes: "Thêm tài liệu đồng bộ trực tiếp"
|
|
@@ -245,144 +248,7 @@ Sau đó, bạn sẽ có thể xem và quản lý từ điển của mình trong
|
|
|
245
248
|
|
|
246
249
|
Live Sync cho phép ứng dụng của bạn phản ánh các thay đổi nội dung CMS trong thời gian chạy. Không cần xây dựng lại hoặc triển khai lại. Khi được bật, các cập nhật sẽ được truyền đến máy chủ Live Sync để làm mới các từ điển mà ứng dụng của bạn đang đọc.
|
|
247
250
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
251
|
-
import type { IntlayerConfig } from "intlayer";
|
|
252
|
-
|
|
253
|
-
const config: IntlayerConfig = {
|
|
254
|
-
// ... các thiết lập cấu hình khác
|
|
255
|
-
editor: {
|
|
256
|
-
/**
|
|
257
|
-
* Bật tính năng tải lại nóng (hot reloading) cấu hình locale khi phát hiện thay đổi.
|
|
258
|
-
* Ví dụ, khi một từ điển được thêm hoặc cập nhật, ứng dụng sẽ cập nhật
|
|
259
|
-
* nội dung hiển thị trên trang.
|
|
260
|
-
*
|
|
261
|
-
* Vì tải lại nóng yêu cầu kết nối liên tục với máy chủ,
|
|
262
|
-
* tính năng này chỉ có sẵn cho khách hàng của gói `enterprise`.
|
|
263
|
-
*
|
|
264
|
-
* Mặc định: false
|
|
265
|
-
*/
|
|
266
|
-
liveSync: true,
|
|
267
|
-
},
|
|
268
|
-
dictionary: {
|
|
269
|
-
/**
|
|
270
|
-
* Điều khiển cách các từ điển được nhập khẩu:
|
|
271
|
-
*
|
|
272
|
-
* - "live": Các từ điển được lấy động bằng cách sử dụng Live Sync API.
|
|
273
|
-
* Thay thế useIntlayer bằng useDictionaryDynamic.
|
|
274
|
-
*
|
|
275
|
-
* Lưu ý: Chế độ live sử dụng Live Sync API để lấy từ điển. Nếu cuộc gọi API
|
|
276
|
-
* thất bại, các từ điển sẽ được nhập khẩu động.
|
|
277
|
-
* Lưu ý: Chỉ các từ điển có nội dung từ xa và cờ "live" mới sử dụng chế độ live.
|
|
278
|
-
* Các từ điển khác sử dụng chế độ động để tối ưu hiệu năng.
|
|
279
|
-
*/
|
|
280
|
-
importMode: "fetch",
|
|
281
|
-
},
|
|
282
|
-
};
|
|
283
|
-
|
|
284
|
-
export default config;
|
|
285
|
-
```
|
|
286
|
-
|
|
287
|
-
Khởi động server Live Sync để bao bọc ứng dụng của bạn:
|
|
288
|
-
|
|
289
|
-
Ví dụ sử dụng server độc lập:
|
|
290
|
-
|
|
291
|
-
```json5 fileName="package.json"
|
|
292
|
-
{
|
|
293
|
-
"scripts": {
|
|
294
|
-
// ... các script khác
|
|
295
|
-
"live:start": "npx intlayer live",
|
|
296
|
-
},
|
|
297
|
-
}
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
Bạn cũng có thể sử dụng server ứng dụng của mình song song bằng cách sử dụng đối số `--process`.
|
|
301
|
-
|
|
302
|
-
Ví dụ sử dụng Next.js:
|
|
303
|
-
|
|
304
|
-
```json5 fileName="package.json"
|
|
305
|
-
{
|
|
306
|
-
"scripts": {
|
|
307
|
-
// ... các script khác
|
|
308
|
-
"build": "next build",
|
|
309
|
-
"dev": "next dev",
|
|
310
|
-
"start": "npx intlayer live --with 'next start'",
|
|
311
|
-
},
|
|
312
|
-
}
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
Ví dụ sử dụng Vite:
|
|
316
|
-
|
|
317
|
-
```json5 fileName="package.json"
|
|
318
|
-
{
|
|
319
|
-
"scripts": {
|
|
320
|
-
// ... các script khác
|
|
321
|
-
"build": "vite build",
|
|
322
|
-
"dev": "vite dev",
|
|
323
|
-
"start": "npx intlayer live --with 'vite start'",
|
|
324
|
-
},
|
|
325
|
-
}
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
Server Live Sync bao bọc ứng dụng của bạn và tự động áp dụng nội dung cập nhật khi nó đến.
|
|
329
|
-
|
|
330
|
-
Để nhận thông báo thay đổi từ CMS, server Live Sync duy trì một kết nối SSE đến backend. Khi nội dung thay đổi trong CMS, backend chuyển tiếp bản cập nhật đến server Live Sync, server này sẽ ghi các từ điển mới. Ứng dụng của bạn sẽ phản ánh bản cập nhật trong lần điều hướng tiếp theo hoặc khi tải lại trình duyệt, không cần phải xây dựng lại.
|
|
331
|
-
|
|
332
|
-
Sơ đồ luồng (CMS/Backend -> Live Sync Server -> Application Server -> Frontend):
|
|
333
|
-
|
|
334
|
-

|
|
335
|
-
|
|
336
|
-
Cách hoạt động:
|
|
337
|
-
|
|
338
|
-

|
|
339
|
-
|
|
340
|
-
### Quy trình phát triển (cục bộ)
|
|
341
|
-
|
|
342
|
-
- Trong quá trình phát triển, tất cả các từ điển từ xa được lấy khi ứng dụng khởi động, giúp bạn có thể kiểm tra các cập nhật nhanh chóng.
|
|
343
|
-
- Để thử nghiệm Live Sync cục bộ với Next.js, hãy bao bọc server phát triển của bạn:
|
|
344
|
-
|
|
345
|
-
```json5 fileName="package.json"
|
|
346
|
-
{
|
|
347
|
-
"scripts": {
|
|
348
|
-
// ... các script khác
|
|
349
|
-
"dev": "npx intlayer live --with 'next dev'",
|
|
350
|
-
// "dev": "npx intlayer live --with 'vite dev'", // Dành cho Vite
|
|
351
|
-
},
|
|
352
|
-
}
|
|
353
|
-
```
|
|
354
|
-
|
|
355
|
-
Bật tối ưu hóa để Intlayer áp dụng các biến đổi nhập khẩu Live trong quá trình phát triển:
|
|
356
|
-
|
|
357
|
-
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
358
|
-
import type { IntlayerConfig } from "intlayer";
|
|
359
|
-
|
|
360
|
-
const config: IntlayerConfig = {
|
|
361
|
-
editor: {
|
|
362
|
-
applicationURL: "http://localhost:5173",
|
|
363
|
-
liveSyncURL: "http://localhost:4000",
|
|
364
|
-
liveSync: true,
|
|
365
|
-
},
|
|
366
|
-
dictionary: {
|
|
367
|
-
importMode: "fetch",
|
|
368
|
-
},
|
|
369
|
-
build: {
|
|
370
|
-
optimize: true,
|
|
371
|
-
},
|
|
372
|
-
};
|
|
373
|
-
|
|
374
|
-
export default config;
|
|
375
|
-
```
|
|
376
|
-
|
|
377
|
-
Cấu hình này bao bọc server phát triển của bạn với server Live Sync, lấy các từ điển từ xa khi khởi động, và truyền các cập nhật từ CMS qua SSE. Tải lại trang để xem các thay đổi.
|
|
378
|
-
|
|
379
|
-
Ghi chú và hạn chế:
|
|
380
|
-
|
|
381
|
-
- Thêm nguồn gốc live sync vào chính sách bảo mật trang web của bạn (CSP). Đảm bảo URL live sync được phép trong `connect-src` (và `frame-ancestors` nếu có liên quan).
|
|
382
|
-
- Live Sync không hoạt động với đầu ra tĩnh. Đối với Next.js, trang phải là động để nhận các cập nhật tại thời gian chạy (ví dụ: sử dụng `generateStaticParams`, `generateMetadata`, `getServerSideProps`, hoặc `getStaticProps` một cách phù hợp để tránh các hạn chế chỉ tĩnh hoàn toàn).
|
|
383
|
-
- Trong CMS, mỗi từ điển có một cờ `live`. Chỉ những từ điển có `live=true` mới được lấy qua API live sync; những từ điển khác được nhập động và không thay đổi trong thời gian chạy.
|
|
384
|
-
- Cờ `live` được đánh giá cho mỗi từ điển tại thời điểm build. Nếu nội dung từ xa không được đánh dấu `live=true` trong quá trình build, bạn phải build lại để kích hoạt Live Sync cho từ điển đó.
|
|
385
|
-
- Server live sync phải có quyền ghi vào `.intlayer`. Trong các container, đảm bảo quyền ghi vào `/.intlayer`.
|
|
251
|
+
Để xem hướng dẫn thiết lập đầy đủ (kích hoạt, khởi động máy chủ Live Sync, quy trình phát triển cục bộ và các giới hạn), xem [tài liệu Live Sync](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/live-sync.md).
|
|
386
252
|
|
|
387
253
|
## Gỡ lỗi
|
|
388
254
|
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-07-08
|
|
3
|
+
updatedAt: 2026-07-08
|
|
4
|
+
title: Đồng bộ trực tiếp (Live Sync) | Phản ánh thay đổi nội dung CMS theo thời gian thực
|
|
5
|
+
description: Cho phép ứng dụng của bạn phản ánh các thay đổi nội dung của Intlayer CMS ngay khi chạy, không cần build lại hay triển khai lại.
|
|
6
|
+
keywords:
|
|
7
|
+
- Đồng bộ trực tiếp
|
|
8
|
+
- Live Sync
|
|
9
|
+
- CMS
|
|
10
|
+
- Trình chỉnh sửa trực quan
|
|
11
|
+
- Quốc tế hóa
|
|
12
|
+
- Tài liệu
|
|
13
|
+
- Intlayer
|
|
14
|
+
- Next.js
|
|
15
|
+
- Vite
|
|
16
|
+
history:
|
|
17
|
+
- version: 9.0.0
|
|
18
|
+
date: 2026-07-08
|
|
19
|
+
changes: "Được tách từ tài liệu Intlayer CMS sang trang riêng"
|
|
20
|
+
- version: 6.0.1
|
|
21
|
+
date: 2025-09-22
|
|
22
|
+
changes: "Thêm tài liệu đồng bộ trực tiếp"
|
|
23
|
+
- version: 6.0.0
|
|
24
|
+
date: 2025-09-04
|
|
25
|
+
changes: "Thay thế trường `hotReload` bằng `liveSync`"
|
|
26
|
+
author: aymericzip
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
# Đồng bộ trực tiếp (Live sync)
|
|
30
|
+
|
|
31
|
+
Live Sync cho phép ứng dụng của bạn phản ánh các thay đổi nội dung CMS trong thời gian chạy. Không cần xây dựng lại hoặc triển khai lại. Khi được bật, các cập nhật sẽ được truyền đến máy chủ Live Sync để làm mới các từ điển mà ứng dụng của bạn đang đọc.
|
|
32
|
+
|
|
33
|
+
## Mục lục
|
|
34
|
+
|
|
35
|
+
<TOC/>
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Bật Đồng bộ trực tiếp
|
|
40
|
+
|
|
41
|
+
Bật Live Sync bằng cách cập nhật cấu hình Intlayer của bạn:
|
|
42
|
+
|
|
43
|
+
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
44
|
+
import type { IntlayerConfig } from "intlayer";
|
|
45
|
+
|
|
46
|
+
const config: IntlayerConfig = {
|
|
47
|
+
// ... các thiết lập cấu hình khác
|
|
48
|
+
editor: {
|
|
49
|
+
/**
|
|
50
|
+
* Bật tính năng tải lại nóng (hot reloading) cấu hình locale khi phát hiện thay đổi.
|
|
51
|
+
* Ví dụ, khi một từ điển được thêm hoặc cập nhật, ứng dụng sẽ cập nhật
|
|
52
|
+
* nội dung hiển thị trên trang.
|
|
53
|
+
*
|
|
54
|
+
* Vì tải lại nóng yêu cầu kết nối liên tục với máy chủ,
|
|
55
|
+
* tính năng này chỉ có sẵn cho khách hàng của gói `enterprise`.
|
|
56
|
+
*
|
|
57
|
+
* Mặc định: false
|
|
58
|
+
*/
|
|
59
|
+
liveSync: true,
|
|
60
|
+
},
|
|
61
|
+
dictionary: {
|
|
62
|
+
/**
|
|
63
|
+
* Điều khiển cách các từ điển được nhập khẩu:
|
|
64
|
+
*
|
|
65
|
+
* - "live": Các từ điển được lấy động bằng cách sử dụng Live Sync API.
|
|
66
|
+
* Thay thế useIntlayer bằng useDictionaryDynamic.
|
|
67
|
+
*
|
|
68
|
+
* Lưu ý: Chế độ live sử dụng Live Sync API để lấy từ điển. Nếu cuộc gọi API
|
|
69
|
+
* thất bại, các từ điển sẽ được nhập khẩu động.
|
|
70
|
+
* Lưu ý: Chỉ các từ điển có nội dung từ xa và cờ "live" mới sử dụng chế độ live.
|
|
71
|
+
* Các từ điển khác sử dụng chế độ động để tối ưu hiệu năng.
|
|
72
|
+
*/
|
|
73
|
+
importMode: "fetch",
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export default config;
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Khởi động server Live Sync để bao bọc ứng dụng của bạn:
|
|
81
|
+
|
|
82
|
+
Ví dụ sử dụng server độc lập:
|
|
83
|
+
|
|
84
|
+
```json5 fileName="package.json"
|
|
85
|
+
{
|
|
86
|
+
"scripts": {
|
|
87
|
+
// ... các script khác
|
|
88
|
+
"live:start": "npx intlayer live",
|
|
89
|
+
},
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Bạn cũng có thể sử dụng server ứng dụng của mình song song bằng cách sử dụng đối số `--process`.
|
|
94
|
+
|
|
95
|
+
Ví dụ sử dụng Next.js:
|
|
96
|
+
|
|
97
|
+
```json5 fileName="package.json"
|
|
98
|
+
{
|
|
99
|
+
"scripts": {
|
|
100
|
+
// ... các script khác
|
|
101
|
+
"build": "next build",
|
|
102
|
+
"dev": "next dev",
|
|
103
|
+
"start": "npx intlayer live --with 'next start'",
|
|
104
|
+
},
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Ví dụ sử dụng Vite:
|
|
109
|
+
|
|
110
|
+
```json5 fileName="package.json"
|
|
111
|
+
{
|
|
112
|
+
"scripts": {
|
|
113
|
+
// ... các script khác
|
|
114
|
+
"build": "vite build",
|
|
115
|
+
"dev": "vite dev",
|
|
116
|
+
"start": "npx intlayer live --with 'vite start'",
|
|
117
|
+
},
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Server Live Sync bao bọc ứng dụng của bạn và tự động áp dụng nội dung cập nhật khi nó đến.
|
|
122
|
+
|
|
123
|
+
Để nhận thông báo thay đổi từ CMS, server Live Sync duy trì một kết nối SSE đến backend. Khi nội dung thay đổi trong CMS, backend chuyển tiếp bản cập nhật đến server Live Sync, server này sẽ ghi các từ điển mới. Ứng dụng của bạn sẽ phản ánh bản cập nhật trong lần điều hướng tiếp theo hoặc khi tải lại trình duyệt, không cần phải xây dựng lại.
|
|
124
|
+
|
|
125
|
+
Sơ đồ luồng (CMS/Backend -> Live Sync Server -> Application Server -> Frontend):
|
|
126
|
+
|
|
127
|
+

|
|
128
|
+
|
|
129
|
+
Cách hoạt động:
|
|
130
|
+
|
|
131
|
+

|
|
132
|
+
|
|
133
|
+
## Quy trình phát triển (cục bộ)
|
|
134
|
+
|
|
135
|
+
- Trong quá trình phát triển, tất cả các từ điển từ xa được lấy khi ứng dụng khởi động, giúp bạn có thể kiểm tra các cập nhật nhanh chóng.
|
|
136
|
+
- Để thử nghiệm Live Sync cục bộ với Next.js, hãy bao bọc server phát triển của bạn:
|
|
137
|
+
|
|
138
|
+
```json5 fileName="package.json"
|
|
139
|
+
{
|
|
140
|
+
"scripts": {
|
|
141
|
+
// ... các script khác
|
|
142
|
+
"dev": "npx intlayer live --with 'next dev'",
|
|
143
|
+
// "dev": "npx intlayer live --with 'vite dev'", // Dành cho Vite
|
|
144
|
+
},
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Bật tối ưu hóa để Intlayer áp dụng các biến đổi nhập khẩu Live trong quá trình phát triển:
|
|
149
|
+
|
|
150
|
+
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
151
|
+
import type { IntlayerConfig } from "intlayer";
|
|
152
|
+
|
|
153
|
+
const config: IntlayerConfig = {
|
|
154
|
+
editor: {
|
|
155
|
+
applicationURL: "http://localhost:5173",
|
|
156
|
+
liveSyncURL: "http://localhost:4000",
|
|
157
|
+
liveSync: true,
|
|
158
|
+
},
|
|
159
|
+
dictionary: {
|
|
160
|
+
importMode: "fetch",
|
|
161
|
+
},
|
|
162
|
+
build: {
|
|
163
|
+
optimize: true,
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
export default config;
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Cấu hình này bao bọc server phát triển của bạn với server Live Sync, lấy các từ điển từ xa khi khởi động, và truyền các cập nhật từ CMS qua SSE. Tải lại trang để xem các thay đổi.
|
|
171
|
+
|
|
172
|
+
## Ghi chú và hạn chế
|
|
173
|
+
|
|
174
|
+
- Thêm nguồn gốc live sync vào chính sách bảo mật trang web của bạn (CSP). Đảm bảo URL live sync được phép trong `connect-src` (và `frame-ancestors` nếu có liên quan).
|
|
175
|
+
- Live Sync không hoạt động với đầu ra tĩnh. Đối với Next.js, trang phải là động để nhận các cập nhật tại thời gian chạy (ví dụ: sử dụng `generateStaticParams`, `generateMetadata`, `getServerSideProps`, hoặc `getStaticProps` một cách phù hợp để tránh các hạn chế chỉ tĩnh hoàn toàn).
|
|
176
|
+
- Trong CMS, mỗi từ điển có một cờ `live`. Chỉ những từ điển có `live=true` mới được lấy qua API live sync; những từ điển khác được nhập động và không thay đổi trong thời gian chạy.
|
|
177
|
+
- Cờ `live` được đánh giá cho mỗi từ điển tại thời điểm build. Nếu nội dung từ xa không được đánh dấu `live=true` trong quá trình build, bạn phải build lại để kích hoạt Live Sync cho từ điển đó.
|
|
178
|
+
- Server live sync phải có quyền ghi vào `.intlayer`. Trong các container, đảm bảo quyền ghi vào `/.intlayer`.
|
|
179
|
+
|
|
180
|
+
## Liên kết hữu ích
|
|
181
|
+
|
|
182
|
+
- [Intlayer CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_CMS.md)
|
|
183
|
+
- [Trình chỉnh sửa trực quan Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_visual_editor.md)
|
|
184
|
+
- [Tài liệu tham khảo cấu hình](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/configuration.md)
|
|
185
|
+
- [Hướng dẫn Self-Hosting](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/self_hosting.md)
|
package/docs/vi/releases/v9.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-06-14
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-07-08
|
|
4
4
|
title: Intlayer v9 Mới - Có gì mới?
|
|
5
5
|
description: Khám phá các tính năng mới trong Intlayer v9. Giới thiệu các package tương thích drop-in cho các thư viện i18n phổ biến và hỗ trợ Collections và Variants.
|
|
6
6
|
keywords:
|
|
@@ -203,6 +203,49 @@ const product = useIntlayer("product-copy", {
|
|
|
203
203
|
|
|
204
204
|
---
|
|
205
205
|
|
|
206
|
+
## `@intlayer/analytics`: theo dõi mức độ hiển thị nội dung & thử nghiệm A/B
|
|
207
|
+
|
|
208
|
+
Một gói tùy chọn mới, [`@intlayer/analytics`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/analytics.md), cho bạn biết nội dung nào thực sự được hiển thị cho khách truy cập — và khép lại vòng lặp với **Collections & Variants** bằng cách cho phép bạn thử nghiệm A/B nội dung và đo lường chuyển đổi theo từng biến thể.
|
|
209
|
+
|
|
210
|
+
- **Theo dõi ở cấp provider**: `IntlayerProvider` (React / Next.js / React Native) tự động ghi lại sự kiện `page_view` khi tải trang, khi chuyển route và khi đổi locale.
|
|
211
|
+
- **Theo dõi ở cấp node**: mỗi lần `useIntlayer` được phân giải sẽ báo cáo một sự kiện `content_exposure` — khóa dictionary nào, key path nào, locale nào, và (nếu có) **biến thể** A/B nào đã được hiển thị. Các lần hiển thị lặp lại của cùng một node trong một cửa sổ flush sẽ được gộp lại thành một sự kiện.
|
|
212
|
+
- **Phân bổ A/B tất định**: `getVariant(experimentKey, variants)` gán một biến thể cho mỗi phiên **mà không cần gọi ngược lại máy chủ**, vì vậy không có hiện tượng nhấp nháy trước lần render đầu tiên.
|
|
213
|
+
- **`useConversion()`**: gán một mục tiêu (đăng ký, nhấp chuột, mua hàng…) cho biến thể mà phiên đã tiếp xúc.
|
|
214
|
+
- **Không tốn chi phí nếu không cài đặt**: cùng mô hình tree-shakeable như `@intlayer/editor` — `import()` động được bọc trong `try/catch`, cộng với một biến môi trường tại thời điểm build (`INTLAYER_ANALYTICS_ENABLED`) giúp loại bỏ hoàn toàn tích hợp này khỏi bundle đối với các ứng dụng không sử dụng.
|
|
215
|
+
- **Không có schema cấu hình mới**: tái sử dụng `editor.backendURL` (endpoint gửi dữ liệu / self-hosting) và `editor.clientId` (khóa dự án, đồng thời là công tắc bật/tắt).
|
|
216
|
+
- **Tôn trọng quyền riêng tư**: băm ẩn danh phiên (SHA-256, không lưu id gốc), không lưu trữ IP, chỉ định vị địa lý thô ở cấp quốc gia, các yêu cầu được gửi theo lô khoảng mỗi 20 giây.
|
|
217
|
+
- **Bảng điều khiển**: một trang **Analytics** mới (hiển thị trong thanh bên sau khi chọn dự án) hiển thị người dùng đang hoạt động, người dùng hôm nay, người dùng trong 7/30/90 ngày qua, biểu đồ biến động khách truy cập, và phân tích theo Locale so với Vị trí.
|
|
218
|
+
|
|
219
|
+
```tsx fileName="CTAButton.tsx" codeFormat="tsx"
|
|
220
|
+
import { useConversion } from "react-intlayer";
|
|
221
|
+
|
|
222
|
+
const CTAButton = () => {
|
|
223
|
+
const trackConversion = useConversion();
|
|
224
|
+
|
|
225
|
+
return (
|
|
226
|
+
<button
|
|
227
|
+
onClick={() =>
|
|
228
|
+
trackConversion({
|
|
229
|
+
experimentKey: "homepage-hero",
|
|
230
|
+
variant: "black_friday",
|
|
231
|
+
goal: "cta_click",
|
|
232
|
+
})
|
|
233
|
+
}
|
|
234
|
+
>
|
|
235
|
+
Get started
|
|
236
|
+
</button>
|
|
237
|
+
);
|
|
238
|
+
};
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
```bash packageManager="npm"
|
|
242
|
+
npm install @intlayer/analytics
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Đã khả dụng ngay hôm nay cho React, Next.js và React Native (thông qua `react-intlayer`); các liên kết framework khác (Vue, Svelte, Angular, …) đang được lên kế hoạch, theo cùng một mô hình triển khai như `@intlayer/editor`. Xem [tài liệu Analytics](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/analytics.md) để biết hướng dẫn đầy đủ.
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
206
249
|
## Vite Plugin: Bundled Compiler & Proxy
|
|
207
250
|
|
|
208
251
|
Plugin Vite `intlayer()` hiện đóng gói **compiler** và **locale-routing proxy** trực tiếp, vì vậy hầu hết các dự án chỉ cần một plugin duy nhất trong `vite.config.ts`:
|
|
@@ -324,5 +367,6 @@ Nếu bạn đang nâng cấp từ v8, lưu ý rằng v9 không bao gồm các b
|
|
|
324
367
|
|
|
325
368
|
- [Hướng dẫn về Compat Adapter Packages](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/compat/index.md)
|
|
326
369
|
- [Dynamic Dictionaries - Collections & Variants](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dynamic_dictionaries/index.md)
|
|
370
|
+
- [Analytics - Theo dõi mức độ hiển thị nội dung & thử nghiệm A/B](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/analytics.md)
|
|
327
371
|
- [Tài liệu tham khảo cấu hình](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/configuration.md)
|
|
328
372
|
- [CMS SDK - Truy cập theo chương trình với @intlayer/api](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_CMS.md)
|
package/docs/zh/cli/index.md
CHANGED
|
@@ -125,7 +125,7 @@ Intlayer 接受多种配置文件格式:
|
|
|
125
125
|
|
|
126
126
|
### 身份验证
|
|
127
127
|
|
|
128
|
-
- **[Login](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/login.md)** - 在 Intlayer CMS 中进行身份验证并获取访问凭据
|
|
128
|
+
- **[Login](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/cli/login.md)** - 在 Intlayer CMS 中进行身份验证并获取访问凭据
|
|
129
129
|
|
|
130
130
|
### 核心命令
|
|
131
131
|
|
package/docs/zh/configuration.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-13
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-07-11
|
|
4
4
|
title: 配置
|
|
5
5
|
description: 了解如何为您的应用程序配置 Intlayer。了解可用于根据您的需求自定义 Intlayer 的各种设置和选项。
|
|
6
6
|
keywords:
|
|
@@ -14,6 +14,9 @@ slugs:
|
|
|
14
14
|
- concept
|
|
15
15
|
- configuration
|
|
16
16
|
history:
|
|
17
|
+
- version: 9.0.0
|
|
18
|
+
date: 2026-07-11
|
|
19
|
+
changes: "添加 `analytics` 配置"
|
|
17
20
|
- version: 9.0.0
|
|
18
21
|
date: 2026-06-24
|
|
19
22
|
changes: "Add `enableProxy` option to the routing configuration"
|
|
@@ -355,6 +358,30 @@ const config: IntlayerConfig = {
|
|
|
355
358
|
liveSync: true,
|
|
356
359
|
},
|
|
357
360
|
|
|
361
|
+
/**
|
|
362
|
+
* 分析(analytics)配置。
|
|
363
|
+
*/
|
|
364
|
+
analytics: {
|
|
365
|
+
/**
|
|
366
|
+
* 是否启用分析数据收集(页面浏览量、内容曝光、A/B 事件)。
|
|
367
|
+
* 需要设置 `editor.clientId` 以进行归因。
|
|
368
|
+
* 默认值:false
|
|
369
|
+
*/
|
|
370
|
+
enabled: true,
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* 自动批量发送到后端之间的毫秒数。
|
|
374
|
+
* 默认值:20000
|
|
375
|
+
*/
|
|
376
|
+
flushInterval: 20000,
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* 要记录的会话比例,从 0(不记录)到 1(全部记录)。
|
|
380
|
+
* 默认值:1
|
|
381
|
+
*/
|
|
382
|
+
sampleRate: 1,
|
|
383
|
+
},
|
|
384
|
+
|
|
358
385
|
/**
|
|
359
386
|
* 使用 AI 进行翻译和生成的设置。
|
|
360
387
|
*/
|
|
@@ -671,6 +698,20 @@ export default config;
|
|
|
671
698
|
|
|
672
699
|
---
|
|
673
700
|
|
|
701
|
+
### 分析配置 (Analytics)
|
|
702
|
+
|
|
703
|
+
定义与 Intlayer 分析相关的设置:收集实际展示给用户的内容(页面浏览量、内容曝光),并支持内容的 A/B 测试。
|
|
704
|
+
|
|
705
|
+
分析功能严格采用选择加入(opt-in)模式:除非将 `analytics.enabled` 显式设置为 `true` **并且** 配置了用于归因的项目密钥(`editor.clientId`),否则不会收集任何数据。禁用时(默认),整个分析集成会从应用程序打包结果中被移除(死代码消除)。
|
|
706
|
+
|
|
707
|
+
| 字段 | 描述 | 类型 | 默认值 | 示例 | 说明 |
|
|
708
|
+
| --------------- | ------------------------------------------------------ | --------- | ------- | ------- | --------------------------------------------------------------------------------------------- |
|
|
709
|
+
| `enabled` | 启用分析数据收集(页面浏览量、内容曝光、A/B 事件)。 | `boolean` | `false` | `true` | 需要设置 `editor.clientId` 以进行归因;否则即使 `enabled` 为 `true`,分析功能仍保持禁用状态。 |
|
|
710
|
+
| `flushInterval` | 自动批量发送到后端之间的毫秒数。 | `number` | `20000` | `10000` | |
|
|
711
|
+
| `sampleRate` | 要记录的会话比例,从 `0`(不记录)到 `1`(全部记录)。 | `number` | `1` | `0.5` | 采样按会话确定性进行,因此被记录的会话会报告其所有事件(不会出现部分漏斗)。 |
|
|
712
|
+
|
|
713
|
+
---
|
|
714
|
+
|
|
674
715
|
### 路由配置 (Routing)
|
|
675
716
|
|
|
676
717
|
控制路由行为的设置,包括 URL 结构、区域设置存储和中间件管理。
|