@intlayer/docs 6.0.0 → 6.0.2-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/blog.cjs.map +1 -1
- package/dist/cjs/common.cjs +6 -5
- package/dist/cjs/common.cjs.map +1 -1
- package/dist/cjs/generated/blog.entry.cjs +318 -1863
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +1317 -6282
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +197 -1182
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +43 -84
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/esm/blog.mjs.map +1 -1
- package/dist/esm/common.mjs +2 -5
- package/dist/esm/common.mjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +318 -1863
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +1317 -6282
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +197 -1182
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs +43 -84
- package/dist/esm/generated/legal.entry.mjs.map +1 -1
- package/dist/types/blog.d.ts +1 -1
- package/dist/types/blog.d.ts.map +1 -1
- package/dist/types/common.d.ts +1 -1
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/generated/blog.entry.d.ts +1 -1
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +2 -1
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/dist/types/generated/frequentQuestions.entry.d.ts +1 -1
- package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
- package/dist/types/generated/legal.entry.d.ts +1 -1
- package/dist/types/generated/legal.entry.d.ts.map +1 -1
- package/docs/ar/intlayer_CMS.md +261 -85
- package/docs/ar/releases/v6.md +273 -0
- package/docs/ar/roadmap.md +1 -3
- package/docs/ar/vs_code_extension.md +94 -63
- package/docs/de/intlayer_CMS.md +247 -65
- package/docs/de/releases/v6.md +298 -0
- package/docs/de/roadmap.md +1 -3
- package/docs/de/vs_code_extension.md +89 -58
- package/docs/en/configuration.md +9 -2
- package/docs/en/intlayer_CMS.md +205 -23
- package/docs/en/intlayer_cli.md +4 -4
- package/docs/en/intlayer_visual_editor.md +7 -6
- package/docs/en/intlayer_with_nextjs_14.md +17 -1
- package/docs/en/intlayer_with_nextjs_15.md +17 -1
- package/docs/en/releases/v6.md +268 -0
- package/docs/en/roadmap.md +1 -3
- package/docs/en/vs_code_extension.md +79 -49
- package/docs/en-GB/intlayer_CMS.md +216 -52
- package/docs/en-GB/releases/v6.md +297 -0
- package/docs/en-GB/roadmap.md +1 -3
- package/docs/en-GB/vs_code_extension.md +79 -48
- package/docs/es/intlayer_CMS.md +257 -84
- package/docs/es/releases/v6.md +274 -0
- package/docs/es/roadmap.md +1 -3
- package/docs/es/vs_code_extension.md +90 -60
- package/docs/fr/intlayer_CMS.md +250 -68
- package/docs/fr/releases/v6.md +274 -0
- package/docs/fr/roadmap.md +1 -3
- package/docs/fr/vs_code_extension.md +94 -63
- package/docs/hi/intlayer_CMS.md +253 -77
- package/docs/hi/releases/v6.md +273 -0
- package/docs/hi/roadmap.md +1 -3
- package/docs/hi/vs_code_extension.md +92 -61
- package/docs/it/intlayer_CMS.md +251 -73
- package/docs/it/releases/v6.md +273 -0
- package/docs/it/roadmap.md +1 -3
- package/docs/it/vs_code_extension.md +94 -63
- package/docs/ja/intlayer_CMS.md +282 -97
- package/docs/ja/releases/v6.md +273 -0
- package/docs/ja/roadmap.md +1 -3
- package/docs/ja/vs_code_extension.md +99 -68
- package/docs/ko/intlayer_CMS.md +267 -93
- package/docs/ko/releases/v6.md +273 -0
- package/docs/ko/roadmap.md +1 -3
- package/docs/ko/vs_code_extension.md +88 -57
- package/docs/pt/intlayer_CMS.md +261 -83
- package/docs/pt/releases/v6.md +273 -0
- package/docs/pt/roadmap.md +1 -3
- package/docs/pt/vs_code_extension.md +89 -58
- package/docs/ru/intlayer_CMS.md +240 -65
- package/docs/ru/releases/v6.md +274 -0
- package/docs/ru/roadmap.md +1 -1
- package/docs/ru/vs_code_extension.md +83 -52
- package/docs/tr/intlayer_CMS.md +278 -96
- package/docs/tr/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/tr/intlayer_with_tanstack.md +3 -0
- package/docs/tr/releases/v6.md +273 -0
- package/docs/tr/roadmap.md +1 -1
- package/docs/tr/vs_code_extension.md +100 -71
- package/docs/zh/intlayer_CMS.md +257 -76
- package/docs/zh/releases/v6.md +273 -0
- package/docs/zh/roadmap.md +1 -3
- package/docs/zh/vs_code_extension.md +99 -68
- package/package.json +9 -8
- package/src/blog.ts +1 -1
- package/src/common.ts +2 -6
- package/src/generated/blog.entry.ts +323 -1864
- package/src/generated/docs.entry.ts +1317 -6278
- package/src/generated/frequentQuestions.entry.ts +202 -1183
- package/src/generated/legal.entry.ts +48 -85
package/docs/ko/intlayer_CMS.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
|
-
createdAt:
|
|
3
|
-
updatedAt: 2025-
|
|
4
|
-
title: Intlayer CMS | Intlayer CMS에
|
|
5
|
-
description: Intlayer CMS에 콘텐츠를
|
|
2
|
+
createdAt: 2025-08-23
|
|
3
|
+
updatedAt: 2025-08-23
|
|
4
|
+
title: Intlayer CMS | Intlayer CMS에 콘텐츠 외부화하기
|
|
5
|
+
description: 콘텐츠 관리를 팀에 위임하기 위해 Intlayer CMS에 콘텐츠를 외부화하세요.
|
|
6
6
|
keywords:
|
|
7
7
|
- CMS
|
|
8
|
-
- 비주얼
|
|
8
|
+
- 비주얼 에디터
|
|
9
9
|
- 국제화
|
|
10
|
-
-
|
|
10
|
+
- 문서화
|
|
11
11
|
- Intlayer
|
|
12
12
|
- Next.js
|
|
13
13
|
- JavaScript
|
|
@@ -19,71 +19,69 @@ slugs:
|
|
|
19
19
|
youtubeVideo: https://www.youtube.com/watch?v=UDDTnirwi_4
|
|
20
20
|
---
|
|
21
21
|
|
|
22
|
-
# Intlayer 콘텐츠 관리 시스템
|
|
22
|
+
# Intlayer 콘텐츠 관리 시스템(CMS) 문서
|
|
23
23
|
|
|
24
|
-
<iframe title="
|
|
24
|
+
<iframe title="웹 앱을 위한 비주얼 에디터 + CMS: Intlayer 설명" class="m-auto aspect-[16/9] w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/UDDTnirwi_4?autoplay=0&origin=http://intlayer.org&controls=0&rel=1"/>
|
|
25
25
|
|
|
26
|
-
Intlayer CMS는 Intlayer 프로젝트의 콘텐츠를 외부화할 수
|
|
26
|
+
Intlayer CMS는 Intlayer 프로젝트의 콘텐츠를 외부화할 수 있게 해주는 애플리케이션입니다.
|
|
27
27
|
|
|
28
|
-
이를 위해 Intlayer는 '원격 사전'
|
|
28
|
+
이를 위해 Intlayer는 '원격 사전(distant dictionaries)' 개념을 도입했습니다.
|
|
29
29
|
|
|
30
30
|

