@intlayer/docs 9.0.0-canary.14 → 9.0.0-canary.16

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/generated/docs.entry.cjs +40 -0
  2. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  3. package/dist/esm/generated/docs.entry.mjs +40 -0
  4. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  5. package/dist/types/generated/docs.entry.d.ts +2 -0
  6. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  7. package/docs/ar/cli/index.md +1 -1
  8. package/docs/ar/configuration.md +42 -1
  9. package/docs/ar/intlayer_CMS.md +5 -128
  10. package/docs/ar/live-sync.md +174 -0
  11. package/docs/ar/releases/v9.md +45 -1
  12. package/docs/bn/cli/index.md +1 -1
  13. package/docs/bn/configuration.md +45 -1
  14. package/docs/cs/cli/index.md +1 -1
  15. package/docs/cs/configuration.md +45 -1
  16. package/docs/de/cli/index.md +1 -1
  17. package/docs/de/configuration.md +42 -1
  18. package/docs/de/intlayer_CMS.md +5 -135
  19. package/docs/de/live-sync.md +174 -0
  20. package/docs/de/releases/v9.md +45 -1
  21. package/docs/en/analytics.md +222 -0
  22. package/docs/en/cli/index.md +1 -1
  23. package/docs/en/configuration.md +42 -1
  24. package/docs/en/intlayer_CMS.md +6 -140
  25. package/docs/en/live-sync.md +184 -0
  26. package/docs/en/releases/v9.md +53 -3
  27. package/docs/en-GB/cli/index.md +1 -1
  28. package/docs/en-GB/configuration.md +42 -1
  29. package/docs/en-GB/intlayer_CMS.md +5 -128
  30. package/docs/en-GB/live-sync.md +173 -0
  31. package/docs/en-GB/releases/v9.md +45 -1
  32. package/docs/es/cli/index.md +1 -1
  33. package/docs/es/configuration.md +42 -1
  34. package/docs/es/intlayer_CMS.md +5 -140
  35. package/docs/es/live-sync.md +176 -0
  36. package/docs/es/releases/v9.md +45 -1
  37. package/docs/fr/cli/index.md +1 -1
  38. package/docs/fr/configuration.md +42 -1
  39. package/docs/fr/intlayer_CMS.md +5 -135
  40. package/docs/fr/live-sync.md +174 -0
  41. package/docs/fr/releases/v9.md +45 -1
  42. package/docs/hi/cli/index.md +1 -1
  43. package/docs/hi/configuration.md +42 -1
  44. package/docs/hi/intlayer_CMS.md +5 -128
  45. package/docs/hi/live-sync.md +174 -0
  46. package/docs/hi/releases/v9.md +45 -1
  47. package/docs/id/cli/index.md +1 -1
  48. package/docs/id/configuration.md +42 -1
  49. package/docs/id/intlayer_CMS.md +5 -139
  50. package/docs/id/live-sync.md +185 -0
  51. package/docs/id/releases/v9.md +45 -1
  52. package/docs/it/cli/index.md +1 -1
  53. package/docs/it/configuration.md +42 -1
  54. package/docs/it/intlayer_CMS.md +5 -128
  55. package/docs/it/live-sync.md +174 -0
  56. package/docs/it/releases/v9.md +45 -1
  57. package/docs/ja/cli/index.md +1 -1
  58. package/docs/ja/configuration.md +42 -1
  59. package/docs/ja/intlayer_CMS.md +5 -139
  60. package/docs/ja/live-sync.md +185 -0
  61. package/docs/ja/releases/v9.md +45 -1
  62. package/docs/ko/cli/index.md +1 -1
  63. package/docs/ko/configuration.md +42 -1
  64. package/docs/ko/intlayer_CMS.md +5 -141
  65. package/docs/ko/live-sync.md +187 -0
  66. package/docs/ko/releases/v9.md +45 -1
  67. package/docs/nl/cli/index.md +1 -1
  68. package/docs/nl/configuration.md +45 -1
  69. package/docs/pl/cli/index.md +1 -1
  70. package/docs/pl/configuration.md +45 -1
  71. package/docs/pl/intlayer_CMS.md +5 -139
  72. package/docs/pl/live-sync.md +185 -0
  73. package/docs/pl/releases/v9.md +45 -1
  74. package/docs/pt/cli/index.md +1 -1
  75. package/docs/pt/configuration.md +45 -1
  76. package/docs/pt/intlayer_CMS.md +5 -143
  77. package/docs/pt/live-sync.md +174 -0
  78. package/docs/pt/releases/v9.md +45 -1
  79. package/docs/ru/cli/index.md +1 -1
  80. package/docs/ru/configuration.md +42 -1
  81. package/docs/ru/intlayer_CMS.md +5 -139
  82. package/docs/ru/live-sync.md +185 -0
  83. package/docs/ru/releases/v9.md +45 -1
  84. package/docs/tr/cli/index.md +1 -1
  85. package/docs/tr/configuration.md +42 -1
  86. package/docs/tr/intlayer_CMS.md +5 -127
  87. package/docs/tr/live-sync.md +173 -0
  88. package/docs/tr/releases/v9.md +45 -1
  89. package/docs/uk/cli/index.md +1 -1
  90. package/docs/uk/configuration.md +42 -1
  91. package/docs/uk/intlayer_CMS.md +5 -139
  92. package/docs/uk/live-sync.md +185 -0
  93. package/docs/uk/releases/v9.md +45 -1
  94. package/docs/ur/cli/index.md +1 -1
  95. package/docs/ur/configuration.md +45 -1
  96. package/docs/vi/cli/index.md +1 -1
  97. package/docs/vi/configuration.md +42 -1
  98. package/docs/vi/intlayer_CMS.md +5 -139
  99. package/docs/vi/live-sync.md +185 -0
  100. package/docs/vi/releases/v9.md +45 -1
  101. package/docs/zh/cli/index.md +1 -1
  102. package/docs/zh/configuration.md +42 -1
  103. package/docs/zh/intlayer_CMS.md +5 -129
  104. package/docs/zh/live-sync.md +175 -0
  105. package/docs/zh/releases/v9.md +45 -1
  106. package/package.json +7 -7
  107. package/src/generated/docs.entry.ts +40 -0
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-08-23
3
- updatedAt: 2026-06-29
3
+ updatedAt: 2026-07-08
4
4
  title: Intlayer CMS | Intlayer CMS에 콘텐츠 외부화하기
