@intlayer/docs 9.0.0-canary.10 → 9.0.0-canary.11
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/generated/docs.entry.cjs +20 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +20 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/intlayer_CMS.md +16 -1
- package/docs/ar/releases/v9.md +58 -1
- package/docs/ar/self_hosting.md +349 -0
- package/docs/bn/intlayer_CMS.md +570 -0
- package/docs/bn/releases/v9.md +358 -0
- package/docs/cs/releases/v9.md +358 -0
- package/docs/de/intlayer_CMS.md +117 -1
- package/docs/de/releases/v9.md +61 -1
- package/docs/de/self_hosting.md +349 -0
- package/docs/en/intlayer_CMS.md +171 -1
- package/docs/en/releases/v9.md +45 -2
- package/docs/en/self_hosting.md +349 -0
- package/docs/en-GB/intlayer_CMS.md +16 -1
- package/docs/en-GB/releases/v9.md +47 -2
- package/docs/en-GB/self_hosting.md +349 -0
- package/docs/es/intlayer_CMS.md +117 -1
- package/docs/es/releases/v9.md +61 -1
- package/docs/es/self_hosting.md +349 -0
- package/docs/fr/intlayer_CMS.md +117 -1
- package/docs/fr/releases/v9.md +61 -1
- package/docs/fr/self_hosting.md +349 -0
- package/docs/hi/intlayer_CMS.md +16 -1
- package/docs/hi/releases/v9.md +59 -1
- package/docs/hi/self_hosting.md +349 -0
- package/docs/id/releases/v9.md +31 -1
- package/docs/id/self_hosting.md +349 -0
- package/docs/it/intlayer_CMS.md +117 -1
- package/docs/it/releases/v9.md +61 -1
- package/docs/it/self_hosting.md +349 -0
- package/docs/ja/intlayer_CMS.md +191 -10
- package/docs/ja/releases/v9.md +31 -1
- package/docs/ja/self_hosting.md +349 -0
- package/docs/ko/intlayer_CMS.md +189 -6
- package/docs/ko/releases/v9.md +30 -1
- package/docs/ko/self_hosting.md +349 -0
- package/docs/nl/releases/v9.md +358 -0
- package/docs/pl/intlayer_CMS.md +16 -1
- package/docs/pl/releases/v9.md +58 -1
- package/docs/pl/self_hosting.md +349 -0
- package/docs/pt/intlayer_CMS.md +117 -1
- package/docs/pt/releases/v9.md +61 -1
- package/docs/pt/self_hosting.md +349 -0
- package/docs/ru/intlayer_CMS.md +196 -15
- package/docs/ru/releases/v9.md +59 -1
- package/docs/ru/self_hosting.md +349 -0
- package/docs/tr/intlayer_CMS.md +16 -1
- package/docs/tr/releases/v9.md +46 -1
- package/docs/tr/self_hosting.md +349 -0
- package/docs/uk/intlayer_CMS.md +16 -1
- package/docs/uk/releases/v9.md +58 -1
- package/docs/uk/self_hosting.md +349 -0
- package/docs/vi/releases/v9.md +31 -1
- package/docs/vi/self_hosting.md +349 -0
- package/docs/zh/releases/v9.md +31 -1
- package/docs/zh/self_hosting.md +349 -0
- package/package.json +6 -6
- package/src/generated/docs.entry.ts +20 -0
|
@@ -0,0 +1,570 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-08-23
|
|
3
|
+
updatedAt: 2026-06-29
|
|
4
|
+
title: Intlayer CMS | আপনার কন্টেন্ট Intlayer CMS-এ এক্সটার্নালাইজ করুন
|
|
5
|
+
description: আপনার টিমের কাছে কন্টেন্ট ম্যানেজমেন্ট অর্পণ করতে Intlayer CMS-এ আপনার কন্টেন্ট এক্সটার্নালাইজ করুন।
|
|
6
|
+
keywords:
|
|
7
|
+
- CMS
|
|
8
|
+
- Visual Editor
|
|
9
|
+
- Internationalization
|
|
10
|
+
- Documentation
|
|
11
|
+
- Intlayer
|
|
12
|
+
- Next.js
|
|
13
|
+
- JavaScript
|
|
14
|
+
- React
|
|
15
|
+
slugs:
|
|
16
|
+
- doc
|
|
17
|
+
- concept
|
|
18
|
+
- cms
|
|
19
|
+
youtubeVideo: https://www.youtube.com/watch?v=UDDTnirwi_4
|
|
20
|
+
history:
|
|
21
|
+
- version: 9.0.0
|
|
22
|
+
date: 2026-06-30
|
|
23
|
+
changes: "সেলফ-হোস্টিং বিভাগ যোগ করুন: Docker Compose বুটস্ট্র্যাপ, সার্ভিস ইনভেন্টরি, SDK কনফিগারেশন, ঐচ্ছিক বৈশিষ্ট্য, এবং আপগ্রেড নোট"
|
|
24
|
+
- version: 9.0.0
|
|
25
|
+
date: 2026-06-29
|
|
26
|
+
changes: "প্রোগ্রামাটিক CMS অ্যাক্সেসের জন্য @intlayer/api SDK (createIntlayerCMS) বিভাগ যোগ করুন"
|
|
27
|
+
- version: 6.0.1
|
|
28
|
+
date: 2025-09-22
|
|
29
|
+
changes: "লাইভ সিঙ্ক ডকুমেন্টেশন যোগ করুন"
|
|
30
|
+
- version: 6.0.0
|
|
31
|
+
date: 2025-09-04
|
|
32
|
+
changes: "`hotReload` ফিল্ড `liveSync` দিয়ে প্রতিস্থাপন করুন"
|
|
33
|
+
- version: 5.5.10
|
|
34
|
+
date: 2025-06-29
|
|
35
|
+
changes: "ইতিহাস শুরু করুন"
|
|
36
|
+
author: aymericzip
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
# Intlayer Content Management System (CMS) ডকুমেন্টেশন
|
|
40
|
+
|
|
41
|
+
<iframe title="Visual Editor + CMS for Your Web App: Intlayer Explained" 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=https://intlayer.org&controls=0&rel=1"/>
|
|
42
|
+
|
|
43
|
+
Intlayer CMS একটি অ্যাপ্লিকেশন যা আপনাকে একটি Intlayer প্রজেক্টের কন্টেন্ট এক্সটার্নালাইজ করার সুযোগ দেয়।
|
|
44
|
+
|
|
45
|
+
এর জন্য, Intlayer 'দূরবর্তী ডিকশনারি' ধারণাটি প্রবর্তন করে।
|
|
46
|
+
|
|
47
|
+