|
|
31
31
|
|
|
32
32
|
## 원격 사전 이해하기
|
|
33
33
|
|
|
34
|
-
Intlayer는 '로컬' 사전과 '원격' 사전을 구분합니다.
|
|
34
|
+
Intlayer는 '로컬(local)' 사전과 '원격(distant)' 사전을 구분합니다.
|
|
35
35
|
|
|
36
|
-
- '로컬' 사전은 Intlayer 프로젝트
|
|
36
|
+
- '로컬' 사전은 Intlayer 프로젝트 내에 선언된 사전입니다. 예를 들어 버튼의 선언 파일이나 내비게이션 바가 이에 해당합니다. 이 경우 콘텐츠가 자주 변경되지 않기 때문에 콘텐츠를 외부화하는 것은 의미가 없습니다.
|
|
37
37
|
|
|
38
|
-
- '원격' 사전은 Intlayer CMS를 통해 관리되는 사전입니다. 이는 팀이 웹사이트에서 직접 콘텐츠를 관리할 수 있도록 하며, A/B 테스트 기능과 SEO 자동
|
|
38
|
+
- '원격' 사전은 Intlayer CMS를 통해 관리되는 사전입니다. 이는 팀이 웹사이트에서 직접 콘텐츠를 관리할 수 있도록 하며, 또한 A/B 테스트 기능과 SEO 자동 최적화를 활용하는 데 목적이 있습니다.
|
|
39
39
|
|
|
40
40
|
## 비주얼 에디터 vs CMS
|
|
41
41
|
|
|
42
|
-
[Intlayer
|
|
42
|
+
[Intlayer Visual](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_visual_editor.md) 에디터는 로컬 사전을 위한 시각적 편집기에서 콘텐츠를 관리할 수 있는 도구입니다. 변경이 이루어지면, 콘텐츠는 코드베이스에서 교체됩니다. 이는 애플리케이션이 재빌드되고 페이지가 새 콘텐츠를 표시하기 위해 다시 로드된다는 것을 의미합니다.
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
반면에, Intlayer CMS는 원격 사전을 위한 시각적 편집기에서 콘텐츠를 관리할 수 있는 도구입니다. 변경이 이루어져도 콘텐츠는 코드베이스에 영향을 주지 않습니다. 그리고 웹사이트는 변경된 콘텐츠를 자동으로 표시합니다.
|
|
45
45
|
|
|
46
|
-
##
|
|
46
|
+
## 통합하기
|
|
47
47
|
|
|
48
48
|
패키지 설치 방법에 대한 자세한 내용은 아래 관련 섹션을 참조하세요:
|
|
49
49
|
|
|
50
|
-
### Next.js와
|
|
50
|
+
### Next.js와 통합하기
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
Next.js와 통합하려면 [설치 가이드](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_with_nextjs_15.md)를 참조하세요.
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
### Create React App과 통합하기
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
Create React App과 통합하려면 [설치 가이드](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_with_create_react_app.md)를 참조하세요.
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
### Vite + React와 통합하기
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
Vite + React와 통합하려면 [설치 가이드](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_with_vite+react.md)를 참조하세요.
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
## 구성
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
Intlayer 설정 파일에서 CMS 설정을 사용자 정의할 수 있습니다:
|
|
64
|
+
Intlayer 구성 파일에서 CMS 설정을 사용자 정의할 수 있습니다:
|
|
67
65
|
|
|
68
66
|
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
69
67
|
import type { IntlayerConfig } from "intlayer";
|
|
70
68
|
|
|
71
69
|
const config: IntlayerConfig = {
|
|
72
|
-
// ...
|
|
70
|
+
// ... 기타 구성 설정
|
|
73
71
|
editor: {
|
|
74
72
|
/**
|
|
75
73
|
* 필수
|
|
76
74
|
*
|
|
77
75
|
* 애플리케이션의 URL입니다.
|
|
78
|
-
*
|
|
76
|
+
* 이 URL은 시각적 편집기가 대상으로 하는 URL입니다.
|
|
79
77
|
*/
|
|
80
78
|
applicationURL: process.env.INTLAYER_APPLICATION_URL,
|
|
81
79
|
|
|
82
80
|
/**
|
|
83
81
|
* 필수
|
|
84
82
|
*
|
|
85
|
-
* 클라이언트 ID와 클라이언트
|
|
86
|
-
*
|
|
83
|
+
* 편집기를 활성화하려면 클라이언트 ID와 클라이언트 시크릿이 필요합니다.
|
|
84
|
+
* 이를 통해 콘텐츠를 편집하는 사용자를 식별할 수 있습니다.
|
|
87
85
|
* Intlayer 대시보드 - 프로젝트(https://intlayer.org/dashboard/projects)에서 새 클라이언트를 생성하여 얻을 수 있습니다.
|
|
88
86
|
* clientId: process.env.INTLAYER_CLIENT_ID,
|
|
89
87
|
* clientSecret: process.env.INTLAYER_CLIENT_SECRET,
|
|
@@ -94,20 +92,20 @@ const config: IntlayerConfig = {
|
|
|
94
92
|
/**
|
|
95
93
|
* 선택 사항
|
|
96
94
|
*
|
|
97
|
-
* Intlayer CMS를 자체 호스팅하는
|
|
95
|
+
* Intlayer CMS를 자체 호스팅하는 경우, CMS의 URL을 설정할 수 있습니다.
|
|
98
96
|
*
|
|
99
97
|
* Intlayer CMS의 URL입니다.
|
|
100
|
-
* 기본값은 https://intlayer.org로
|
|
98
|
+
* 기본값은 https://intlayer.org 로 설정되어 있습니다.
|
|
101
99
|
*/
|
|
102
100
|
cmsURL: process.env.INTLAYER_CMS_URL,
|
|
103
101
|
|
|
104
102
|
/**
|
|
105
103
|
* 선택 사항
|
|
106
104
|
*
|
|
107
|
-
* Intlayer CMS를 자체 호스팅하는
|
|
105
|
+
* Intlayer CMS를 자체 호스팅하는 경우, 백엔드의 URL을 설정할 수 있습니다.
|
|
108
106
|
*
|
|
109
|
-
* Intlayer
|
|
110
|
-
* 기본값은 https://back.intlayer.org로
|
|
107
|
+
* Intlayer CMS의 백엔드 URL입니다.
|
|
108
|
+
* 기본값은 https://back.intlayer.org 로 설정되어 있습니다.
|
|
111
109
|
*/
|
|
112
110
|
backendURL: process.env.INTLAYER_BACKEND_URL,
|
|
113
111
|
},
|
|
@@ -119,21 +117,21 @@ export default config;
|
|
|
119
117
|
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
120
118
|
/** @type {import('intlayer').IntlayerConfig} */
|
|
121
119
|
const config = {
|
|
122
|
-
// ...
|
|
120
|
+
// ... 기타 구성 설정
|
|
123
121
|
editor: {
|
|
124
122
|
/**
|
|
125
123
|
* 필수
|
|
126
124
|
*
|
|
127
125
|
* 애플리케이션의 URL입니다.
|
|
128
|
-
*
|
|
126
|
+
* 이 URL은 시각적 편집기가 대상으로 하는 URL입니다.
|
|
129
127
|
*/
|
|
130
128
|
applicationURL: process.env.INTLAYER_APPLICATION_URL,
|
|
131
129
|
|
|
132
130
|
/**
|
|
133
131
|
* 필수
|
|
134
132
|
*
|
|
135
|
-
* 클라이언트 ID와 클라이언트
|
|
136
|
-
*
|
|
133
|
+
* 편집기를 활성화하려면 클라이언트 ID와 클라이언트 시크릿이 필요합니다.
|
|
134
|
+
* 이를 통해 콘텐츠를 편집하는 사용자를 식별할 수 있습니다.
|
|
137
135
|
* Intlayer 대시보드 - 프로젝트(https://intlayer.org/dashboard/projects)에서 새 클라이언트를 생성하여 얻을 수 있습니다.
|
|
138
136
|
* clientId: process.env.INTLAYER_CLIENT_ID,
|
|
139
137
|
* clientSecret: process.env.INTLAYER_CLIENT_SECRET,
|
|
@@ -147,7 +145,7 @@ const config = {
|
|
|
147
145
|
* Intlayer CMS를 자체 호스팅하는 경우 CMS의 URL을 설정할 수 있습니다.
|
|
148
146
|
*
|
|
149
147
|
* Intlayer CMS의 URL입니다.
|
|
150
|
-
* 기본값은 https://intlayer.org로
|
|
148
|
+
* 기본값은 https://intlayer.org 로 설정되어 있습니다.
|
|
151
149
|
*/
|
|
152
150
|
cmsURL: process.env.INTLAYER_CMS_URL,
|
|
153
151
|
|
|
@@ -156,8 +154,8 @@ const config = {
|
|
|
156
154
|
*
|
|
157
155
|
* Intlayer CMS를 자체 호스팅하는 경우 백엔드의 URL을 설정할 수 있습니다.
|
|
158
156
|
*
|
|
159
|
-
* Intlayer
|
|
160
|
-
* 기본값은 https://back.intlayer.org로
|
|
157
|
+
* Intlayer CMS의 URL입니다.
|
|
158
|
+
* 기본값은 https://back.intlayer.org 로 설정되어 있습니다.
|
|
161
159
|
*/
|
|
162
160
|
backendURL: process.env.INTLAYER_BACKEND_URL,
|
|
163
161
|
},
|
|
@@ -169,21 +167,21 @@ export default config;
|
|
|
169
167
|
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
170
168
|
/** @type {import('intlayer').IntlayerConfig} */
|
|
171
169
|
const config = {
|
|
172
|
-
// ...
|
|
170
|
+
// ... 기타 구성 설정
|
|
173
171
|
editor: {
|
|
174
172
|
/**
|
|
175
173
|
* 필수
|
|
176
174
|
*
|
|
177
175
|
* 애플리케이션의 URL입니다.
|
|
178
|
-
*
|
|
176
|
+
* 시각적 편집기가 대상으로 하는 URL입니다.
|
|
179
177
|
*/
|
|
180
178
|
applicationURL: process.env.INTLAYER_APPLICATION_URL,
|
|
181
179
|
|
|
182
180
|
/**
|
|
183
181
|
* 필수
|
|
184
182
|
*
|
|
185
|
-
* 클라이언트 ID와 클라이언트
|
|
186
|
-
*
|
|
183
|
+
* 에디터를 활성화하려면 클라이언트 ID와 클라이언트 시크릿이 필요합니다.
|
|
184
|
+
* 이를 통해 콘텐츠를 편집하는 사용자를 식별할 수 있습니다.
|
|
187
185
|
* Intlayer 대시보드 - 프로젝트(https://intlayer.org/dashboard/projects)에서 새 클라이언트를 생성하여 얻을 수 있습니다.
|
|
188
186
|
* clientId: process.env.INTLAYER_CLIENT_ID,
|
|
189
187
|
* clientSecret: process.env.INTLAYER_CLIENT_SECRET,
|
|
@@ -197,16 +195,17 @@ const config = {
|
|
|
197
195
|
* Intlayer CMS를 자체 호스팅하는 경우 CMS의 URL을 설정할 수 있습니다.
|
|
198
196
|
*
|
|
199
197
|
* Intlayer CMS의 URL입니다.
|
|
200
|
-
* 기본값은 https://intlayer.org로
|
|
198
|
+
* 기본값은 https://intlayer.org 로 설정되어 있습니다.
|
|
199
|
+
*/
|
|
201
200
|
cmsURL: process.env.INTLAYER_CMS_URL,
|
|
202
201
|
|
|
203
202
|
/**
|
|
204
203
|
* 선택 사항
|
|
205
204
|
*
|
|
206
|
-
* Intlayer CMS를 자체 호스팅하는 경우
|
|
205
|
+
* Intlayer CMS를 자체 호스팅하는 경우 백엔드 URL을 설정할 수 있습니다.
|
|
207
206
|
*
|
|
208
207
|
* Intlayer CMS의 URL입니다.
|
|
209
|
-
* 기본값은 https://back.intlayer.org로
|
|
208
|
+
* 기본값은 https://back.intlayer.org 로 설정되어 있습니다.
|
|
210
209
|
*/
|
|
211
210
|
backendURL: process.env.INTLAYER_BACKEND_URL,
|
|
212
211
|
},
|
|
@@ -215,73 +214,88 @@ const config = {
|
|
|
215
214
|
module.exports = config;
|
|
216
215
|
```
|
|
217
216
|
|
|
218
|
-
> 클라이언트 ID와 클라이언트
|
|
217
|
+
> 클라이언트 ID와 클라이언트 시크릿이 없는 경우, [Intlayer 대시보드 - 프로젝트](https://intlayer.org/dashboard/projects)에서 새 클라이언트를 생성하여 얻을 수 있습니다.
|
|
219
218
|
|
|
220
|
-
> 사용 가능한 모든 매개변수를
|
|
219
|
+
> 사용 가능한 모든 매개변수를 확인하려면 [구성 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/configuration.md)를 참조하세요.
|
|
221
220
|
|
|
222
221
|
## CMS 사용하기
|
|
223
222
|
|
|
224
|
-
###
|
|
223
|
+
### 구성 푸시하기
|
|
225
224
|
|
|
226
|
-
Intlayer CMS를
|
|
225
|
+
Intlayer CMS를 구성하려면 [intlayer CLI](https://github.com/aymericzip/intlayer/tree/main/docs/ko/intlayer_cli.md) 명령어를 사용할 수 있습니다.
|
|
227
226
|
|
|
228
227
|
```bash
|
|
229
228
|
npx intlayer config push
|
|
230
229
|
```
|
|
231
230
|
|
|
232
|
-
> `intlayer.config.ts`
|
|
231
|
+
> `intlayer.config.ts` 구성 파일에서 환경 변수를 사용하는 경우, `--env` 인수를 사용하여 원하는 환경을 지정할 수 있습니다:
|
|
233
232
|
|
|
234
233
|
```bash
|
|
235
234
|
npx intlayer config push --env production
|
|
236
235
|
```
|
|
237
236
|
|
|
238
|
-
이
|
|
237
|
+
이 명령어는 구성을 Intlayer CMS에 업로드합니다.
|
|
239
238
|
|
|
240
239
|
### 사전 푸시하기
|
|
241
240
|
|
|
242
|
-
|
|
241
|
+
로케일 사전을 원격 사전으로 변환하려면 [intlayer CLI](https://github.com/aymericzip/intlayer/tree/main/docs/ko/intlayer_cli.md) 명령어를 사용할 수 있습니다.
|
|
243
242
|
|
|
244
243
|
```bash
|
|
245
244
|
npx intlayer dictionary push -d my-first-dictionary-key
|
|
246
245
|
```
|
|
247
246
|
|
|
248
|
-
> `intlayer.config.ts`
|
|
247
|
+
> `intlayer.config.ts` 구성 파일에서 환경 변수를 사용하는 경우 `--env` 인수를 사용하여 원하는 환경을 지정할 수 있습니다:
|
|
249
248
|
|
|
250
249
|
```bash
|
|
251
250
|
npx intlayer dictionary push -d my-first-dictionary-key --env production
|
|
252
251
|
```
|
|
253
252
|
|
|
254
|
-
이 명령은 초기 콘텐츠 사전을 업로드하여 Intlayer 플랫폼을 통해 비동기적으로 가져오고 편집할 수 있도록
|
|
253
|
+
이 명령은 초기 콘텐츠 사전을 업로드하여 Intlayer 플랫폼을 통해 비동기적으로 가져오고 편집할 수 있도록 합니다.
|
|
255
254
|
|
|
256
|
-
### 사전
|
|
255
|
+
### 사전 편집
|
|
257
256
|
|
|
258
257
|
그런 다음 [Intlayer CMS](https://intlayer.org/dashboard/content)에서 사전을 보고 관리할 수 있습니다.
|
|
259
258
|
|
|
260
|
-
##
|
|
259
|
+
## 라이브 동기화
|
|
261
260
|
|
|
262
|
-
|
|
261
|
+
라이브 동기화는 앱이 런타임에 CMS 콘텐츠 변경 사항을 반영할 수 있게 합니다. 재빌드나 재배포가 필요 없습니다. 활성화되면 업데이트가 라이브 동기화 서버로 스트리밍되어 애플리케이션이 읽는 사전을 갱신합니다.
|
|
263
262
|
|
|
264
|
-
|
|
265
|
-
|
|
263
|
+
> Live Sync는 지속적인 서버 연결이 필요하며 엔터프라이즈 플랜에서만 사용할 수 있습니다.
|
|
264
|
+
|
|
265
|
+
Intlayer 구성을 업데이트하여 Live Sync를 활성화하세요:
|
|
266
266
|
|
|
267
267
|
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
268
268
|
import type { IntlayerConfig } from "intlayer";
|
|
269
269
|
|
|
270
270
|
const config: IntlayerConfig = {
|
|
271
|
-
// ...
|
|
271
|
+
// ... 기타 구성 설정
|
|
272
272
|
editor: {
|
|
273
|
-
// ... 다른 설정
|
|
274
|
-
|
|
275
273
|
/**
|
|
276
|
-
*
|
|
277
|
-
* 예를 들어,
|
|
274
|
+
* 변경 사항이 감지되면 로케일 구성을 핫 리로딩할 수 있도록 활성화합니다.
|
|
275
|
+
* 예를 들어, 사전이 추가되거나 업데이트되면 애플리케이션이
|
|
276
|
+
* 페이지에 표시되는 콘텐츠를 업데이트합니다.
|
|
278
277
|
*
|
|
279
|
-
* 핫 리로딩은 서버와의 지속적인 연결이 필요하기
|
|
278
|
+
* 핫 리로딩은 서버와의 지속적인 연결이 필요하기 때문에,
|
|
279
|
+
* `enterprise` 플랜 고객에게만 제공됩니다.
|
|
280
280
|
*
|
|
281
281
|
* 기본값: false
|
|
282
282
|
*/
|
|
283
283
|
liveSync: true,
|
|
284
284
|
},
|
|
285
|
+
build: {
|
|
286
|
+
/**
|
|
287
|
+
* 사전이 어떻게 가져오는지를 제어합니다:
|
|
288
|
+
*
|
|
289
|
+
* - "live": 사전은 Live Sync API를 사용하여 동적으로 가져옵니다.
|
|
290
|
+
* useIntlayer를 useDictionaryDynamic으로 대체합니다.
|
|
291
|
+
*
|
|
292
|
+
* 참고: 라이브 모드는 Live Sync API를 사용하여 사전을 가져옵니다. API 호출이
|
|
293
|
+
* 실패하면 사전은 동적으로 가져옵니다.
|
|
294
|
+
* 참고: 원격 콘텐츠가 있고 "live" 플래그가 있는 사전만 라이브 모드를 사용합니다.
|
|
295
|
+
* 나머지는 성능을 위해 동적 모드를 사용합니다.
|
|
296
|
+
*/
|
|
297
|
+
importMode: "live",
|
|
298
|
+
},
|
|
285
299
|
};
|
|
286
300
|
|
|
287
301
|
export default config;
|
|
@@ -290,20 +304,34 @@ export default config;
|
|
|
290
304
|
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
291
305
|
/** @type {import('intlayer').IntlayerConfig} */
|
|
292
306
|
const config = {
|
|
293
|
-
// ...
|
|
307
|
+
// ... 기타 구성 설정
|
|
294
308
|
editor: {
|
|
295
|
-
// ... 다른 설정
|
|
296
|
-
|
|
297
309
|
/**
|
|
298
|
-
*
|
|
299
|
-
* 예를 들어,
|
|
310
|
+
* 변경 사항이 감지되면 로케일 구성을 핫 리로딩할 수 있도록 활성화합니다.
|
|
311
|
+
* 예를 들어, 사전이 추가되거나 업데이트되면 애플리케이션이 페이지에 표시되는
|
|
312
|
+
* 콘텐츠를 업데이트합니다.
|
|
300
313
|
*
|
|
301
|
-
* 핫 리로딩은 서버와의 지속적인 연결이
|
|
314
|
+
* 핫 리로딩은 서버와의 지속적인 연결이 필요하므로,
|
|
315
|
+
* `enterprise` 플랜 클라이언트에서만 사용할 수 있습니다.
|
|
302
316
|
*
|
|
303
317
|
* 기본값: false
|
|
304
318
|
*/
|
|
305
319
|
liveSync: true,
|
|
306
320
|
},
|
|
321
|
+
build: {
|
|
322
|
+
/**
|
|
323
|
+
* 사전이 어떻게 가져와지는지 제어합니다:
|
|
324
|
+
*
|
|
325
|
+
* - "live": 사전이 Live Sync API를 사용하여 동적으로 가져와집니다.
|
|
326
|
+
* useIntlayer를 useDictionaryDynamic으로 대체합니다.
|
|
327
|
+
*
|
|
328
|
+
* 참고: 라이브 모드는 Live Sync API를 사용하여 사전을 가져옵니다. API 호출이
|
|
329
|
+
* 실패하면 사전은 동적으로 가져와집니다.
|
|
330
|
+
* 참고: 원격 콘텐츠가 있고 "live" 플래그가 설정된 사전만 라이브 모드를 사용합니다.
|
|
331
|
+
* 나머지는 성능을 위해 동적 모드를 사용합니다.
|
|
332
|
+
*/
|
|
333
|
+
importMode: "live",
|
|
334
|
+
},
|
|
307
335
|
};
|
|
308
336
|
|
|
309
337
|
export default config;
|
|
@@ -312,45 +340,191 @@ export default config;
|
|
|
312
340
|
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
313
341
|
/** @type {import('intlayer').IntlayerConfig} */
|
|
314
342
|
const config = {
|
|
315
|
-
// ...
|
|
343
|
+
// ... 기타 구성 설정
|
|
316
344
|
editor: {
|
|
317
|
-
// ... 다른 설정
|
|
318
|
-
|
|
319
345
|
/**
|
|
320
|
-
*
|
|
321
|
-
* 예를 들어,
|
|
346
|
+
* 변경 사항이 감지되면 로케일 구성을 핫 리로딩할 수 있습니다.
|
|
347
|
+
* 예를 들어, 사전이 추가되거나 업데이트되면 애플리케이션이
|
|
348
|
+
* 페이지에 표시되는 내용을 업데이트합니다.
|
|
322
349
|
*
|
|
323
|
-
* 핫 리로딩은 서버와의 지속적인 연결이 필요하기
|
|
350
|
+
* 핫 리로딩은 서버와의 지속적인 연결이 필요하기 때문에,
|
|
351
|
+
* `enterprise` 플랜 클라이언트에서만 사용할 수 있습니다.
|
|
324
352
|
*
|
|
325
353
|
* 기본값: false
|
|
326
354
|
*/
|
|
327
355
|
liveSync: true,
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* Live Sync 서버의 포트입니다.
|
|
359
|
+
*
|
|
360
|
+
* 기본값: 4000
|
|
361
|
+
*/
|
|
362
|
+
liveSyncPort: 4000,
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* Live Sync 서버의 URL입니다.
|
|
366
|
+
*
|
|
367
|
+
* 기본값: http://localhost:{liveSyncPort}
|
|
368
|
+
*/
|
|
369
|
+
liveSyncURL: "https://live.example.com",
|
|
370
|
+
},
|
|
371
|
+
build: {
|
|
372
|
+
/**
|
|
373
|
+
* 사전이 어떻게 임포트되는지 제어합니다:
|
|
374
|
+
*
|
|
375
|
+
* - "live": 사전은 Live Sync API를 사용하여 동적으로 가져옵니다.
|
|
376
|
+
* useIntlayer를 useDictionaryDynamic으로 대체합니다.
|
|
377
|
+
*
|
|
378
|
+
* 참고: 라이브 모드는 Live Sync API를 사용하여 사전을 가져옵니다. API 호출이 실패하면
|
|
379
|
+
* 사전은 동적으로 임포트됩니다.
|
|
380
|
+
* 참고: 원격 콘텐츠와 "live" 플래그가 있는 사전만 라이브 모드를 사용합니다.
|
|
381
|
+
* 다른 사전은 성능을 위해 동적 모드를 사용합니다.
|
|
382
|
+
*/
|
|
383
|
+
importMode: "live",
|
|
328
384
|
},
|
|
329
385
|
};
|
|
330
386
|
|
|
331
387
|
module.exports = config;
|
|
332
388
|
```
|
|
333
389
|
|
|
334
|
-
|
|
390
|
+
애플리케이션을 감싸기 위해 Live Sync 서버를 시작하세요:
|
|
391
|
+
|
|
392
|
+
Next.js 사용 예시:
|
|
393
|
+
|
|
394
|
+
```json5 fileName="package.json"
|
|
395
|
+
{
|
|
396
|
+
"scripts": {
|
|
397
|
+
// ... 다른 스크립트들
|
|
398
|
+
"build": "next build",
|
|
399
|
+
"dev": "next dev",
|
|
400
|
+
"start": "npx intlayer live --process 'next start'",
|
|
401
|
+
},
|
|
402
|
+
}
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
Vite 사용 예시:
|
|
406
|
+
|
|
407
|
+
```json5 fileName="package.json"
|
|
408
|
+
{
|
|
409
|
+
"scripts": {
|
|
410
|
+
// ... 다른 스크립트들
|
|
411
|
+
"build": "vite build",
|
|
412
|
+
"dev": "vite dev",
|
|
413
|
+
"start": "npx intlayer live --process 'vite start'",
|
|
414
|
+
},
|
|
415
|
+
}
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
Live Sync 서버는 애플리케이션을 감싸고 도착하는 업데이트된 콘텐츠를 자동으로 적용합니다.
|
|
419
|
+
|
|
420
|
+
CMS로부터 변경 알림을 받기 위해, Live Sync 서버는 백엔드와 SSE 연결을 유지합니다. CMS에서 콘텐츠가 변경되면, 백엔드는 업데이트를 Live Sync 서버로 전달하고, Live Sync 서버는 새로운 사전을 기록합니다. 애플리케이션은 다음 탐색 또는 브라우저 새로고침 시 업데이트를 반영하며, 재빌드가 필요하지 않습니다.
|
|
421
|
+
|
|
422
|
+
플로우 차트 (CMS/백엔드 -> Live Sync 서버 -> 애플리케이션 서버 -> 프론트엔드):
|
|
423
|
+
|
|
424
|
+

|
|
425
|
+
|
|
426
|
+
작동 방식:
|
|
427
|
+
|
|
428
|
+

|
|
335
429
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
430
|
+
### 개발 워크플로우 (로컬)
|
|
431
|
+
|
|
432
|
+
- 개발 중에는 애플리케이션이 시작될 때 모든 원격 사전을 가져오므로 업데이트를 빠르게 테스트할 수 있습니다.
|
|
433
|
+
- Next.js로 로컬에서 Live Sync를 테스트하려면 개발 서버를 래핑하세요:
|
|
434
|
+
|
|
435
|
+
```json5 fileName="package.json"
|
|
436
|
+
{
|
|
437
|
+
"scripts": {
|
|
438
|
+
// ... 다른 스크립트
|
|
439
|
+
"dev": "npx intlayer live --process 'next dev'",
|
|
440
|
+
// "dev": "npx intlayer live --process 'vite dev'", // Vite용
|
|
441
|
+
},
|
|
442
|
+
}
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
개발 중에 Intlayer가 Live import 변환을 적용하도록 최적화를 활성화하세요:
|
|
446
|
+
|
|
447
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
448
|
+
import type { IntlayerConfig } from "intlayer";
|
|
449
|
+
|
|
450
|
+
const config: IntlayerConfig = {
|
|
451
|
+
editor: {
|
|
452
|
+
applicationURL: "http://localhost:5173",
|
|
453
|
+
liveSyncURL: "http://localhost:4000",
|
|
454
|
+
liveSync: true,
|
|
455
|
+
},
|
|
456
|
+
build: {
|
|
457
|
+
optimize: true,
|
|
458
|
+
importMode: "live",
|
|
459
|
+
},
|
|
460
|
+
};
|
|
461
|
+
|
|
462
|
+
export default config;
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
466
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
467
|
+
const config = {
|
|
468
|
+
editor: {
|
|
469
|
+
applicationURL: "http://localhost:5173",
|
|
470
|
+
liveSyncURL: "http://localhost:4000",
|
|
471
|
+
liveSync: true,
|
|
472
|
+
},
|
|
473
|
+
build: {
|
|
474
|
+
optimize: true,
|
|
475
|
+
importMode: "live",
|
|
476
|
+
},
|
|
477
|
+
};
|
|
478
|
+
|
|
479
|
+
export default config;
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
483
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
484
|
+
const config = {
|
|
485
|
+
editor: {
|
|
486
|
+
applicationURL: "http://localhost:5173",
|
|
487
|
+
liveSyncURL: "http://localhost:4000",
|
|
488
|
+
liveSync: true,
|
|
489
|
+
},
|
|
490
|
+
build: {
|
|
491
|
+
optimize: true,
|
|
492
|
+
importMode: "live",
|
|
493
|
+
},
|
|
494
|
+
};
|
|
495
|
+
|
|
496
|
+
module.exports = config;
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
이 설정은 개발 서버를 Live Sync 서버와 래핑하고, 시작 시 원격 사전을 가져오며, CMS에서 SSE를 통해 업데이트를 스트리밍합니다. 변경 사항을 보려면 페이지를 새로 고치세요.
|
|
500
|
+
|
|
501
|
+
참고 사항 및 제약 조건:
|
|
502
|
+
|
|
503
|
+
- 라이브 싱크 출처를 사이트 보안 정책(CSP)에 추가하세요. 라이브 싱크 URL이 `connect-src`(및 관련이 있다면 `frame-ancestors`)에 허용되어 있는지 확인하세요.
|
|
504
|
+
- 라이브 싱크는 정적 출력과 함께 작동하지 않습니다. Next.js의 경우, 런타임에 업데이트를 받으려면 페이지가 동적이어야 합니다(예: 전체 정적 전용 제약을 피하기 위해 `generateStaticParams`, `generateMetadata`, `getServerSideProps` 또는 `getStaticProps`를 적절히 사용).
|
|
505
|
+
- CMS에서 각 사전에는 `live` 플래그가 있습니다. `live=true`인 사전만 라이브 싱크 API를 통해 가져오며, 나머지는 동적으로 가져와 런타임에 변경되지 않습니다.
|
|
506
|
+
- `live` 플래그는 빌드 시 각 사전에 대해 평가됩니다. 빌드 시 원격 콘텐츠가 `live=true`로 표시되지 않았다면, 해당 사전에 대해 라이브 싱크를 활성화하려면 다시 빌드해야 합니다.
|
|
507
|
+
- 라이브 싱크 서버는 `.intlayer`에 쓸 수 있어야 합니다. 컨테이너 환경에서는 `/.intlayer`에 쓰기 권한이 있는지 확인하세요.
|
|
339
508
|
|
|
340
509
|
## 디버그
|
|
341
510
|
|
|
342
|
-
CMS에서 문제가
|
|
511
|
+
CMS에서 문제가 발생하면 다음을 확인하세요:
|
|
343
512
|
|
|
344
|
-
- 애플리케이션이 실행 중인지
|
|
513
|
+
- 애플리케이션이 실행 중인지 확인하세요.
|
|
345
514
|
|
|
346
|
-
-
|
|
515
|
+
- [`editor`](https://intlayer.org/doc/concept/configuration#editor-configuration) 설정이 Intlayer 구성 파일에 올바르게 설정되어 있는지 확인하세요.
|
|
347
516
|
- 필수 필드:
|
|
348
|
-
|
|
349
|
-
|
|
517
|
+
- 애플리케이션 URL은 에디터 구성(`applicationURL`)에 설정한 값과 일치해야 합니다.
|
|
518
|
+
- CMS URL
|
|
519
|
+
|
|
520
|
+
- 프로젝트 구성이 Intlayer CMS에 푸시되었는지 확인하세요.
|
|
350
521
|
|
|
351
|
-
-
|
|
352
|
-
- 비주얼 에디터는 iframe을 사용하여 웹사이트를 표시합니다. 웹사이트의 콘텐츠 보안 정책(CSP)이 CMS URL을 `frame-ancestors`로 허용하는지 확인하세요(기본값: 'https://intlayer.org'). 에디터 콘솔에서 오류를 확인하세요.
|
|
522
|
+
- 비주얼 에디터는 iframe을 사용하여 웹사이트를 표시합니다. 웹사이트의 콘텐츠 보안 정책(CSP)이 CMS URL을 `frame-ancestors`로 허용하는지 확인하세요(기본값은 'https://intlayer.org'). 에디터 콘솔에서 오류가 있는지 확인하세요.
|
|
353
523
|
|
|
354
524
|
## 문서 이력
|
|
355
525
|
|
|
356
|
-
|
|
526
|
+
| 버전 | 날짜 | 변경 사항 |
|
|
527
|
+
| ------ | ---------- | ------------------------------------ |
|
|
528
|
+
| 6.0.1 | 2025-09-22 | 라이브 동기화 문서 추가 |
|
|
529
|
+
| 6.0.0 | 2025-09-04 | `hotReload` 필드를 `liveSync`로 교체 |
|
|
530
|
+
| 5.5.10 | 2025-06-29 | 이력 초기화 |
|