5
5
  description: 콘텐츠 관리를 팀에 위임하기 위해 Intlayer CMS에 콘텐츠를 외부화하세요.
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: "'라이브 동기화' 섹션을 별도 페이지(live-sync.md)로 이동하고, 여기에는 간단한 소개와 링크만 남김"
21
24
  - version: 9.0.0
22
25
  date: 2026-06-30
23
26
  changes: "Self-Hosting 섹션 추가: Docker Compose 부트스트랩, 서비스 인벤토리, SDK 구성, 선택적 기능 및 업그레이드 참고 사항"
@@ -403,146 +406,7 @@ await pushDictionaries([{ key: "home", content: { title: "Home" } }]);
403
406
 
404
407
  라이브 동기화는 앱이 런타임에 CMS 콘텐츠 변경 사항을 반영할 수 있게 합니다. 재빌드나 재배포가 필요 없습니다. 활성화되면 업데이트가 라이브 동기화 서버로 스트리밍되어 애플리케이션이 읽는 사전을 갱신합니다.
405
408
 
406
- > Live Sync 지속적인 서버 연결이 필요하며 엔터프라이즈 플랜에서만 사용할 있습니다.
407
-
408
- Intlayer 구성을 업데이트하여 Live Sync를 활성화하세요:
409
-
410
- ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
411
- import type { IntlayerConfig } from "intlayer";
412
-
413
- const config: IntlayerConfig = {
414
- // ... 기타 구성 설정
415
- editor: {
416
- /**
417
- * 변경 사항이 감지되면 로케일 구성을 핫 리로딩할 수 있도록 활성화합니다.
418
- * 예를 들어, 사전이 추가되거나 업데이트되면 애플리케이션이
419
- * 페이지에 표시되는 콘텐츠를 업데이트합니다.
420
- *
421
- * 핫 리로딩은 서버와의 지속적인 연결이 필요하기 때문에,
422
- * `enterprise` 플랜 고객에게만 제공됩니다.
423
- *
424
- * 기본값: false
425
- */
426
- liveSync: true,
427
- },
428
- dictionary: {
429
- /**
430
- * 사전이 어떻게 가져오는지를 제어합니다:
431
- *
432
- * - "fetch": 사전은 Live Sync API를 사용하여 동적으로 가져옵니다.
433
- * useIntlayer를 useDictionaryDynamic으로 대체합니다.
434
- *
435
- * 참고: 라이브 모드는 Live Sync API를 사용하여 사전을 가져옵니다. API 호출이
436
- * 실패하면 사전은 동적으로 가져옵니다.
437
- * 참고: 원격 콘텐츠가 있고 "live" 플래그가 있는 사전만 라이브 모드를 사용합니다.
438
- * 나머지는 성능을 위해 동적 모드를 사용합니다.
439
- */
440
- importMode: "fetch",
441
- },
442
- };
443
-
444
- export default config;
445
- ```
446
-
447
- 애플리케이션을 감싸기 위해 Live Sync 서버를 시작하세요:
448
-
449
- 독립형 서버 사용 예시:
450
-
451
- ```json5 fileName="package.json"
452
- {
453
- "scripts": {
454
- // ... 다른 스크립트들
455
- "live:start": "npx intlayer live",
456
- },
457
- }
458
- ```
459
-
460
- `--process` 인수를 사용하여 애플리케이션 서버를 병렬로 사용할 수도 있습니다.
461
-
462
- Next.js 사용 예시:
463
-
464
- ```json5 fileName="package.json"
465
- {
466
- "scripts": {
467
- // ... 다른 스크립트들
468
- "build": "next build",
469
- "dev": "next dev",
470
- "start": "npx intlayer live --with 'next start'",
471
- },
472
- }
473
- ```
474
-
475
- Vite 사용 예시:
476
-
477
- ```json5 fileName="package.json"
478
- {
479
- "scripts": {
480
- // ... 다른 스크립트들
481
- "build": "vite build",
482
- "dev": "vite dev",
483
- "start": "npx intlayer live --with 'vite start'",
484
- },
485
- }
486
- ```
487
-
488
- Live Sync 서버는 애플리케이션을 감싸고 도착하는 업데이트된 콘텐츠를 자동으로 적용합니다.
489
-
490
- CMS로부터 변경 알림을 받기 위해, Live Sync 서버는 백엔드와 SSE 연결을 유지합니다. CMS에서 콘텐츠가 변경되면, 백엔드는 업데이트를 Live Sync 서버로 전달하고, Live Sync 서버는 새로운 사전을 기록합니다. 애플리케이션은 다음 탐색 또는 브라우저 새로고침 시 업데이트를 반영하며, 재빌드가 필요하지 않습니다.
491
-
492
- 플로우 차트 (CMS/백엔드 -> Live Sync 서버 -> 애플리케이션 서버 -> 프론트엔드):
493
-
494
- ![Live Sync Flow CMS/Backend/Live Sync Server/Application Server/Frontend Schema](https://github.com/aymericzip/intlayer/blob/main/docs/assets/live_sync_flow_scema.svg)
495
-
496
- 작동 방식:
497
-
498
- ![Live Sync Logic Schema](https://github.com/aymericzip/intlayer/blob/main/docs/assets/live_sync_logic_schema.svg)
499
-
500
- ### 개발 워크플로우 (로컬)
501
-
502
- - 개발 중에는 애플리케이션이 시작될 때 모든 원격 사전을 가져오므로 업데이트를 빠르게 테스트할 수 있습니다.
503
- - Next.js로 로컬에서 Live Sync를 테스트하려면 개발 서버를 래핑하세요:
504
-
505
- ```json5 fileName="package.json"
506
- {
507
- "scripts": {
508
- // ... 다른 스크립트
509
- "dev": "npx intlayer live --with 'next dev'",
510
- // "dev": "npx intlayer live --with 'vite dev'", // Vite용
511
- },
512
- }
513
- ```
514
-
515
- 개발 중에 Intlayer가 Live import 변환을 적용하도록 최적화를 활성화하세요:
516
-
517
- ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
518
- import type { IntlayerConfig } from "intlayer";
519
-
520
- const config: IntlayerConfig = {
521
- editor: {
522
- applicationURL: "http://localhost:5173",
523
- liveSyncURL: "http://localhost:4000",
524
- liveSync: true,
525
- },
526
- dictionary: {
527
- importMode: "fetch",
528
- },
529
- build: {
530
- optimize: true, // 기본값: process.env.NODE_ENV === 'production'
531
- },
532
- };
533
-
534
- export default config;
535
- ```
536
-
537
- 이 설정은 개발 서버를 Live Sync 서버와 래핑하고, 시작 시 원격 사전을 가져오며, CMS에서 SSE를 통해 업데이트를 스트리밍합니다. 변경 사항을 보려면 페이지를 새로 고치세요.
538
-
539
- 참고 사항 및 제약 조건:
540
-
541
- - 라이브 싱크 출처를 사이트 보안 정책(CSP)에 추가하세요. 라이브 싱크 URL이 `connect-src`(및 관련이 있다면 `frame-ancestors`)에 허용되어 있는지 확인하세요.
542
- - 라이브 싱크는 정적 출력과 함께 작동하지 않습니다. Next.js의 경우, 런타임에 업데이트를 받으려면 페이지가 동적이어야 합니다(예: 전체 정적 전용 제약을 피하기 위해 `generateStaticParams`, `generateMetadata`, `getServerSideProps` 또는 `getStaticProps`를 적절히 사용).
543
- - CMS에서 각 사전에는 `live` 플래그가 있습니다. `live=true`인 사전만 라이브 싱크 API를 통해 가져오며, 나머지는 동적으로 가져와 런타임에 변경되지 않습니다.
544
- - `live` 플래그는 빌드 시 각 사전에 대해 평가됩니다. 빌드 시 원격 콘텐츠가 `live=true`로 표시되지 않았다면, 해당 사전에 대해 라이브 싱크를 활성화하려면 다시 빌드해야 합니다.
545
- - 라이브 싱크 서버는 `.intlayer`에 쓸 수 있어야 합니다. 컨테이너 환경에서는 `/.intlayer`에 쓰기 권한이 있는지 확인하세요.
409
+ 전체 설정 가이드(구성 활성화, Live Sync 서버 시작, 로컬 개발 워크플로, 제약 사항)는 [Live Sync 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/live-sync.md)를 참조하세요.
546
410
 