|
|
48
|
+
|
|
49
|
+
## বিষয়বস্তু সূচি
|
|
50
|
+
|
|
51
|
+
<TOC/>
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## দূরবর্তী ডিকশনারি বোঝা
|
|
56
|
+
|
|
57
|
+
Intlayer 'স্থানীয়' এবং 'দূরবর্তী' ডিকশনারির মধ্যে পার্থক্য করে।
|
|
58
|
+
|
|
59
|
+
- একটি 'স্থানীয়' ডিকশনারি হল এমন একটি ডিকশনারি যা আপনার Intlayer প্রজেক্টে ঘোষণা করা হয়। যেমন একটি বাটনের ডিক্লারেশন ফাইল বা আপনার নেভিগেশন বার। এই ক্ষেত্রে কন্টেন্ট এক্সটার্নালাইজ করার কোনো অর্থ নেই কারণ এই কন্টেন্ট প্রায়শই পরিবর্তন হওয়ার কথা নয়।
|
|
60
|
+
|
|
61
|
+
- একটি 'দূরবর্তী' ডিকশনারি হল এমন একটি ডিকশনারি যা Intlayer CMS-এর মাধ্যমে পরিচালিত হয়। এটি আপনার টিমকে সরাসরি আপনার ওয়েবসাইটে কন্টেন্ট পরিচালনা করার অনুমতি দিতে এবং A/B পরীক্ষা বৈশিষ্ট্য ও SEO স্বয়ংক্রিয় অপ্টিমাইজেশন ব্যবহার করার লক্ষ্যে কার্যকর হতে পারে।
|
|
62
|
+
|
|
63
|
+
## ভিজ্যুয়াল এডিটর বনাম CMS
|
|
64
|
+
|
|
65
|
+
[Intlayer ভিজ্যুয়াল](https://github.com/aymericzip/intlayer/blob/main/docs/docs/bn/intlayer_visual_editor.md) এডিটর হল একটি টুল যা আপনাকে স্থানীয় ডিকশনারির জন্য একটি ভিজ্যুয়াল এডিটরে কন্টেন্ট পরিচালনা করার সুযোগ দেয়। একবার পরিবর্তন করা হলে, কোডবেসে কন্টেন্ট প্রতিস্থাপিত হবে। এর অর্থ হল অ্যাপ্লিকেশনটি পুনর্নির্মাণ হবে এবং নতুন কন্টেন্ট প্রদর্শন করতে পেজটি পুনরায় লোড হবে।
|
|
66
|
+
|
|
67
|
+
বিপরীতে, Intlayer CMS হল একটি টুল যা আপনাকে দূরবর্তী ডিকশনারির জন্য একটি ভিজ্যুয়াল এডিটরে কন্টেন্ট পরিচালনা করার সুযোগ দেয়। একবার পরিবর্তন করা হলে, কন্টেন্ট আপনার কোডবেসকে **প্রভাবিত করবে না**। এবং ওয়েবসাইটটি স্বয়ংক্রিয়ভাবে পরিবর্তিত কন্টেন্ট প্রদর্শন করবে।
|
|
68
|
+
|
|
69
|
+
## ইন্টিগ্রেট করা
|
|
70
|
+
|
|
71
|
+
প্যাকেজটি কীভাবে ইন্সটল করতে হয় সে সম্পর্কে আরো বিস্তারিত জানতে, নীচের প্রাসঙ্গিক বিভাগটি দেখুন:
|
|
72
|
+
|
|
73
|
+
### Next.js-এর সাথে ইন্টিগ্রেট করা
|
|
74
|
+
|
|
75
|
+
Next.js-এর সাথে ইন্টিগ্রেশনের জন্য, [সেটআপ গাইড](https://github.com/aymericzip/intlayer/blob/main/docs/docs/bn/intlayer_with_nextjs_15.md) দেখুন।
|
|
76
|
+
|
|
77
|
+
### Create React App-এর সাথে ইন্টিগ্রেট করা
|
|
78
|
+
|
|
79
|
+
Create React App-এর সাথে ইন্টিগ্রেশনের জন্য, [সেটআপ গাইড](https://github.com/aymericzip/intlayer/blob/main/docs/docs/bn/intlayer_with_create_react_app.md) দেখুন।
|
|
80
|
+
|
|
81
|
+
### Vite + React-এর সাথে ইন্টিগ্রেট করা
|
|
82
|
+
|
|
83
|
+
Vite + React-এর সাথে ইন্টিগ্রেশনের জন্য, [সেটআপ গাইড](https://github.com/aymericzip/intlayer/blob/main/docs/docs/bn/intlayer_with_vite+react.md) দেখুন।
|
|
84
|
+
|
|
85
|
+
## কনফিগারেশন
|
|
86
|
+
|
|
87
|
+
Intlayer CMS-এ লগইন করতে নিম্নলিখিত কমান্ড চালান:
|
|
88
|
+
|
|
89
|
+
```bash packageManager="npm"
|
|
90
|
+
npx intlayer login
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
```bash packageManager="yarn"
|
|
94
|
+
yarn intlayer login
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
```bash packageManager="pnpm"
|
|
98
|
+
pnpm intlayer login
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
```bash packageManager="bun"
|
|
102
|
+
bun x intlayer login
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
এটি প্রমাণীকরণ প্রক্রিয়া সম্পন্ন করতে এবং Intlayer পরিষেবাগুলি ব্যবহার করার জন্য প্রয়োজনীয় ক্রেডেনশিয়াল (Client ID এবং Client Secret) পেতে আপনার ডিফল্ট ব্রাউজার খুলবে।
|
|
106
|
+
|
|
107
|
+
আপনার Intlayer কনফিগারেশন ফাইলে, আপনি CMS সেটিংস কাস্টমাইজ করতে পারেন:
|
|
108
|
+
|
|
109
|
+
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
110
|
+
import type { IntlayerConfig } from "intlayer";
|
|
111
|
+
|
|
112
|
+
const config: IntlayerConfig = {
|
|
113
|
+
// ... অন্যান্য কনফিগারেশন সেটিংস
|
|
114
|
+
editor: {
|
|
115
|
+
/**
|
|
116
|
+
* প্রয়োজনীয়
|
|
117
|
+
*
|
|
118
|
+
* অ্যাপ্লিকেশনের URL।
|
|
119
|
+
* এটি ভিজ্যুয়াল এডিটর দ্বারা লক্ষ্য করা URL।
|
|
120
|
+
*/
|
|
121
|
+
applicationURL: process.env.INTLAYER_APPLICATION_URL,
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* প্রয়োজনীয়
|
|
125
|
+
*
|
|
126
|
+
* এডিটর সক্রিয় করতে Client ID এবং client secret প্রয়োজন।
|
|
127
|
+
* এগুলি কন্টেন্ট সম্পাদনাকারী ব্যবহারকারীকে চিহ্নিত করতে দেয়।
|
|
128
|
+
* Intlayer Dashboard - Projects-এ একটি নতুন ক্লায়েন্ট তৈরি করে এগুলি পাওয়া যায় (https://app.intlayer.org/projects)।
|
|
129
|
+
* clientId: process.env.INTLAYER_CLIENT_ID,
|
|
130
|
+
* clientSecret: process.env.INTLAYER_CLIENT_SECRET,
|
|
131
|
+
*/
|
|
132
|
+
clientId: process.env.INTLAYER_CLIENT_ID,
|
|
133
|
+
clientSecret: process.env.INTLAYER_CLIENT_SECRET,
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* ঐচ্ছিক
|
|
137
|
+
*
|
|
138
|
+
* আপনি যদি Intlayer CMS সেলফ-হোস্ট করেন, তাহলে CMS-এর URL সেট করতে পারেন।
|
|
139
|
+
*
|
|
140
|
+
* Intlayer CMS-এর URL।
|
|
141
|
+
* ডিফল্টরূপে, এটি https://intlayer.org-এ সেট করা হয়
|
|
142
|
+
*/
|
|
143
|
+
cmsURL: process.env.INTLAYER_CMS_URL,
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* ঐচ্ছিক
|
|
147
|
+
*
|
|
148
|
+
* আপনি যদি Intlayer CMS সেলফ-হোস্ট করেন, তাহলে ব্যাকএন্ডের URL সেট করতে পারেন।
|
|
149
|
+
*
|
|
150
|
+
* Intlayer CMS-এর URL।
|
|
151
|
+
* ডিফল্টরূপে, এটি https://back.intlayer.org-এ সেট করা হয়
|
|
152
|
+
*/
|
|
153
|
+
backendURL: process.env.INTLAYER_BACKEND_URL,
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
export default config;
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
> যদি আপনার কাছে client ID এবং client secret না থাকে, তাহলে [Intlayer Dashboard - Projects](https://app.intlayer.org/projects)-এ একটি নতুন ক্লায়েন্ট তৈরি করে সেগুলি পেতে পারেন।
|
|
161
|
+
|
|
162
|
+
> সমস্ত উপলব্ধ প্যারামিটার দেখতে, [কনফিগারেশন ডকুমেন্টেশন](https://github.com/aymericzip/intlayer/blob/main/docs/docs/bn/configuration.md) দেখুন।
|
|
163
|
+
|
|
164
|
+
## CMS ব্যবহার করা
|
|
165
|
+
|
|
166
|
+
### আপনার কনফিগারেশন পুশ করুন
|
|
167
|
+
|
|
168
|
+
Intlayer CMS কনফিগার করতে, আপনি [intlayer CLI](https://github.com/aymericzip/intlayer/tree/main/docs/bn/cli/index.md) কমান্ডগুলি ব্যবহার করতে পারেন।
|
|
169
|
+
|
|
170
|
+
```bash packageManager="npm"
|
|
171
|
+
npx intlayer config push
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
```bash packageManager="yarn"
|
|
175
|
+
yarn intlayer config push
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
```bash packageManager="pnpm"
|
|
179
|
+
pnpm intlayer config push
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
```bash packageManager="bun"
|
|
183
|
+
bun x intlayer config push
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
> যদি আপনি আপনার `intlayer.config.ts` কনফিগারেশন ফাইলে পরিবেশ ভেরিয়েবল ব্যবহার করেন, তাহলে `--env` আর্গুমেন্ট ব্যবহার করে পছন্দসই পরিবেশ নির্দিষ্ট করতে পারেন:
|
|
187
|
+
|
|
188
|
+
```bash packageManager="npm"
|
|
189
|
+
npx intlayer config push --env production
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
```bash packageManager="yarn"
|
|
193
|
+
yarn intlayer config push --env production
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
```bash packageManager="pnpm"
|
|
197
|
+
pnpm intlayer config push --env production
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
```bash packageManager="bun"
|
|
201
|
+
bun x intlayer config push --env production
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
এই কমান্ডটি আপনার কনফিগারেশন Intlayer CMS-এ আপলোড করে।
|
|
205
|
+
|
|
206
|
+
### একটি ডিকশনারি পুশ করুন
|
|
207
|
+
|
|
208
|
+
আপনার লোকেল ডিকশনারিগুলিকে দূরবর্তী ডিকশনারিতে রূপান্তর করতে, আপনি [intlayer CLI](https://github.com/aymericzip/intlayer/tree/main/docs/bn/cli/index.md) কমান্ডগুলি ব্যবহার করতে পারেন।
|
|
209
|
+
|
|
210
|
+
```bash packageManager="npm"
|
|
211
|
+
npx intlayer dictionary push -d my-first-dictionary-key
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
```bash packageManager="yarn"
|
|
215
|
+
yarn intlayer dictionary push -d my-first-dictionary-key
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
```bash packageManager="pnpm"
|
|
219
|
+
pnpm intlayer dictionary push -d my-first-dictionary-key
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
```bash packageManager="bun"
|
|
223
|
+
bun x intlayer dictionary push -d my-first-dictionary-key
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
> যদি আপনি আপনার `intlayer.config.ts` কনফিগারেশন ফাইলে পরিবেশ ভেরিয়েবল ব্যবহার করেন, তাহলে `--env` আর্গুমেন্ট ব্যবহার করে পছন্দসই পরিবেশ নির্দিষ্ট করতে পারেন:
|
|
227
|
+
|
|
228
|
+
```bash packageManager="npm"
|
|
229
|
+
npx intlayer dictionary push -d my-first-dictionary-key --env production
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
```bash packageManager="yarn"
|
|
233
|
+
yarn intlayer dictionary push -d my-first-dictionary-key --env production
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
```bash packageManager="pnpm"
|
|
237
|
+
pnpm intlayer dictionary push -d my-first-dictionary-key --env production
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
```bash packageManager="bun"
|
|
241
|
+
bun x intlayer dictionary push -d my-first-dictionary-key --env production
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
এই কমান্ডটি আপনার প্রাথমিক কন্টেন্ট ডিকশনারিগুলি আপলোড করে, সেগুলিকে Intlayer প্ল্যাটফর্মের মাধ্যমে অ্যাসিঙ্ক্রোনাস ফেচিং এবং এডিটিংয়ের জন্য উপলব্ধ করে।
|
|
245
|
+
|
|
246
|
+
### ডিকশনারি সম্পাদনা করুন
|
|
247
|
+
|
|
248
|
+
তারপর আপনি [Intlayer CMS](https://app.intlayer.org/content)-এ আপনার ডিকশনারি দেখতে এবং পরিচালনা করতে পারবেন।
|
|
249
|
+
|
|
250
|
+
## `@intlayer/api` SDK-এর সাথে প্রোগ্রামাটিক অ্যাক্সেস
|
|
251
|
+
|
|
252
|
+
CLI এবং ভিজ্যুয়াল এডিটরের বাইরে, Intlayer [`@intlayer/api`](https://www.npmjs.com/package/@intlayer/api) প্যাকেজে একটি টাইপড SDK শিপ করে। এটি আপনাকে CMS-কে একটি **হেডলেস কন্টেন্ট ডেটাবেস** হিসেবে ব্যবহার করতে দেয়: আপনি আপনার নিজের অ্যাপ্লিকেশন, স্ক্রিপ্ট, বা CI পাইপলাইন থেকে সরাসরি প্রজেক্ট আনতে, ডিকশনারি আনতে, এবং সেগুলি পুশ বা আপডেট করতে পারেন।
|
|
253
|
+
|
|
254
|
+
SDK আপনার জন্য প্রমাণীকরণ পরিচালনা করে। যতক্ষণ আপনার `clientId` এবং `clientSecret` উপলব্ধ থাকে (আপনার Intlayer কনফিগারেশনে বা পরিবেশে), এটি স্বয়ংক্রিয়ভাবে একটি OAuth2 অ্যাক্সেস টোকেন পায় এবং রিফ্রেশ করে এবং প্রতিটি অনুরোধে স্বাক্ষর করে।
|
|
255
|
+
|
|
256
|
+
### ইন্সটলেশন
|
|
257
|
+
|
|
258
|
+
```bash packageManager="npm"
|
|
259
|
+
npm install @intlayer/api
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
```bash packageManager="yarn"
|
|
263
|
+
yarn add @intlayer/api
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
```bash packageManager="pnpm"
|
|
267
|
+
pnpm add @intlayer/api
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
```bash packageManager="bun"
|
|
271
|
+
bun add @intlayer/api
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### এটি কীভাবে কাজ করে: অথেনটিকেটর + এন্ডপয়েন্ট
|
|
275
|
+
|
|
276
|
+
SDK ইচ্ছাকৃতভাবে **দুটি আলাদা ইম্পোর্টে** বিভক্ত, আপনার বান্ডেল ছোট রাখতে:
|
|
277
|
+
|
|
278
|
+
১। `createIntlayerCMS` — একটি হালকা **অথেনটিকেটর** তৈরি করে। এটি শুধুমাত্র ক্রেডেনশিয়াল এবং পরিচালিত অ্যাক্সেস টোকেন বহন করে; এটি কোনো নির্দিষ্ট ডোমেইন সম্পর্কে কিছু জানে না।
|
|
279
|
+
২। `dictionaryEndpoint`, `projectEndpoint`, … — প্রতি-ডোমেইন **এন্ডপয়েন্ট বাইন্ডার**, প্রতিটি তার নিজস্ব সাবপাথ থেকে ইম্পোর্ট করা হয় (`@intlayer/api/dictionary`, `@intlayer/api/project`, …)। আপনি প্রয়োজনীয় এন্ডপয়েন্টে অথেনটিকেটর পাস করেন।
|
|
280
|
+
|
|
281
|
+
যেহেতু প্রতিটি এন্ডপয়েন্ট আলাদাভাবে ইম্পোর্ট করা হয়, আপনার বান্ডেলে শুধুমাত্র আপনার ব্যবহৃত ডোমেইনগুলি অন্তর্ভুক্ত হয় — `dictionaryEndpoint` ইম্পোর্ট করলে কখনই project, AI, বা অন্য কোনো ডোমেইন ক্লায়েন্ট টেনে আনে না।
|
|
282
|
+
|
|
283
|
+
```typescript fileName="cms.ts" codeFormat="typescript"
|
|
284
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
285
|
+
|
|
286
|
+
// কনফিগারেশন ঐচ্ছিক: বাদ দিলে, ক্রেডেনশিয়াল
|
|
287
|
+
// `@intlayer/config/built` থেকে পড়া হয়, যা INTLAYER_CLIENT_ID এবং
|
|
288
|
+
// INTLAYER_CLIENT_SECRET পরিবেশ ভেরিয়েবল রিজলভ করে।
|
|
289
|
+
export const cmsAuthenticator = createIntlayerCMS();
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
> [!WARNING]
|
|
293
|
+
> CMS ক্রেডেনশিয়াল (`clientId` / `clientSecret`) আপনার কন্টেন্টে **লেখার অ্যাক্সেস** প্রদান করে। অথেনটিকেটর সর্বদা **সার্ভার সাইডে** (server actions, route handlers, scripts, CI) তৈরি করুন। কখনই এটি ক্লায়েন্ট-সাইড কোডে ইম্পোর্ট করবেন না বা আপনার ক্রেডেনশিয়াল ব্রাউজারে এক্সপোজ করবেন না।
|
|
294
|
+
|
|
295
|
+
যদি আপনি বিল্ড-টাইম কনফিগারেশনের উপর নির্ভর না করতে চান, তাহলে স্পষ্টভাবে ক্রেডেনশিয়াল পাস করুন:
|
|
296
|
+
|
|
297
|
+
```typescript fileName="cms.ts" codeFormat="typescript"
|
|
298
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
299
|
+
|
|
300
|
+
export const cmsAuthenticator = createIntlayerCMS({
|
|
301
|
+
editor: {
|
|
302
|
+
clientId: process.env.INTLAYER_CLIENT_ID,
|
|
303
|
+
clientSecret: process.env.INTLAYER_CLIENT_SECRET,
|
|
304
|
+
// ঐচ্ছিক, সেলফ-হোস্টেড ব্যাকএন্ডের জন্য:
|
|
305
|
+
// backendURL: process.env.INTLAYER_BACKEND_URL,
|
|
306
|
+
},
|
|
307
|
+
});
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
> [Intlayer Dashboard - Projects](https://app.intlayer.org/projects)-এ একটি নতুন অ্যাক্সেস কী তৈরি করে আপনার ক্রেডেনশিয়াল পান।
|
|
311
|
+
|
|
312
|
+
### প্রজেক্ট আনুন
|
|
313
|
+
|
|
314
|
+
```typescript fileName="projects.ts" codeFormat="typescript"
|
|
315
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
316
|
+
import { projectEndpoint } from "@intlayer/api/project";
|
|
317
|
+
|
|
318
|
+
const cmsAuthenticator = createIntlayerCMS();
|
|
319
|
+
|
|
320
|
+
// আপনার ক্রেডেনশিয়াল দিয়ে অ্যাক্সেসযোগ্য প্রজেক্টগুলির তালিকা করুন
|
|
321
|
+
const { data: projects } =
|
|
322
|
+
await projectEndpoint(cmsAuthenticator).getProjects();
|
|
323
|
+
|
|
324
|
+
// নির্বাচিত প্রজেক্টের সমষ্টিগত লোকালাইজেশন ইনসাইট পড়ুন
|
|
325
|
+
const { data: insights } =
|
|
326
|
+
await projectEndpoint(cmsAuthenticator).getProjectInsights();
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
### ডিকশনারি আনুন
|
|
330
|
+
|
|
331
|
+
```typescript fileName="read-dictionaries.ts" codeFormat="typescript"
|
|
332
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
333
|
+
import { dictionaryEndpoint } from "@intlayer/api/dictionary";
|
|
334
|
+
|
|
335
|
+
const cmsAuthenticator = createIntlayerCMS();
|
|
336
|
+
|
|
337
|
+
// প্রজেক্টের প্রতিটি দূরবর্তী ডিকশনারির তালিকা করুন
|
|
338
|
+
const { data: dictionaries } =
|
|
339
|
+
await dictionaryEndpoint(cmsAuthenticator).getDictionaries();
|
|
340
|
+
|
|
341
|
+
// অথবা কী দ্বারা একটি একক ডিকশনারি পান
|
|
342
|
+
const { data: dictionary } = await dictionaryEndpoint(
|
|
343
|
+
cmsAuthenticator
|
|
344
|
+
).getDictionary("my-first-dictionary-key");
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### ডিকশনারি পুশ ও আপডেট করুন
|
|
348
|
+
|
|
349
|
+
কন্টেন্ট ফিরিয়ে লিখতে CMS-কে ডেটাবেস হিসেবে ব্যবহার করুন:
|
|
350
|
+
|
|
351
|
+
```typescript fileName="write-dictionaries.ts" codeFormat="typescript"
|
|
352
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
353
|
+
import { dictionaryEndpoint } from "@intlayer/api/dictionary";
|
|
354
|
+
|
|
355
|
+
const cmsAuthenticator = createIntlayerCMS();
|
|
356
|
+
|
|
357
|
+
// একটি নতুন ডিকশনারি তৈরি করুন
|
|
358
|
+
await dictionaryEndpoint(cmsAuthenticator).addDictionary({
|
|
359
|
+
key: "my-first-dictionary-key",
|
|
360
|
+
content: { title: "Hello world" },
|
|
361
|
+
});
|
|
362
|
+
|
|
363
|
+
// একটি ব্যাচ ডিকশনারি আপসার্ট করুন (একটি কলে তৈরি বা আপডেট করুন)
|
|
364
|
+
await dictionaryEndpoint(cmsAuthenticator).pushDictionaries([
|
|
365
|
+
{ key: "home", content: { title: "Home" } },
|
|
366
|
+
{ key: "about", content: { title: "About" } },
|
|
367
|
+
]);
|
|
368
|
+
|
|
369
|
+
// একটি বিদ্যমান ডিকশনারি আপডেট করুন
|
|
370
|
+
await dictionaryEndpoint(cmsAuthenticator).updateDictionary({
|
|
371
|
+
id: "<dictionary-id>",
|
|
372
|
+
key: "home",
|
|
373
|
+
content: { title: "Updated title" },
|
|
374
|
+
});
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
> পরামর্শ: নিজেকে পুনরাবৃত্তি এড়াতে বাউন্ড এন্ডপয়েন্ট পুনর্ব্যবহার করুন:
|
|
378
|
+
>
|
|
379
|
+
> ```typescript codeFormat="typescript"
|
|
380
|
+
> const dictionary = dictionaryEndpoint(cmsAuthenticator);
|
|
381
|
+
> await dictionary.pushDictionaries([myDictionary]);
|
|
382
|
+
> const { data } = await dictionary.getDictionaries();
|
|
383
|
+
> ```
|
|
384
|
+
|
|
385
|
+
### একটি একক মেথড এক্সট্র্যাক্ট করা
|
|
386
|
+
|
|
387
|
+
প্রতিটি এন্ডপয়েন্ট মেথড ইতিমধ্যে প্রমাণীকৃত এবং স্বতন্ত্র (এটি নিজের টোকেন হ্যান্ডলিং বহন করে), তাই আপনি একটি এক্সট্র্যাক্ট করে পাস করতে পারেন — উদাহরণস্বরূপ একটি নির্ভরতা হিসেবে ইনজেক্ট করতে:
|
|
388
|
+
|
|
389
|
+
```typescript fileName="push.ts" codeFormat="typescript"
|
|
390
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
391
|
+
import { dictionaryEndpoint } from "@intlayer/api/dictionary";
|
|
392
|
+
|
|
393
|
+
const dictionary = dictionaryEndpoint(createIntlayerCMS());
|
|
394
|
+
|
|
395
|
+
// ইতিমধ্যে প্রমাণীকৃত — প্রতিটি কলে স্বয়ংক্রিয়ভাবে টোকেন রিফ্রেশ করে
|
|
396
|
+
export const pushDictionaries = dictionary.pushDictionaries;
|
|
397
|
+
|
|
398
|
+
// ব্যবহার
|
|
399
|
+
await pushDictionaries([{ key: "home", content: { title: "Home" } }]);
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
## লাইভ সিঙ্ক
|
|
403
|
+
|
|
404
|
+
লাইভ সিঙ্ক আপনার অ্যাপকে রানটাইমে CMS কন্টেন্ট পরিবর্তন প্রতিফলিত করতে দেয়। পুনর্নির্মাণ বা পুনরায় স্থাপনার প্রয়োজন নেই। সক্রিয় হলে, আপডেটগুলি একটি লাইভ সিঙ্ক সার্ভারে স্ট্রিম করা হয় যা আপনার অ্যাপ্লিকেশন পড়া ডিকশনারিগুলি রিফ্রেশ করে।
|
|
405
|
+
|
|
406
|
+
আপনার Intlayer কনফিগারেশন আপডেট করে লাইভ সিঙ্ক সক্রিয় করুন:
|
|
407
|
+
|
|
408
|
+
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
409
|
+
import type { IntlayerConfig } from "intlayer";
|
|
410
|
+
|
|
411
|
+
const config: IntlayerConfig = {
|
|
412
|
+
// ... অন্যান্য কনফিগারেশন সেটিংস
|
|
413
|
+
editor: {
|
|
414
|
+
/**
|
|
415
|
+
* পরিবর্তন সনাক্ত হলে লোকেল কনফিগারেশনের হট রিলোডিং সক্রিয় করে।
|
|
416
|
+
* উদাহরণস্বরূপ, যখন একটি ডিকশনারি যোগ বা আপডেট করা হয়, অ্যাপ্লিকেশনটি
|
|
417
|
+
* পেজে প্রদর্শিত কন্টেন্ট আপডেট করে।
|
|
418
|
+
*
|
|
419
|
+
* কারণ হট রিলোডিংয়ের জন্য সার্ভারের সাথে একটি ক্রমাগত সংযোগ প্রয়োজন,
|
|
420
|
+
* এটি শুধুমাত্র `enterprise` প্ল্যানের ক্লায়েন্টদের জন্য উপলব্ধ।
|
|
421
|
+
*
|
|
422
|
+
* ডিফল্ট: false
|
|
423
|
+
*/
|
|
424
|
+
liveSync: true,
|
|
425
|
+
},
|
|
426
|
+
dictionary: {
|
|
427
|
+
/**
|
|
428
|
+
* ডিকশনারি কীভাবে ইম্পোর্ট করা হয় তা নিয়ন্ত্রণ করে:
|
|
429
|
+
*
|
|
430
|
+
* - "fetch": ডিকশনারিগুলি লাইভ সিঙ্ক API ব্যবহার করে ডায়নামিকভাবে ফেচ করা হয়।
|
|
431
|
+
* useIntlayer কে useDictionaryDynamic দিয়ে প্রতিস্থাপন করে।
|
|
432
|
+
*
|
|
433
|
+
* নোট: লাইভ মোড ডিকশনারি ফেচ করতে লাইভ সিঙ্ক API ব্যবহার করে। API কল
|
|
434
|
+
* ব্যর্থ হলে, ডিকশনারিগুলি ডায়নামিকভাবে ইম্পোর্ট করা হয়।
|
|
435
|
+
* নোট: শুধুমাত্র দূরবর্তী কন্টেন্ট এবং "live" ফ্ল্যাগযুক্ত ডিকশনারিগুলি লাইভ মোড ব্যবহার করে।
|
|
436
|
+
* অন্যগুলি পারফরম্যান্সের জন্য ডায়নামিক মোড ব্যবহার করে।
|
|
437
|
+
*/
|
|
438
|
+
importMode: "fetch",
|
|
439
|
+
},
|
|
440
|
+
};
|
|
441
|
+
|
|
442
|
+
export default config;
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
আপনার অ্যাপ্লিকেশন র্যাপ করতে লাইভ সিঙ্ক সার্ভার শুরু করুন:
|
|
446
|
+
|
|
447
|
+
স্বতন্ত্র সার্ভার ব্যবহার করার উদাহরণ:
|
|
448
|
+
|
|
449
|
+
```json5 fileName="package.json"
|
|
450
|
+
{
|
|
451
|
+
"scripts": {
|
|
452
|
+
// ... অন্যান্য স্ক্রিপ্ট
|
|
453
|
+
"live:start": "npx intlayer live",
|
|
454
|
+
},
|
|
455
|
+
}
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
আপনি `--process` আর্গুমেন্ট ব্যবহার করে আপনার অ্যাপ্লিকেশন সার্ভার সমান্তরালে ব্যবহার করতে পারেন।
|
|
459
|
+
|
|
460
|
+
Next.js ব্যবহার করার উদাহরণ:
|
|
461
|
+
|
|
462
|
+
```json5 fileName="package.json"
|
|
463
|
+
{
|
|
464
|
+
"scripts": {
|
|
465
|
+
// ... অন্যান্য স্ক্রিপ্ট
|
|
466
|
+
"build": "next build",
|
|
467
|
+
"dev": "next dev",
|
|
468
|
+
"start": "npx intlayer live --with 'next start'",
|
|
469
|
+
},
|
|
470
|
+
}
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
Vite ব্যবহার করার উদাহরণ:
|
|
474
|
+
|
|
475
|
+
```json5 fileName="package.json"
|
|
476
|
+
{
|
|
477
|
+
"scripts": {
|
|
478
|
+
// ... অন্যান্য স্ক্রিপ্ট
|
|
479
|
+
"build": "vite build",
|
|
480
|
+
"dev": "vite dev",
|
|
481
|
+
"start": "npx intlayer live --with 'vite start'",
|
|
482
|
+
},
|
|
483
|
+
}
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
লাইভ সিঙ্ক সার্ভার আপনার অ্যাপ্লিকেশন র্যাপ করে এবং আসার সাথে সাথে আপডেট করা কন্টেন্ট স্বয়ংক্রিয়ভাবে প্রয়োগ করে।
|
|
487
|
+
|
|
488
|
+
CMS থেকে পরিবর্তন বিজ্ঞপ্তি পেতে, লাইভ সিঙ্ক সার্ভার ব্যাকএন্ডে একটি SSE সংযোগ বজায় রাখে। CMS-এ কন্টেন্ট পরিবর্তন হলে, ব্যাকএন্ড লাইভ সিঙ্ক সার্ভারে আপডেট ফরোয়ার্ড করে, যা নতুন ডিকশনারি লেখে। আপনার অ্যাপ্লিকেশন পরবর্তী নেভিগেশন বা ব্রাউজার রিলোডে আপডেট প্রতিফলিত করবে, কোনো পুনর্নির্মাণ ছাড়াই।
|
|
489
|
+
|
|
490
|
+
ফ্লো চার্ট (CMS/Backend -> Live Sync Server -> Application Server -> Frontend):
|
|
491
|
+
|
|
492
|
+

|
|
493
|
+
|
|
494
|
+
এটি কীভাবে কাজ করে:
|
|
495
|
+
|
|
496
|
+

|
|
497
|
+
|
|
498
|
+
### ডেভেলপমেন্ট ওয়ার্কফ্লো (স্থানীয়)
|
|
499
|
+
|
|
500
|
+
- ডেভেলপমেন্টে, সমস্ত দূরবর্তী ডিকশনারি অ্যাপ্লিকেশন শুরু হলে ফেচ করা হয়, তাই আপনি দ্রুত আপডেট পরীক্ষা করতে পারেন।
|
|
501
|
+
- Next.js-এর সাথে স্থানীয়ভাবে লাইভ সিঙ্ক পরীক্ষা করতে, আপনার dev সার্ভার র্যাপ করুন:
|
|
502
|
+
|
|
503
|
+
```json5 fileName="package.json"
|
|
504
|
+
{
|
|
505
|
+
"scripts": {
|
|
506
|
+
// ... অন্যান্য স্ক্রিপ্ট
|
|
507
|
+
"dev": "npx intlayer live --with 'next dev'",
|
|
508
|
+
// "dev": "npx intlayer live --with 'vite dev'", // Vite-এর জন্য
|
|
509
|
+
},
|
|
510
|
+
}
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
ডেভেলপমেন্টের সময় Intlayer লাইভ ইম্পোর্ট ট্রান্সফর্মেশন প্রয়োগ করে তা নিশ্চিত করতে অপ্টিমাইজেশন সক্রিয় করুন:
|
|
514
|
+
|
|
515
|
+
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
516
|
+
import type { IntlayerConfig } from "intlayer";
|
|
517
|
+
|
|
518
|
+
const config: IntlayerConfig = {
|
|
519
|
+
editor: {
|
|
520
|
+
applicationURL: "http://localhost:5173",
|
|
521
|
+
liveSyncURL: "http://localhost:4000",
|
|
522
|
+
liveSync: true,
|
|
523
|
+
},
|
|
524
|
+
dictionary: {
|
|
525
|
+
importMode: "fetch",
|
|
526
|
+
},
|
|
527
|
+
build: {
|
|
528
|
+
optimize: true, // ডিফল্ট: process.env.NODE_ENV === 'production'
|
|
529
|
+
},
|
|
530
|
+
};
|
|
531
|
+
|
|
532
|
+
export default config;
|
|
533
|
+
```
|
|
534
|
+
|
|
535
|
+
এই সেটআপ আপনার dev সার্ভারকে লাইভ সিঙ্ক সার্ভার দিয়ে র্যাপ করে, স্টার্টআপে দূরবর্তী ডিকশনারি ফেচ করে, এবং SSE-র মাধ্যমে CMS থেকে আপডেট স্ট্রিম করে। পরিবর্তনগুলি দেখতে পেজ রিফ্রেশ করুন।
|
|
536
|
+
|
|
537
|
+
নোট এবং সীমাবদ্ধতা:
|
|
538
|
+
|
|
539
|
+
- আপনার সাইট নিরাপত্তা নীতিতে (CSP) লাইভ সিঙ্ক অরিজিন যোগ করুন। লাইভ সিঙ্ক URL `connect-src`-এ অনুমোদিত আছে কিনা নিশ্চিত করুন (এবং প্রযোজ্য হলে `frame-ancestors`)।
|
|
540
|
+
- লাইভ সিঙ্ক স্ট্যাটিক আউটপুটের সাথে কাজ করে না। Next.js-এর জন্য, রানটাইমে আপডেট পেতে পেজটি ডায়নামিক হতে হবে (উদাহরণস্বরূপ, সম্পূর্ণ স্ট্যাটিক-মাত্র সীমাবদ্ধতা এড়াতে `generateStaticParams`, `generateMetadata`, `getServerSideProps`, বা `getStaticProps` উপযুক্তভাবে ব্যবহার করুন)।
|
|
541
|
+
- CMS-এ, প্রতিটি ডিকশনারিতে একটি `live` ফ্ল্যাগ থাকে। শুধুমাত্র `live=true` ফ্ল্যাগযুক্ত ডিকশনারিগুলি লাইভ সিঙ্ক API-র মাধ্যমে ফেচ করা হয়; অন্যগুলি ডায়নামিকভাবে ইম্পোর্ট করা হয় এবং রানটাইমে অপরিবর্তিত থাকে।
|
|
542
|
+
- `live` ফ্ল্যাগ বিল্ড সময়ে প্রতিটি ডিকশনারির জন্য মূল্যায়ন করা হয়। যদি দূরবর্তী কন্টেন্ট বিল্ডের সময় `live=true` হিসেবে ফ্ল্যাগ না করা হয়, তাহলে সেই ডিকশনারির জন্য লাইভ সিঙ্ক সক্রিয় করতে আপনাকে পুনর্নির্মাণ করতে হবে।
|
|
543
|
+
- লাইভ সিঙ্ক সার্ভার অবশ্যই `.intlayer`-এ লিখতে সক্ষম হতে হবে। কন্টেইনারে, `/.intlayer`-এ লেখার অ্যাক্সেস নিশ্চিত করুন।
|
|
544
|
+
|
|
545
|
+
## সেলফ-হোস্টিং
|
|
546
|
+
|
|
547
|
+
Intlayer সম্পূর্ণরূপে আপনার নিজস্ব অবকাঠামোতে চলতে পারে। একটি এক-লাইনার পূর্ণ স্ট্যাক (ড্যাশবোর্ড, API, ডেটাবেস, অবজেক্ট স্টোরেজ, এবং ইমেইল) Docker Compose-এর মাধ্যমে বুটস্ট্র্যাপ করে:
|
|
548
|
+
|
|
549
|
+
```sh
|
|
550
|
+
curl -fsSL https://intlayer.org/install.sh | sh
|
|
551
|
+
```
|
|
552
|
+
|
|
553
|
+
সম্পূর্ণ সেটআপ গাইড, পরিবেশ ভেরিয়েবল রেফারেন্স, আপগ্রেড নির্দেশাবলী, এবং ব্যাকআপ/পুনরুদ্ধার পদ্ধতির জন্য, [সেলফ-হোস্টিং গাইড](https://github.com/aymericzip/intlayer/blob/main/docs/docs/bn/self_hosting.md) দেখুন।
|
|
554
|
+
|
|
555
|
+
---
|
|
556
|
+
|
|
557
|
+
## ডিবাগ
|
|
558
|
+
|
|
559
|
+
CMS-এর সাথে কোনো সমস্যা হলে, নিম্নলিখিতগুলি পরীক্ষা করুন:
|
|
560
|
+
|
|
561
|
+
- অ্যাপ্লিকেশনটি চলছে।
|
|
562
|
+
|
|
563
|
+
- আপনার Intlayer কনফিগারেশন ফাইলে [`editor`](https://intlayer.org/doc/concept/configuration#editor-configuration) কনফিগারেশন সঠিকভাবে সেট করা আছে।
|
|
564
|
+
- প্রয়োজনীয় ফিল্ড:
|
|
565
|
+
- অ্যাপ্লিকেশন URL এডিটর কনফিগারেশনে আপনি যেটি সেট করেছেন তার সাথে মেলে কিনা (`applicationURL`)।
|
|
566
|
+
- CMS URL
|
|
567
|
+
|
|
568
|
+
- নিশ্চিত করুন যে প্রজেক্ট কনফিগারেশন Intlayer CMS-এ পুশ করা হয়েছে।
|
|
569
|
+
|
|
570
|
+
- ভিজ্যুয়াল এডিটর আপনার ওয়েবসাইট প্রদর্শন করতে একটি iframe ব্যবহার করে। নিশ্চিত করুন যে আপনার ওয়েবসাইটের Content Security Policy (CSP) CMS url কে `frame-ancestors` হিসেবে অনুমতি দেয় (ডিফল্টরূপে 'https://app.intlayer.org')। কোনো ত্রুটির জন্য এডিটর কনসোল চেক করুন।
|