@intlayer/docs 7.0.0-canary.2 → 7.0.0-canary.3

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 (43) hide show
  1. package/dist/cjs/common.cjs.map +1 -1
  2. package/dist/esm/common.mjs.map +1 -1
  3. package/dist/types/common.d.ts +5 -0
  4. package/dist/types/common.d.ts.map +1 -1
  5. package/docs/ar/intlayer_with_nextjs_16.md +1652 -0
  6. package/docs/ar/releases/v7.md +486 -0
  7. package/docs/de/intlayer_with_nextjs_16.md +1662 -0
  8. package/docs/de/releases/v7.md +503 -0
  9. package/docs/en/intlayer_with_nextjs_15.md +5 -2
  10. package/docs/en/intlayer_with_nextjs_16.md +4 -4
  11. package/docs/en-GB/intlayer_with_nextjs_16.md +1642 -0
  12. package/docs/en-GB/releases/v7.md +486 -0
  13. package/docs/es/intlayer_with_nextjs_16.md +1670 -0
  14. package/docs/es/releases/v7.md +503 -0
  15. package/docs/fr/intlayer_with_nextjs_16.md +1692 -0
  16. package/docs/fr/releases/v7.md +504 -0
  17. package/docs/hi/intlayer_with_nextjs_16.md +1618 -0
  18. package/docs/hi/releases/v7.md +486 -0
  19. package/docs/id/intlayer_with_nextjs_16.md +1604 -0
  20. package/docs/id/releases/v7.md +503 -0
  21. package/docs/it/intlayer_with_nextjs_16.md +1600 -0
  22. package/docs/it/releases/v7.md +505 -0
  23. package/docs/ja/intlayer_CMS.md +0 -9
  24. package/docs/ja/intlayer_with_nextjs_16.md +1788 -0
  25. package/docs/ja/releases/v7.md +504 -0
  26. package/docs/ko/intlayer_with_nextjs_16.md +1641 -0
  27. package/docs/ko/releases/v7.md +504 -0
  28. package/docs/pl/intlayer_with_nextjs_16.md +1645 -0
  29. package/docs/pl/releases/v7.md +486 -0
  30. package/docs/pt/intlayer_with_nextjs_16.md +1646 -0
  31. package/docs/pt/introduction.md +0 -15
  32. package/docs/pt/releases/v7.md +486 -0
  33. package/docs/ru/intlayer_with_nextjs_16.md +1610 -0
  34. package/docs/ru/releases/v7.md +486 -0
  35. package/docs/tr/intlayer_with_nextjs_16.md +1599 -0
  36. package/docs/tr/releases/v7.md +486 -0
  37. package/docs/vi/intlayer_with_nextjs_16.md +1597 -0
  38. package/docs/vi/releases/v7.md +486 -0
  39. package/docs/zh/intlayer_CMS.md +0 -23
  40. package/docs/zh/intlayer_with_nextjs_16.md +1628 -0
  41. package/docs/zh/releases/v7.md +487 -0
  42. package/package.json +14 -14
  43. package/src/common.ts +5 -0