547
411
  ## 자체 호스팅
548
412
 
@@ -0,0 +1,187 @@
1
+ ---
2
+ createdAt: 2026-07-08
3
+ updatedAt: 2026-07-08
4
+ title: 라이브 동기화 | CMS 콘텐츠 변경 사항을 실시간으로 반영
5
+ description: 재빌드나 재배포 없이 Intlayer CMS 콘텐츠 변경 사항을 앱에 실시간으로 반영하세요.
6
+ keywords:
7
+ - 라이브 동기화
8
+ - Live Sync
9
+ - CMS
10
+ - 비주얼 에디터
11
+ - 국제화
12
+ - 문서
13
+ - Intlayer
14
+ - Next.js
15
+ - Vite
16
+ history:
17
+ - version: 9.0.0
18
+ date: 2026-07-08
19
+ changes: "Intlayer CMS 문서에서 별도의 페이지로 이동"
20
+ - version: 6.0.1
21
+ date: 2025-09-22
22
+ changes: "라이브 동기화 문서 추가"
23
+ - version: 6.0.0
24
+ date: 2025-09-04
25
+ changes: "`hotReload` 필드를 `liveSync`로 교체"
26
+ author: aymericzip
27
+ ---
28
+
29
+ # 라이브 동기화
30
+
31
+ 라이브 동기화는 앱이 런타임에 CMS 콘텐츠 변경 사항을 반영할 수 있게 합니다. 재빌드나 재배포가 필요 없습니다. 활성화되면 업데이트가 라이브 동기화 서버로 스트리밍되어 애플리케이션이 읽는 사전을 갱신합니다.
32
+
33
+ ## 목차
34
+
35
+ <TOC/>
36
+
37
+ ---
38
+
39
+ ## 라이브 동기화 활성화
40
+
41
+ > Live Sync는 지속적인 서버 연결이 필요하며 엔터프라이즈 플랜에서만 사용할 수 있습니다.
42
+
43
+ Intlayer 구성을 업데이트하여 Live Sync를 활성화하세요:
44
+
45
+ ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
46
+ import type { IntlayerConfig } from "intlayer";
47
+
48
+ const config: IntlayerConfig = {
49
+ // ... 기타 구성 설정
50
+ editor: {
51
+ /**
52
+ * 변경 사항이 감지되면 로케일 구성을 핫 리로딩할 수 있도록 활성화합니다.
53
+ * 예를 들어, 사전이 추가되거나 업데이트되면 애플리케이션이
54
+ * 페이지에 표시되는 콘텐츠를 업데이트합니다.
55
+ *
56
+ * 핫 리로딩은 서버와의 지속적인 연결이 필요하기 때문에,
57
+ * `enterprise` 플랜 고객에게만 제공됩니다.
58
+ *
59
+ * 기본값: false
60
+ */
61
+ liveSync: true,
62
+ },
63
+ dictionary: {
64
+ /**
65
+ * 사전이 어떻게 가져오는지를 제어합니다:
66
+ *
67
+ * - "fetch": 사전은 Live Sync API를 사용하여 동적으로 가져옵니다.
68
+ * useIntlayer를 useDictionaryDynamic으로 대체합니다.
69
+ *
70
+ * 참고: 라이브 모드는 Live Sync API를 사용하여 사전을 가져옵니다. API 호출이
71
+ * 실패하면 사전은 동적으로 가져옵니다.
72
+ * 참고: 원격 콘텐츠가 있고 "live" 플래그가 있는 사전만 라이브 모드를 사용합니다.
73
+ * 나머지는 성능을 위해 동적 모드를 사용합니다.
74
+ */
75
+ importMode: "fetch",
76
+ },
77
+ };
78
+
79
+ export default config;
80
+ ```
81
+
82
+ 애플리케이션을 감싸기 위해 Live Sync 서버를 시작하세요:
83
+
84
+ 독립형 서버 사용 예시:
85
+
86
+ ```json5 fileName="package.json"
87
+ {
88
+ "scripts": {
89
+ // ... 다른 스크립트들
90
+ "live:start": "npx intlayer live",
91
+ },
92
+ }
93
+ ```
94
+
95
+ `--process` 인수를 사용하여 애플리케이션 서버를 병렬로 사용할 수도 있습니다.
96
+
97
+ Next.js 사용 예시:
98
+
99
+ ```json5 fileName="package.json"
100
+ {
101
+ "scripts": {
102
+ // ... 다른 스크립트들
103
+ "build": "next build",
104
+ "dev": "next dev",
105
+ "start": "npx intlayer live --with 'next start'",
106
+ },
107
+ }
108
+ ```
109
+
110
+ Vite 사용 예시:
111
+
112
+ ```json5 fileName="package.json"
113
+ {
114
+ "scripts": {
115
+ // ... 다른 스크립트들
116
+ "build": "vite build",
117
+ "dev": "vite dev",
118
+ "start": "npx intlayer live --with 'vite start'",
119
+ },
120
+ }
121
+ ```
122
+
123
+ Live Sync 서버는 애플리케이션을 감싸고 도착하는 업데이트된 콘텐츠를 자동으로 적용합니다.
124
+
125
+ CMS로부터 변경 알림을 받기 위해, Live Sync 서버는 백엔드와 SSE 연결을 유지합니다. CMS에서 콘텐츠가 변경되면, 백엔드는 업데이트를 Live Sync 서버로 전달하고, Live Sync 서버는 새로운 사전을 기록합니다. 애플리케이션은 다음 탐색 또는 브라우저 새로고침 시 업데이트를 반영하며, 재빌드가 필요하지 않습니다.
126
+
127
+ 플로우 차트 (CMS/백엔드 -> Live Sync 서버 -> 애플리케이션 서버 -> 프론트엔드):
128
+
129
+ ![Live Sync Flow CMS/Backend/Live Sync Server/Application Server/Frontend Schema](https://github.com/aymericzip/intlayer/blob/main/docs/assets/live_sync_flow_scema.svg)
130
+
131
+ 작동 방식:
132
+
133
+ ![Live Sync Logic Schema](https://github.com/aymericzip/intlayer/blob/main/docs/assets/live_sync_logic_schema.svg)
134
+
135
+ ## 개발 워크플로우 (로컬)
136
+
137
+ - 개발 중에는 애플리케이션이 시작될 때 모든 원격 사전을 가져오므로 업데이트를 빠르게 테스트할 수 있습니다.
138
+ - Next.js로 로컬에서 Live Sync를 테스트하려면 개발 서버를 래핑하세요:
139
+
140
+ ```json5 fileName="package.json"
141
+ {
142
+ "scripts": {
143
+ // ... 다른 스크립트
144
+ "dev": "npx intlayer live --with 'next dev'",
145
+ // "dev": "npx intlayer live --with 'vite dev'", // Vite용
146
+ },
147
+ }
148
+ ```
149
+
150
+ 개발 중에 Intlayer가 Live import 변환을 적용하도록 최적화를 활성화하세요:
151
+
152
+ ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
153
+ import type { IntlayerConfig } from "intlayer";
154
+
155
+ const config: IntlayerConfig = {
156
+ editor: {
157
+ applicationURL: "http://localhost:5173",
158
+ liveSyncURL: "http://localhost:4000",
159
+ liveSync: true,
160
+ },
161
+ dictionary: {
162
+ importMode: "fetch",
163
+ },
164
+ build: {
165
+ optimize: true, // 기본값: process.env.NODE_ENV === 'production'
166
+ },
167
+ };
168
+
169
+ export default config;
170
+ ```
171
+
172
+ 이 설정은 개발 서버를 Live Sync 서버와 래핑하고, 시작 시 원격 사전을 가져오며, CMS에서 SSE를 통해 업데이트를 스트리밍합니다. 변경 사항을 보려면 페이지를 새로 고치세요.
173
+
174
+ ## 참고 사항 및 제약 조건
175
+
176
+ - 라이브 싱크 출처를 사이트 보안 정책(CSP)에 추가하세요. 라이브 싱크 URL이 `connect-src`(및 관련이 있다면 `frame-ancestors`)에 허용되어 있는지 확인하세요.
177
+ - 라이브 싱크는 정적 출력과 함께 작동하지 않습니다. Next.js의 경우, 런타임에 업데이트를 받으려면 페이지가 동적이어야 합니다(예: 전체 정적 전용 제약을 피하기 위해 `generateStaticParams`, `generateMetadata`, `getServerSideProps` 또는 `getStaticProps`를 적절히 사용).
178
+ - CMS에서 각 사전에는 `live` 플래그가 있습니다. `live=true`인 사전만 라이브 싱크 API를 통해 가져오며, 나머지는 동적으로 가져와 런타임에 변경되지 않습니다.
179
+ - `live` 플래그는 빌드 시 각 사전에 대해 평가됩니다. 빌드 시 원격 콘텐츠가 `live=true`로 표시되지 않았다면, 해당 사전에 대해 라이브 싱크를 활성화하려면 다시 빌드해야 합니다.
180
+ - 라이브 싱크 서버는 `.intlayer`에 쓸 수 있어야 합니다. 컨테이너 환경에서는 `/.intlayer`에 쓰기 권한이 있는지 확인하세요.
181
+
182
+ ## 유용한 링크
183
+
184
+ - [Intlayer CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_CMS.md)
185
+ - [Intlayer 비주얼 에디터](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_visual_editor.md)
186
+ - [구성 참조](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/configuration.md)
187
+ - [자체 호스팅 가이드](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/self_hosting.md)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-06-14
3
- updatedAt: 2026-06-29
3
+ updatedAt: 2026-07-08
4
4
  title: 새로운 Intlayer v9 - 무엇이 달라졌나요?