@@ -0,0 +1,486 @@
1
+ ---
2
+ createdAt: 2025-09-22
3
+ updatedAt: 2025-09-23
4
+ title: Intlayer v7 Mới - Có gì mới?
5
+ description: Khám phá những điểm mới trong Intlayer v7. Cải tiến lớn về hiệu suất, trải nghiệm nhà phát triển và các tính năng mới để nâng cao quy trình quốc tế hóa của bạn.
6
+ keywords:
7
+ - Intlayer
8
+ - Địa phương hóa
9
+ - Phát triển
10
+ - Hiệu suất
11
+ - Trải nghiệm nhà phát triển
12
+ - Tính năng
13
+ - React
14
+ - Next.js
15
+ - JavaScript
16
+ - TypeScript
17
+ slugs:
18
+ - doc
19
+ - releases
20
+ - v7
21
+ ---
22
+
23
+ # Intlayer v7 Mới - Có gì mới?
24
+
25
+ Chào mừng đến với Intlayer v7! Phiên bản lớn này giới thiệu các cải tiến đáng kể về hiệu suất, an toàn kiểu và trải nghiệm nhà phát triển. Dưới đây là những điểm nổi bật, kèm theo ghi chú di chuyển và ví dụ thực tiễn.
26
+
27
+ ## Những điểm nổi bật
28
+
29
+ - Chiến lược lưu bộ nhớ đệm để xây dựng nhanh hơn
30
+ - Cải tiến việc tạo kiểu TypeScript với các kiểu riêng cho từng ngôn ngữ
31
+ - Tối ưu gói: Các ngôn ngữ được lưu dưới dạng chuỗi thay vì enum
32
+ - Các chế độ định tuyến mới: `prefix-no-default`, `prefix-all`, `no-prefix`, `search-params`
33
+ - Lưu trữ ngôn ngữ tuân thủ GDPR với localStorage làm mặc định
34
+ - Cấu hình lưu trữ linh hoạt: cookies, localStorage, sessionStorage, hoặc kết hợp nhiều loại
35
+ - Kích thước gói Visual Editor giảm 30%
36
+ - Tùy chọn cấu hình middleware được cải thiện
37
+ - Cập nhật hành vi lệnh fill để quản lý nội dung tốt hơn
38
+ - Tăng cường độ ổn định với việc cập nhật đầy đủ các tệp khai báo nội dung
39
+ - Quản lý thử lại thông minh để đảm bảo độ chính xác dịch thuật
40
+ - Xử lý song song để tăng tốc quá trình dịch thuật
41
+ - Chia nhỏ thông minh để xử lý các tệp lớn trong giới hạn ngữ cảnh AI
42
+
43
+ ---
44
+
45
+ ## Hiệu suất: Bộ nhớ đệm để tăng tốc quá trình build
46
+
47
+ Thay vì xây dựng lại các khai báo nội dung với esbuild trong mỗi lần build, phiên bản v7 triển khai một chiến lược lưu bộ nhớ đệm giúp tăng tốc quá trình build.
48
+
49
+ ```bash
50
+ npx intlayer build
51
+ ```
52
+
53
+ Hệ thống lưu bộ nhớ đệm mới:
54
+
55
+ - Lưu trữ các khai báo nội dung đã biên dịch để tránh xử lý trùng lặp
56
+ - Phát hiện thay đổi và chỉ xây dựng lại các tệp đã sửa đổi
57
+ - Giảm đáng kể thời gian build cho các dự án lớn
58
+
59
+ ---
60
+
61
+ ## TypeScript: Tạo kiểu riêng cho từng ngôn ngữ
62
+
63
+ Kiểu TypeScript giờ đây được tạo riêng cho từng ngôn ngữ, cung cấp kiểu mạnh hơn và loại bỏ các kiểu hợp nhất (union types) giữa các ngôn ngữ.
64
+
65
+ **Hành vi v6:**
66
+
67
+ ```tsx
68
+ const content = getIntlayer("my-title-content", "en");
69
+ // typeof content = { title: "My title" } | { title: "Mon titre" } | { title: "Mi título" }
70
+ ```
71
+
72
+ **Hành vi v7:**
73
+
74
+ ```tsx
75
+ const content = getIntlayer("my-title-content", "en");
76
+ // typeof content = { title: "My title" }
77
+ ```
78
+
79
+ Lợi ích:
80
+
81
+ - Tự động hoàn thành chính xác hơn trong IDE của bạn
82
+ - An toàn kiểu tốt hơn, không bị lẫn lộn kiểu giữa các ngôn ngữ
83
+ - Cải thiện hiệu suất bằng cách giảm độ phức tạp kiểu
84
+
85
+ ---
86
+
87
+ ## Tối ưu gói: Các ngôn ngữ dưới dạng chuỗi
88
+
89
+ Kiểu `Locales` không còn là enum nữa, điều này có nghĩa là nó hoàn toàn có thể tree-shake và sẽ không làm phình to gói của bạn với hàng nghìn bản ghi ngôn ngữ không sử dụng.
90
+
91
+ **v6:**
92
+
93
+ ```typescript
94
+ import { Locales } from "intlayer";
95
+ // Enum bao gồm tất cả các ngôn ngữ -> không thể tree-shake
96
+
97
+ const locale: Locales = Locales.ENGLISH;
98
+ ```
99
+
100
+ **v7:**
101
+
102
+ ```typescript
103
+ import { Locales, Locale } from "intlayer";
104
+ // Kiểu chuỗi -> hoàn toàn có thể tree-shake
105
+
106
+ const locale: Locale = Locales.ENGLISH;
107
+ ```
108
+
109
+ > Vì `Locales` không còn là enum nữa, bạn sẽ phải thay đổi kiểu từ `Locales` thành `Locale` để lấy locale dưới dạng kiểu.
110
+
111
+ Xem [chi tiết triển khai](https://github.com/aymericzip/intlayer/blob/main/packages/%40intlayer/types/src/index.ts) để biết thêm thông tin.
112
+
113
+ ---
114
+
115
+ ## Chế độ định tuyến mới cho sự linh hoạt hơn
116
+
117
+ Phiên bản v7 giới thiệu cấu hình `routing.mode` thống nhất thay thế cho các tùy chọn `prefixDefault` và `noPrefix` trước đây, cung cấp kiểm soát chi tiết hơn đối với cấu trúc URL.
118
+
119
+ ### Các chế độ định tuyến có sẵn
120
+
121
+ - **`prefix-no-default`** (mặc định): Ngôn ngữ mặc định không có tiền tố, các ngôn ngữ khác có
122
+ - `/dashboard` (en) hoặc `/fr/dashboard` (fr)
123
+ - **`prefix-all`**: Tất cả các ngôn ngữ đều có tiền tố
124
+ - `/en/dashboard` (en) hoặc `/fr/dashboard` (fr)
125
+ - **`no-prefix`**: Không có tiền tố locale trong URL (locale được xử lý qua lưu trữ/headers)
126
+ - `/dashboard` cho tất cả các locale
127
+ - **`search-params`**: Locale được truyền dưới dạng tham số truy vấn
128
+ - `/dashboard?locale=en` hoặc `/dashboard?locale=fr`
129
+
130
+ ### Cấu hình cơ bản
131
+
132
+ ```typescript
133
+ // intlayer.config.ts
134
+ export default {
135
+ internationalization: {
136
+ locales: ["en", "fr", "es"],
137
+ defaultLocale: "en",
138
+ },
139
+ routing: {
140
+ mode: "prefix-no-default", // mặc định
141
+ },
142
+ };
143
+ ```
144
+
145
+ ---
146
+
147
+ ## Tuân thủ GDPR: lưu trữ localStorage / cookies
148
+
149
+ Phiên bản v7 ưu tiên quyền riêng tư của người dùng bằng cách sử dụng `localStorage` làm cơ chế lưu trữ mặc định thay vì cookies. Thay đổi này giúp tuân thủ GDPR bằng cách tránh yêu cầu đồng ý cookie cho tùy chọn locale.
150
+
151
+ ### Các tùy chọn cấu hình lưu trữ
152
+
153
+ Trường `routing.storage` mới cũng có sẵn bên cạnh các tùy chọn trước đó như `middleware.cookieName` và `middleware.serverSetCookie`, cung cấp các cấu hình lưu trữ linh hoạt:
154
+
155
+ ```typescript
156
+ // Vô hiệu hóa lưu trữ
157
+ storage: false
158
+
159
+ // Các loại lưu trữ đơn giản
160
+ storage: 'cookie'
161
+ storage: 'localStorage'
162
+ storage: 'sessionStorage'
163
+
164
+ // Cookie với các thuộc tính tùy chỉnh
165
+ storage: {
166
+ type: 'cookie',
167
+ name: 'custom-locale',
168
+ domain: '.example.com',
169
+ secure: true,
170
+ sameSite: 'strict'
171
+ }
172
+
173
+ // localStorage với khóa tùy chỉnh
174
+ storage: {
175
+ type: 'localStorage',
176
+ name: 'custom-locale'
177
+ }
178
+
179
+ // Nhiều loại lưu trữ để dự phòng
180
+ storage: ['cookie', 'localStorage']
181
+ ```
182
+
183
+ ### Ví dụ cấu hình tuân thủ GDPR
184
+
185
+ Dành cho các ứng dụng sản xuất cần cân bằng giữa chức năng và tuân thủ GDPR:
186
+
187
+ ```typescript
188
+ // intlayer.config.ts
189
+ export default {
190
+ internationalization: {
191
+ locales: ["en", "fr", "es"],
192
+ defaultLocale: "en",
193
+ },
194
+ routing: {
195
+ mode: "prefix-no-default",
196
+ storage: [
197
+ {
198
+ type: "localStorage", // Lưu trữ chính (không cần sự đồng ý)
199
+ name: "user-locale",
200
+ },
201
+ {
202
+ type: "cookie", // Lưu trữ cookie tùy chọn (cần sự đồng ý)
203
+ name: "user-locale",
204
+ secure: true,
205
+ sameSite: "strict",
206
+ httpOnly: false,
207
+ },
208
+ ],
209
+ },
210
+ };
211
+ ```
212
+
213
+ ### Bật / tắt lưu trữ cookie
214
+
215
+ Ví dụ sử dụng React / Next.js:
216
+
217
+ Có thể được định nghĩa toàn cục:
218
+
219
+ ```typescript
220
+ <IntlayerProvider isCookieEnabled={false}>
221
+ <App />
222
+ </IntlayerProvider>
223
+ ```
224
+
225
+ Có thể ghi đè cục bộ cho từng hook:
226
+
227
+ ```ts
228
+ const { setLocale } = useLocale({ isCookieEnabled: false });
229
+
230
+ setLocale("en");
231
+ ```
232
+
233
+ **Lưu ý:** Cookie được bật theo mặc định.
234
+ **Lưu ý:** Kiểm tra [yêu cầu cookie GDPR](https://gdpr.eu/cookies/) cho trường hợp sử dụng cụ thể của bạn.
235
+
236
+ ---
237
+
238
+ ## Trình chỉnh sửa trực quan: Gói nhỏ hơn 30%
239
+
240
+ Gói Trình chỉnh sửa trực quan đã được tối ưu hóa để nhỏ hơn 30% so với phiên bản trước, nhờ vào:
241
+
242
+ - Cải thiện hiệu suất trình chỉnh sửa mã
243
+ - Loại bỏ các phụ thuộc không cần thiết trên các gói lõi của Intlayer
244
+ - Cải tiến tree-shaking và đóng gói module
245
+
246
+ Điều này giúp giảm thời gian tải xuống và cải thiện hiệu suất chạy ứng dụng của bạn.
247
+
248
+ ---
249
+
250
+ ## Lệnh fill: Hành vi cập nhật để quản lý nội dung tốt hơn
251
+
252
+ Phiên bản v7 giới thiệu hành vi cải tiến cho lệnh `fill`, cung cấp quản lý nội dung linh hoạt và dễ dự đoán hơn:
253
+
254
+ ### Hành vi fill mới
255
+
256
+ - **`fill: true`** - Ghi đè tệp hiện tại với nội dung đã điền cho tất cả các ngôn ngữ
257
+ - **`fill: "path/to/file"`** - Điền vào tệp được chỉ định mà không sửa đổi tệp hiện tại
258
+ - **`fill: false`** - Vô hiệu hóa hoàn toàn tính năng tự động điền
259
+
260
+ ### Hỗ trợ nâng cao cho các cấu trúc nội dung phức tạp
261
+
262
+ Lệnh fill hiện hỗ trợ các cấu trúc khai báo nội dung phức tạp, bao gồm:
263
+
264
+ - **Đối tượng ghép**: Các khai báo nội dung tham chiếu đến các đối tượng khác
265
+ - **Nội dung giải cấu trúc**: Nội dung sử dụng các mẫu giải cấu trúc
266
+ - **Tham chiếu lồng nhau**: Các đối tượng gọi lẫn nhau trong các hệ thống phân cấp phức tạp
267
+ - **Cấu trúc nội dung động**: Nội dung có các thuộc tính điều kiện hoặc tính toán
268
+
269
+ ### Lợi ích
270
+
271
+ - **Ý định rõ ràng hơn**: Hành vi giờ đây rõ ràng hơn về những gì được sửa đổi
272
+ - **Tách biệt tốt hơn**: Các tệp nội dung có thể được giữ riêng biệt với các bản dịch đã điền
273
+ - **Quy trình làm việc cải tiến**: Các nhà phát triển có nhiều quyền kiểm soát hơn về nơi lưu trữ các bản dịch
274
+ - **Hỗ trợ cấu trúc phức tạp**: Xử lý các kiến trúc nội dung tinh vi với nhiều đối tượng liên kết phức tạp
275
+
276
+ ### Ví dụ sử dụng
277
+
278
+ ```typescript
279
+ // Ghi đè tệp hiện tại với tất cả các ngôn ngữ
280
+ const content = {
281
+ key: "example",
282
+ fill: true, // Ghi đè tệp này
283
+ content: {
284
+ title: "Hello World",
285
+ },
286
+ };
287
+
288
+ // Điền vào tệp riêng biệt mà không sửa đổi tệp hiện tại
289
+ const content = {
290
+ key: "example",
291
+ fill: "./translations.json", // Tạo/cập nhật translations.json
292
+ content: {
293
+ title: "Hello World",
294
+ },
295
+ };
296
+
297
+ // Vô hiệu hóa tự động điền
298
+ const content = {
299
+ key: "example",
300
+ fill: false, // Không tự động điền
301
+ content: {
302
+ title: "Hello World",
303
+ },
304
+ };
305
+
306
+ // Cấu trúc nội dung phức tạp với các đối tượng ghép
307
+ const sharedContent = {
308
+ buttons: {
309
+ save: "Lưu",
310
+ cancel: "Hủy",
311
+ },
312
+ };
313
+
314
+ const content = {
315
+ key: "complex-example",
316
+ fill: true,
317
+ content: {
318
+ // Tham chiếu đến các đối tượng khác
319
+ sharedContent,
320
+
321
+ // Nội dung được giải cấu trúc
322
+ ...sharedContent,
323
+
324
+ // Tham chiếu lồng nhau
325
+ sections: [
326
+ {
327
+ ...sharedContent.buttons,
328
+ header: "Phần 1",
329
+ },
330
+ ],
331
+ },
332
+ };
333
+ ```
334
+
335
+ ---
336
+
337
+ ## Tăng cường độ ổn định và quản lý bản dịch
338
+
339
+ Phiên bản v7 giới thiệu một số cải tiến để làm cho việc dịch nội dung trở nên đáng tin cậy và hiệu quả hơn:
340
+
341
+ ### Cập nhật đầy đủ tệp khai báo nội dung
342
+
343
+ Hệ thống hiện cập nhật các tệp `.content.{ts,js,cjs,mjs}` thay vì cập nhật từng phần, đảm bảo:
344
+
345
+ - **Toàn vẹn dữ liệu**: Việc viết lại toàn bộ file ngăn ngừa các cập nhật một phần có thể làm hỏng nội dung
346
+ - **Tính nhất quán**: Tất cả các ngôn ngữ được cập nhật đồng thời, duy trì sự đồng bộ
347
+ - **Độ tin cậy**: Giảm nguy cơ các file nội dung bị thiếu hoặc bị lỗi định dạng
348
+
349
+ ### Quản lý thử lại thông minh
350
+
351
+ Cơ chế thử lại mới ngăn việc đẩy nội dung với định dạng sai, và tránh làm gián đoạn toàn bộ quá trình điền nếu một yêu cầu thất bại.
352
+
353
+ ### Song song hóa để xử lý nhanh hơn
354
+
355
+ Các thao tác dịch thuật hiện chạy theo hàng đợi để thực thi song song. Điều này tăng tốc đáng kể quá trình.
356
+
357
+ ### Chia nhỏ thông minh cho các file lớn
358
+
359
+ Chiến lược chia nhỏ nâng cao xử lý các file nội dung lớn mà không vượt quá giới hạn ngữ cảnh của AI:
360
+
361
+ ### Ví dụ quy trình làm việc
362
+
363
+ ```typescript
364
+ // File nội dung lớn được tự động chia nhỏ
365
+ const content = {
366
+ key: "large-documentation",
367
+ fill: true,
368
+ content: {
369
+ // Nội dung lớn được tự động chia nhỏ để xử lý AI
370
+ introduction: "..." // hơn 5000 ký tự
371
+ sections: [
372
+ // Nhiều phần lớn
373
+ ]
374
+ }
375
+ };
376
+ ```
377
+
378
+ Hệ thống tự động:
379
+
380
+ 1. Phân tích kích thước và cấu trúc nội dung
381
+ 2. Chia nhỏ nội dung phù hợp
382
+ 3. Xử lý các phần song song
383
+ 4. Xác thực và thử lại nếu cần
384
+ 5. Tái tạo lại file hoàn chỉnh
385
+
386
+ ---
387
+
388
+ ## Ghi chú di chuyển từ v6
389
+
390
+ ### Các cấu hình đã loại bỏ
391
+
392
+ - **`middleware.cookieName`**: Thay thế bằng `routing.storage`
393
+ - **`middleware.serverSetCookie`**: Thay thế bằng `routing.storage`
394
+ - **`middleware.prefixDefault`**: Thay thế bằng `routing.mode`
395
+ - **`middleware.noPrefix`**: Thay thế bằng `routing.mode`
396
+
397
+ ### Bản đồ di chuyển
398
+
399
+ #### Bản đồ cấu hình
400
+
401
+ | Cấu hình v6 | Cấu hình v7 |
402
+ | -------------------------- | ------------------------------------------------------- |
403
+ | `autoFill: xxx` | `fill: xxx` |
404
+ | `prefixDefault: false` | `mode: 'prefix-no-default'` |
405
+ | `prefixDefault: true` | `mode: 'prefix-all'` |
406
+ | `noPrefix: true` | `mode: 'no-prefix'` |
407
+ | `cookieName: 'my-locale'` | `storage: { type: 'cookie', name: 'my-locale' }` |
408
+ | `serverSetCookie: 'never'` | `storage: false` hoặc loại bỏ cookie khỏi mảng storage` |
409
+
410
+ #### Ví dụ di chuyển
411
+
412
+ **Trước (v6):**
413
+
414
+ ```typescript
415
+ export default {
416
+ middleware: {
417
+ headerName: "x-intlayer-locale",
418
+ cookieName: "intlayer-locale",
419
+ prefixDefault: false,
420
+ basePath: "",
421
+ serverSetCookie: "always",
422
+ noPrefix: false,
423
+ },
424
+ };
425
+ ```
426
+
427
+ **Sau (v7):**
428
+
429
+ ```typescript
430
+ export default {
431
+ routing: {
432
+ mode: "prefix-no-default",
433
+ storage: "localStorage", // hoặc 'cookie' nếu bạn cần lưu trữ bằng cookie
434
+ headerName: "x-intlayer-locale",
435
+ basePath: "",
436
+ detectLocaleOnPrefetchNoPrefix: false,
437
+ },
438
+ };
439
+ ```
440
+
441
+ #### Bản đồ nội dung từ điển
442
+
443
+ | Nội dung từ điển v6 | Nội dung từ điển v7 |
444
+ | ------------------- | ------------------- |
445
+ | `autoFill: xxx` | `fill: xxx` |
446
+
447
+ #### Ví dụ di chuyển
448
+
449
+ **Trước (v6):**
450
+
451
+ ```typescript
452
+ const content = {
453
+ key: "example",
454
+ autoFill: true, // Viết lại file này
455
+ content: {
456
+ title: "Hello World",
457
+ },
458
+ };
459
+ ```
460
+
461
+ **Sau (v7):**
462
+
463
+ ```typescript
464
+ const content = {
465
+ key: "example",
466
+ fill: true, // Ghi đè file này
467
+ content: {
468
+ title: "Hello World",
469
+ },
470
+ };
471
+ ```
472
+
473
+ ---
474
+
475
+ ## Ghi chú di chuyển từ v5 lên v6
476
+
477
+ Xem [ghi chú di chuyển từ v5 lên v6](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/releases/v6.md) để biết thêm thông tin.
478
+
479
+ ---
480
+
481
+ ## Liên kết hữu ích
482
+
483
+ - [Tham khảo Cấu hình](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/configuration.md)
484
+ - [Tài liệu Middleware](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/packages/next-intlayer/index.md)
485
+ - [Kiểu TypeScript](https://github.com/aymericzip/intlayer/blob/main/packages/%40intlayer/types/src/index.ts)
486
+ - [Hướng dẫn Cookie GDPR](https://gdpr.eu/cookies/)
@@ -502,37 +502,14 @@ const config = {
502
502
  module.exports = config;
503
503
  ```
504
504
 
505
- 此配置会将你的开发服务器包装在实时同步服务器中,启动时获取远程字典,并通过 SSE 从 CMS 流式传输更新。刷新页面即可看到更改。
506
-
507
- 注意事项和限制:
508
-
509
- - 将实时同步的源添加到你的网站安全策略(CSP)中。确保在 `connect-src`(如果相关,还包括 `frame-ancestors`)中允许实时同步 URL。
510
- - 实时同步不适用于静态输出。对于 Next.js,页面必须是动态的,才能在运行时接收更新(例如,适当使用 `generateStaticParams`、`generateMetadata`、`getServerSideProps` 或 `getStaticProps`,以避免完全静态的限制)。
511
-
512
- ```
513
-
514
505
  此设置将您的开发服务器与实时同步服务器包装在一起,在启动时获取远程字典,并通过 SSE 从 CMS 流式传输更新。刷新页面以查看更改。
515
506
 
516
507
  注意事项和限制:
517
508
 
518
509
  - 将实时同步源添加到您的站点安全策略(CSP)中。确保实时同步 URL 被允许在 `connect-src` 中(如果相关,也包括 `frame-ancestors`)。
519
510
  - 实时同步不适用于静态输出。对于 Next.js,页面必须是动态的才能在运行时接收更新(例如,适当使用 `generateStaticParams`、`generateMetadata`、`getServerSideProps` 或 `getStaticProps`,以避免完全静态的限制)。
520
- /// 在 CMS 中,每个字典都有一个 `live` 标志。只有 `live=true` 的字典才会通过实时同步 API 获取;其他字典则动态导入,并在运行时保持不变。
521
- /// `live` 标志在构建时对每个字典进行评估。如果远程内容在构建时未标记为 `live=true`,则必须重新构建以启用该字典的实时同步。
522
- /// 实时同步服务器必须能够写入 `.intlayer`。在容器中,确保对 `/.intlayer` 具有写入权限。
523
- ///
524
- /// ## 调试
525
- ///
526
- /// 如果遇到 CMS 相关问题,请检查以下内容:
527
- ///
528
- /// - 应用程序是否正在运行。
529
- ///
530
- /// - [`editor`](https://intlayer.org/doc/concept/configuration#editor-configuration) 配置是否在您的 Intlayer 配置文件中正确设置。
531
- /// - 必填字段:
532
- ///
533
511
  - 应用程序 URL 应与您在编辑器配置中设置的 URL (`applicationURL`) 匹配。
534
512
  - CMS URL
535
-
536
513
  - 确保项目配置已推送到 Intlayer CMS。
537
514
 
538
515
  - 可视化编辑器使用 iframe 来显示您的网站。确保您网站的内容安全策略(CSP)允许 CMS URL 作为 `frame-ancestors`(默认是 'https://intlayer.org')。检查编辑器控制台是否有任何错误。