5
5
  description: Intlayer v9의 새로운 기능을 알아보세요. 인기 있는 i18n 라이브러리를 위한 드롭인 호환성 패키지와 컬렉션(Collections), 베리언트(Variants) 지원을 소개합니다.
6
6
  keywords:
@@ -202,6 +202,49 @@ const product = useIntlayer("product-copy", {
202
202
 
203
203
  ---
204
204
 
205
+ ## `@intlayer/analytics`: 콘텐츠 노출 추적 및 A/B 테스트
206
+
207
+ 새로운 선택적 패키지 [`@intlayer/analytics`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/analytics.md)는 방문자에게 실제로 어떤 콘텐츠가 표시되는지 알려주며, **Collections & Variants**의 마지막 퍼즐을 완성하여 콘텐츠 A/B 테스트와 변형별 전환 측정을 가능하게 합니다.
208
+
209
+ - **프로바이더 수준 추적**: `IntlayerProvider`(React / Next.js / React Native)는 로드, 라우트 변경, 로케일 변경 시 `page_view` 이벤트를 자동으로 기록합니다.
210
+ - **노드 수준 추적**: `useIntlayer`가 해석될 때마다 `content_exposure` 이벤트가 전송됩니다 — 어떤 딕셔너리 키, 키 경로, 로케일, 그리고 (해당하는 경우) 어떤 A/B **변형**이 표시되었는지. 플러시 창 내에서 동일 노드에 대한 반복 노출은 하나의 이벤트로 병합됩니다.
211
+ - **결정론적 A/B 할당**: `getVariant(experimentKey, variants)`는 서버 왕복 없이 각 세션에 변형을 할당하므로 첫 렌더링 전 깜빡임이 없습니다.
212
+ - **`useConversion()`**: 세션이 노출된 변형에 목표(가입, 클릭, 구매 등)를 귀속시킵니다.
213
+ - **설치하지 않으면 비용 없음**: `@intlayer/editor`와 동일한 tree-shakeable 패턴 — `try/catch`로 감싼 동적 `import()`와, 이를 사용하지 않는 앱에서 전체 통합을 데드 코드로 제거하는 빌드 타임 환경 변수(`INTLAYER_ANALYTICS_ENABLED`).
214
+ - **새로운 설정 스키마 없음**: 기존 `editor.backendURL`(수집 엔드포인트 / 셀프 호스팅)과 `editor.clientId`(프로젝트 키이자 활성화 스위치)를 재사용합니다.
215
+ - **개인정보 보호**: 세션 익명 해시화(SHA-256, 원본 ID 미저장), IP 미저장, 국가 단위의 대략적인 위치 정보만 사용, 약 20초마다 배치로 요청 전송.
216
+ - **대시보드**: 새로운 **Analytics** 페이지(프로젝트 선택 시 사이드바에 표시)에서 활성 사용자, 오늘의 사용자, 지난 7/30/90일 사용자, 방문자 추이 그래프, 로케일 및 위치별 분석을 확인할 수 있습니다.
217
+
218
+ ```tsx fileName="CTAButton.tsx" codeFormat="tsx"
219
+ import { useConversion } from "react-intlayer";
220
+
221
+ const CTAButton = () => {
222
+ const trackConversion = useConversion();
223
+
224
+ return (
225
+ <button
226
+ onClick={() =>
227
+ trackConversion({
228
+ experimentKey: "homepage-hero",
229
+ variant: "black_friday",
230
+ goal: "cta_click",
231
+ })
232
+ }
233
+ >
234
+ Get started
235
+ </button>
236
+ );
237
+ };
238
+ ```
239
+
240
+ ```bash packageManager="npm"
241
+ npm install @intlayer/analytics
242
+ ```
243
+
244
+ 현재 React, Next.js, React Native(`react-intlayer` 경유)에서 사용할 수 있습니다. 다른 프레임워크 바인딩(Vue, Svelte, Angular 등)은 `@intlayer/editor`와 동일한 배포 방식으로 계획되어 있습니다. 전체 가이드는 [Analytics 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/analytics.md)를 참조하세요.
245
+
246
+ ---
247
+
205
248
  ## Vite Plugin: 번들된 컴파일러 & 프록시
206
249
 
207
250
  `intlayer()` Vite 플러그인은 이제 **컴파일러**와 **로케일 라우팅 프록시**를 직접 번들로 제공하므로, 대부분의 프로젝트는 `vite.config.ts`에서 단일 플러그인만 필요합니다:
@@ -323,5 +366,6 @@ v8에서 업그레이드하는 경우, v9에는 하위 호환성을 깨뜨리는
323
366
 
324
367
  - [호환 어댑터 패키지 가이드](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/compat/index.md)
325
368
  - [동적 딕셔너리 - 컬렉션 및 베리언트](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/dynamic_dictionaries/index.md)
369
+ - [Analytics - 콘텐츠 노출 추적 및 A/B 테스트](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/analytics.md)
326
370
  - [설정 레퍼런스](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/configuration.md)
327
371
  - [CMS SDK - @intlayer/api를 통한 프로그래밍 방식 접근](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_CMS.md)
@@ -125,7 +125,7 @@ Om te zien hoe u beschikbare talen of andere parameters configureert, raadpleegt
125
125
 
126
126
  ### Authenticatie
127
127
 
128
- - **[Inloggen](https://github.com/aymericzip/intlayer/blob/main/docs/docs/nl/login.md)** - Authenticeren bij het Intlayer CMS en inloggegevens verkrijgen
128
+ - **[Inloggen](https://github.com/aymericzip/intlayer/blob/main/docs/docs/nl/cli/login.md)** - Authenticeren bij het Intlayer CMS en inloggegevens verkrijgen
129
129
 
130
130
  ### Kerncommando's
131
131
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2024-08-13
3
- updatedAt: 2026-06-17
3
+ updatedAt: 2026-07-11
4
4
  title: Configuratie (Configuration)
5
5
  description: Leer hoe u Intlayer configureert voor uw applicatie. Begrijp de verschillende instellingen en opties die beschikbaar zijn om Intlayer aan uw behoeften aan te passen.
6
6
  keywords:
@@ -14,6 +14,12 @@ slugs:
14
14
  - concept
15
15
  - configuration
16
16
  history:
17
+ - version: 9.0.0
18
+ date: 2026-07-11
19
+ changes: "`analytics` configuratie toegevoegd"
20
+ - version: 9.0.0
21
+ date: 2026-06-24
22
+ changes: "Add `enableProxy` option to the routing configuration"
17
23
  - version: 8.10.0
18
24
  date: 2026-06-17
19
25
  changes: "Optie `format` toegevoegd aan de woordenboekconfiguratie"
@@ -352,6 +358,30 @@ const config: IntlayerConfig = {
352
358
  liveSync: true,
353
359
  },
354
360
 
361
+ /**
362
+ * Analytics-configuratie.
363
+ */
364
+ analytics: {
365
+ /**
366
+ * Of het verzamelen van analytics is ingeschakeld (paginaweergaven, content-exposities, A/B-events).
367
+ * Vereist dat `editor.clientId` is ingesteld voor attributie.
368
+ * Standaard: false
369
+ */
370
+ enabled: true,
371
+
372
+ /**
373
+ * Milliseconden tussen automatische gebundelde verzendingen naar de backend.
374
+ * Standaard: 20000
375
+ */
376
+ flushInterval: 20000,
377
+
378
+ /**
379
+ * Fractie van sessies om te registreren, van 0 (geen) tot 1 (alle).
380
+ * Standaard: 1
381
+ */
382
+ sampleRate: 1,
383
+ },
384
+
355
385
  /**
356
386
  * Instellingen voor vertalingen en genereren met behulp van AI.
357
387
  */
@@ -665,6 +695,20 @@ Definieert de instellingen voor de ingebouwde visuele editor, inclusief de serve
665
695
 
666
696
  ---
667
697
 
698
+ ### Analytics-configuratie (Analytics)
699
+
700
+ Definieert instellingen voor Intlayer analytics: het verzamelen van welke content daadwerkelijk aan gebruikers wordt getoond (paginaweergaven, content-exposities) en het mogelijk maken van A/B-testen op content.
701
+
702
+ Analytics is strikt opt-in: er wordt niets verzameld tenzij `analytics.enabled` expliciet is ingesteld op `true` **en** een projectsleutel (`editor.clientId`) is geconfigureerd voor attributie. Wanneer uitgeschakeld (standaard) wordt de volledige analytics-integratie uit uw applicatiebundel verwijderd (dead-code elimination).
703
+
704
+ | Veld | Beschrijving | Type | Standaard | Voorbeeld | Opmerking |
705
+ | --------------- | ------------------------------------------------------------------------------------------- | --------- | --------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------- |
706
+ | `enabled` | Schakelt het verzamelen van analytics in (paginaweergaven, content-exposities, A/B-events). | `boolean` | `false` | `true` | Vereist dat `editor.clientId` is ingesteld voor attributie; anders blijft analytics uitgeschakeld, zelfs als `enabled` op `true` staat. |
707
+ | `flushInterval` | Milliseconden tussen automatische gebundelde verzendingen naar de backend. | `number` | `20000` | `10000` | |
708
+ | `sampleRate` | Fractie van sessies om te registreren, van `0` (geen) tot `1` (alle). | `number` | `1` | `0.5` | Sampling is deterministisch per sessie, zodat een geregistreerde sessie al zijn events rapporteert (geen gedeeltelijke funnels). |
709
+
710
+ ---
711
+
668
712
  ### Routingconfiguratie (Routing)
669
713
 
670
714
  Instellingen die het gedrag van routing regelen, inclusief URL-structuur, opslag van locales en beheer van middleware.
@@ -125,7 +125,7 @@ Aby dowiedzieć się, jak skonfigurować dostępne języki lub inne parametry, z
125
125
 
126
126
  ### Uwierzytelnianie
127
127
 
128
- - **[Zaloguj](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/login.md)** - Uwierzytelnij się w Intlayer CMS i uzyskaj dane dostępu
128
+ - **[Zaloguj](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/cli/login.md)** - Uwierzytelnij się w Intlayer CMS i uzyskaj dane dostępu
129
129
 
130
130
  ### Polecenia Podstawowe
131
131
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2024-08-13
3
- updatedAt: 2026-06-17
3
+ updatedAt: 2026-07-11
4
4
  title: Konfiguracja
5
5
  description: Dowiedz się, jak skonfigurować Intlayer dla swojej aplikacji. Zrozum różne ustawienia i opcje dostępne do dostosowania Intlayer do Twoich potrzeb.
6
6
  keywords:
@@ -14,6 +14,12 @@ slugs:
14
14
  - concept
15
15
  - configuration
16
16
  history:
17
+ - version: 9.0.0
18
+ date: 2026-07-11
19
+ changes: "Dodano konfigurację `analytics`"
20
+ - version: 9.0.0
21
+ date: 2026-06-24
22
+ changes: "Add `enableProxy` option to the routing configuration"
17
23
  - version: 8.10.0
18
24
  date: 2026-06-17
19
25
  changes: "Dodano opcję `format` do konfiguracji słownika"
@@ -352,6 +358,30 @@ const config: IntlayerConfig = {
352
358
  liveSync: true,
353
359
  },
354
360
 
361
+ /**
362
+ * Konfiguracja analityki (analytics).
363
+ */
364
+ analytics: {
365
+ /**
366
+ * Czy zbieranie danych analitycznych jest włączone (odsłony strony, ekspozycje treści, zdarzenia A/B).
367
+ * Wymaga ustawienia `editor.clientId` na potrzeby atrybucji.
368
+ * Domyślnie: false
369
+ */
370
+ enabled: true,
371
+
372
+ /**
373
+ * Milisekundy między automatycznymi zbiorczymi wysyłkami do backendu.
374
+ * Domyślnie: 20000
375
+ */
376
+ flushInterval: 20000,
377
+
378
+ /**
379
+ * Ułamek sesji do rejestrowania, od 0 (brak) do 1 (wszystkie).
380
+ * Domyślnie: 1
381
+ */
382
+ sampleRate: 1,
383
+ },
384
+
355
385
  /**
356
386
  * Ustawienia tłumaczenia i generowania opartego na AI.
357
387
  */
@@ -665,6 +695,20 @@ Definiuje ustawienia edytora wizualnego, w tym port serwera i status aktywacji.
665
695
 
666
696
  ---
667
697
 
698
+ ### Konfiguracja analityki (Analytics)
699
+
700
+ Definiuje ustawienia związane z analityką Intlayer: zbieranie informacji o tym, jakie treści są faktycznie wyświetlane użytkownikom (odsłony strony, ekspozycje treści) oraz obsługę testów A/B treści.
701
+
702
+ Analityka jest ściśle opt-in: nic nie jest zbierane, dopóki `analytics.enabled` nie zostanie jawnie ustawione na `true` **i** nie skonfigurowano klucza projektu (`editor.clientId`) na potrzeby atrybucji. Gdy jest wyłączona (domyślnie), cała integracja analityczna jest usuwana z pakietu aplikacji (dead-code elimination).
703
+
704
+ | Pole | Opis | Typ | Domyślnie | Przykład | Uwaga |
705
+ | --------------- | ----------------------------------------------------------------------------------------- | --------- | --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
706
+ | `enabled` | Włącza zbieranie danych analitycznych (odsłony strony, ekspozycje treści, zdarzenia A/B). | `boolean` | `false` | `true` | Wymaga ustawienia `editor.clientId` na potrzeby atrybucji; w przeciwnym razie analityka pozostaje wyłączona, nawet jeśli `enabled` wynosi `true`. |
707
+ | `flushInterval` | Milisekundy między automatycznymi zbiorczymi wysyłkami do backendu. | `number` | `20000` | `10000` | |
708
+ | `sampleRate` | Ułamek sesji do rejestrowania, od `0` (brak) do `1` (wszystkie). | `number` | `1` | `0.5` | Próbkowanie jest deterministyczne dla sesji, więc zarejestrowana sesja raportuje wszystkie swoje zdarzenia (bez częściowych lejków). |
709
+
710
+ ---
711
+
668
712
  ### Konfiguracja routingu (Routing)
669
713
 
670
714
  Ustawienia kontrolujące zachowanie routingu, w tym strukturę URL, przechowywanie locale i obsługę middleware.