@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,358 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-06-14
|
|
3
|
+
updatedAt: 2026-06-29
|
|
4
|
+
title: নতুন Intlayer v9 - কী নতুন?
|
|
5
|
+
description: Intlayer v9-এ কী নতুন তা আবিষ্কার করুন। জনপ্রিয় i18n লাইব্রেরির জন্য ড্রপ-ইন কম্প্যাটিবিলিটি প্যাকেজ, Collections এবং Variants-এর সমর্থন, এবং Docker Compose-এর মাধ্যমে সেলফ-হোস্টিং।
|
|
6
|
+
keywords:
|
|
7
|
+
- Intlayer
|
|
8
|
+
- Compatibility
|
|
9
|
+
- Migration
|
|
10
|
+
- Collections
|
|
11
|
+
- Variants
|
|
12
|
+
- CMS SDK
|
|
13
|
+
- Self-Hosting
|
|
14
|
+
- Docker
|
|
15
|
+
- i18next
|
|
16
|
+
- next-intl
|
|
17
|
+
- vue-i18n
|
|
18
|
+
slugs:
|
|
19
|
+
- doc
|
|
20
|
+
- releases
|
|
21
|
+
- v9
|
|
22
|
+
author: aymericzip
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# নতুন Intlayer v9 - কী নতুন?
|
|
26
|
+
|
|
27
|
+
Intlayer v9-এ স্বাগতম! এই প্রধান রিলিজটি প্রধান i18n লাইব্রেরিগুলির (`react-i18next`, `next-intl`, `vue-i18n` ইত্যাদি) জন্য **Compat Adapter Packages** সহ Intlayer-এ মাইগ্রেশনের পথ সহজ করার ক্ষেত্রে একটি বিশাল মাইলফলক চিহ্নিত করে এবং সমৃদ্ধ কন্টেন্ট কাঠামোর সমর্থন যোগ করে: **Collections** এবং **Variants**।
|
|
28
|
+
|
|
29
|
+
## বিষয়বস্তু সূচি
|
|
30
|
+
|
|
31
|
+
<TOC levels={[2]} maxDepth={1} />
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Compat Adapter Packages
|
|
36
|
+
|
|
37
|
+
জনপ্রিয় i18n লাইব্রেরি থেকে Intlayer-এ মাইগ্রেট করা এখন আগের চেয়ে অনেক সহজ। আমরা পাঁচটি compat প্যাকেজ তৈরি করেছি যা স্ট্যান্ডার্ড i18n লাইব্রেরির **হুবহু একই পাবলিক API** প্রকাশ করে কিন্তু রানটাইমে সমস্ত অনুবাদ কাজ Intlayer-এ অর্পণ করে।
|
|
38
|
+
|
|
39
|
+
### একই পাবলিক API কঠোর টাইপিং সহ প্রকাশ করুন
|
|
40
|
+
|
|
41
|
+
ইম্পোর্ট প্রতিস্থাপন করে, আপনি ন্যূনতম কোড পরিবর্তনের সাথে Intlayer-এর সমস্ত সুবিধা পান (আপনার প্রকৃত ডিকশনারিগুলির বিপরীতে কম্পাইল-টাইম টাইপ নিরাপত্তা সহ):
|
|
42
|
+
|
|
43
|
+
- `@intlayer/i18next`
|
|
44
|
+
- `@intlayer/react-i18next`
|
|
45
|
+
- `@intlayer/next-intl`
|
|
46
|
+
- `@intlayer/react-intl`
|
|
47
|
+
- `@intlayer/next-i18next`
|
|
48
|
+
- `@intlayer/vue-i18n`
|
|
49
|
+
- `@intlayer/lingui`
|
|
50
|
+
|
|
51
|
+
উদাহরণস্বরূপ, শুধু পরিবর্তন করুন:
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
import { useTranslation } from "react-i18next";
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
থেকে:
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
import { useTranslation } from "@intlayer/react-i18next";
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
আপনার কীগুলি এখন আপনার Intlayer ডিকশনারিগুলির বিপরীতে **কঠোরভাবে টাইপ করা** হবে, আপনার IDE-তে সম্পূর্ণ ডট-পাথ অটো-কমপ্লিশন অফার করবে!
|
|
64
|
+
|
|
65
|
+
### Bundler Alias Plugins (Vite, Next.js, Turbopack)
|
|
66
|
+
|
|
67
|
+
সমস্ত ইম্পোর্ট স্টেটমেন্ট ম্যানুয়ালি পুনরায় লেখা ছাড়াই মাইগ্রেট করার অনুমতি দিতে, প্রতিটি compat adapter প্যাকেজ `/plugin` সাবপাথের অধীনে একটি **কাস্টম bundler plugin** (Vite অথবা Next.js) অন্তর্ভুক্ত করে।
|
|
68
|
+
|
|
69
|
+
এই প্লাগিনগুলি স্বয়ংক্রিয়ভাবে বিল্ড সময়ে বিদ্যমান ইম্পোর্টগুলি (যেমন `react-i18next` বা `next-intl`) তাদের `@intlayer/*` সমতুল্যে পুনরায় লেখে।
|
|
70
|
+
|
|
71
|
+
#### Next.js (Webpack / Turbopack) উদাহরণ
|
|
72
|
+
|
|
73
|
+
`withIntlayer`-এর পরিবর্তে, আপনার Next.js কনফিগারেশনকে compat প্লাগিন দিয়ে মোড়ান:
|
|
74
|
+
|
|
75
|
+
```ts fileName="next.config.ts"
|
|
76
|
+
import { createNextI18nPlugin } from "@intlayer/next-i18next/plugin";
|
|
77
|
+
import type { NextConfig } from "next";
|
|
78
|
+
|
|
79
|
+
const withIntlayer = createNextI18nPlugin();
|
|
80
|
+
const nextConfig: NextConfig = {};
|
|
81
|
+
|
|
82
|
+
export default withIntlayer(nextConfig);
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
#### Vite (React, Vue, Solid, Svelte) উদাহরণ
|
|
86
|
+
|
|
87
|
+
```ts fileName="vite.config.ts"
|
|
88
|
+
import vueI18nVitePlugin from "@intlayer/vue-i18n/plugin";
|
|
89
|
+
|
|
90
|
+
export default defineConfig({
|
|
91
|
+
plugins: [vueI18nVitePlugin()],
|
|
92
|
+
});
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Mutualized Runtime Resolver
|
|
98
|
+
|
|
99
|
+
সমস্ত compat adapter এখন একটি একক, উচ্চ-অপ্টিমাইজড রানটাইম পার্সারের মাধ্যমে অনুবাদ রেজোলিউশন রুট করে: `@intlayer/core/messageFormat`।
|
|
100
|
+
|
|
101
|
+
- **Interpolate Message**: স্ট্যান্ডার্ড `{{var}}` (হোয়াইটস্পেস ও ডট-পাথ), ICU ফরম্যাটেড আর্গুমেন্ট (`{v, number, percent}` ইত্যাদি), এবং সরল `{var}` টেমপ্লেট রিজলভ করে।
|
|
102
|
+
- **Message Node Resolver**: নেস্টেড নোড রিজলভ করে: `insert()`, `plural()` (CLDR plural নিয়ম), `enu()` (গণনা), `gender()`, HTML ট্যাগ, অ্যারে, এবং কল করযোগ্য ফাংশন নোড।
|
|
103
|
+
- **Tokenized Tag Parser**: ইনলাইন XML/HTML ট্যাগ এবং সংখ্যাযুক্ত ট্যাগ (যেমন, `<1>children</1>`) সমর্থন করে রিচ-টেক্সট রেন্ডারিং বাক্সের বাইরে পরিচালনা করতে।
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## ফিচার স্পেক: Collections ও Variants
|
|
108
|
+
|
|
109
|
+
Intlayer v9 স্ট্যাটিক কী-ভ্যালু অবজেক্টের বাইরে প্রসারিত হয়, ডিকশনারিগুলিকে ডায়নামিক লেআউট কাঠামো ঘোষণা করার অনুমতি দেয় যা শেষ থেকে শেষ পর্যন্ত সম্পূর্ণ টাইপ করা।
|
|
110
|
+
|
|
111
|
+
### ১। Collections
|
|
112
|
+
|
|
113
|
+
CMS-পরিচালিত ক্রমানুসারে আইটেমের তালিকা সংজ্ঞায়িত করুন (যেমন FAQ, পণ্য, বা ব্লগ তালিকা)। প্রতিটি আইটেম তার নিজস্ব `.content.ts` ফাইলে একই `key` এবং একটি `item` নম্বর সহ থাকে:
|
|
114
|
+
|
|
115
|
+
```ts fileName="faq.1.content.ts"
|
|
116
|
+
import { t, type Dictionary } from "intlayer";
|
|
117
|
+
|
|
118
|
+
export default {
|
|
119
|
+
key: "faq",
|
|
120
|
+
item: 1,
|
|
121
|
+
content: {
|
|
122
|
+
question: t({ en: "What is Intlayer?", fr: "Qu'est-ce qu'Intlayer ?" }),
|
|
123
|
+
answer: t({ en: "An i18n toolkit.", fr: "Une boîte à outils i18n." }),
|
|
124
|
+
},
|
|
125
|
+
} satisfies Dictionary;
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
```ts fileName="faq.2.content.ts"
|
|
129
|
+
import { t, type Dictionary } from "intlayer";
|
|
130
|
+
|
|
131
|
+
export default {
|
|
132
|
+
key: "faq",
|
|
133
|
+
item: 2,
|
|
134
|
+
content: {
|
|
135
|
+
question: t({ en: "Is it free?", fr: "Est-ce gratuit ?" }),
|
|
136
|
+
answer: t({ en: "Yes, open-source.", fr: "Oui, open-source." }),
|
|
137
|
+
},
|
|
138
|
+
} satisfies Dictionary;
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
#### ব্যবহার:
|
|
142
|
+
|
|
143
|
+
```ts
|
|
144
|
+
// সমস্ত আইটেম অ্যারে হিসেবে আনুন
|
|
145
|
+
const allFaqs = useIntlayer("faq"); // -> { question: string, answer: string }[]
|
|
146
|
+
|
|
147
|
+
// ইন্ডেক্স দ্বারা একটি একক আইটেম আনুন
|
|
148
|
+
const faq = useIntlayer("faq", { item: 2 }); // -> { question: string, answer: string }
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### ২। Variants
|
|
152
|
+
|
|
153
|
+
A/B পরীক্ষা, মৌসুমী হেডার, ফিচার ফ্ল্যাগ, বা কাস্টম ল্যান্ডিং পেজ সরবরাহ করুন:
|
|
154
|
+
|
|
155
|
+
#### স্ট্রিং ভেরিয়েন্ট (যেমন A/B পরীক্ষা)
|
|
156
|
+
|
|
157
|
+
```ts fileName="hero.content.ts"
|
|
158
|
+
import { t, type Dictionary } from "intlayer";
|
|
159
|
+
|
|
160
|
+
export default {
|
|
161
|
+
key: "hero-banner",
|
|
162
|
+
variant: "default",
|
|
163
|
+
content: {
|
|
164
|
+
control: t({ en: "Welcome", fr: "Bienvenue" }),
|
|
165
|
+
black_friday: t({ en: "Shop now", fr: "Acheter maintenant" }),
|
|
166
|
+
},
|
|
167
|
+
} satisfies Dictionary;
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
#### ব্যবহার:
|
|
171
|
+
|
|
172
|
+
```ts
|
|
173
|
+
const banner = useIntlayer("hero-banner", { variant: "black_friday" });
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
#### অবজেক্ট ভেরিয়েন্ট (যেমন ডায়নামিক রেকর্ড)
|
|
177
|
+
|
|
178
|
+
```ts fileName="product.content.ts"
|
|
179
|
+
import { t, type Dictionary } from "intlayer";
|
|
180
|
+
|
|
181
|
+
export default {
|
|
182
|
+
key: "product-copy",
|
|
183
|
+
variant: {
|
|
184
|
+
id: "prod_123",
|
|
185
|
+
category: "books",
|
|
186
|
+
},
|
|
187
|
+
content: {
|
|
188
|
+
title: t({ en: "Clean Code", fr: "Code Propre" }),
|
|
189
|
+
},
|
|
190
|
+
} satisfies Dictionary;
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
#### ব্যবহার:
|
|
194
|
+
|
|
195
|
+
```ts
|
|
196
|
+
// শুধুমাত্র অনুরোধ করা রেকর্ড ডায়নামিকভাবে আনে (Suspense প্রয়োজন)
|
|
197
|
+
const product = useIntlayer("product-copy", {
|
|
198
|
+
variant: { id: "prod_123", category: "books" },
|
|
199
|
+
});
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## ডায়নামিক লোডিং ও বান্ডেল সাইজ অপ্টিমাইজেশন
|
|
205
|
+
|
|
206
|
+
বান্ডেলগুলি অত্যন্ত ছোট রাখতে, Intlayer v9 ডায়নামিক লেজি লোডিং সমর্থন করে।
|
|
207
|
+
|
|
208
|
+
আপনার কনফিগারেশনে, `importMode` কে `'dynamic'` বা `'fetch'`-এ সেট করুন:
|
|
209
|
+
|
|
210
|
+
```ts fileName="intlayer.config.ts"
|
|
211
|
+
export default {
|
|
212
|
+
dictionary: {
|
|
213
|
+
importMode: "dynamic", // "static" | "dynamic" | "fetch"
|
|
214
|
+
},
|
|
215
|
+
};
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
বিল্ড সময়ে, `@intlayer/swc` এবং `@intlayer/babel` আপনার ফাইলগুলি স্ক্যান করে এবং `useIntlayer` / `getIntlayer` কলগুলিকে ট্রি-শেকেবল র্যাপার দিয়ে প্রতিস্থাপন করে (`useDictionary` / `useDictionaryDynamic`)। শুধুমাত্র নির্বাচিত collection আইটেম, ভেরিয়েন্ট, বা লোকেলের জন্য প্রয়োজনীয় কন্টেন্ট লোড করা হয়, আপনার প্রোডাকশন বান্ডেলকে অব্যবহৃত অনুবাদ ধারণ করা থেকে রক্ষা করে।
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Vite প্লাগিন: বান্ডেলড কম্পাইলার ও প্রক্সি
|
|
223
|
+
|
|
224
|
+
`intlayer()` Vite প্লাগিন এখন সরাসরি **কম্পাইলার** এবং **লোকেল-রাউটিং প্রক্সি** বান্ডেল করে, তাই বেশিরভাগ প্রজেক্টের শুধুমাত্র `vite.config.ts`-এ একটি একক প্লাগিন প্রয়োজন:
|
|
225
|
+
|
|
226
|
+
```ts fileName="vite.config.ts"
|
|
227
|
+
import { defineConfig } from "vite";
|
|
228
|
+
import { intlayer } from "vite-intlayer";
|
|
229
|
+
|
|
230
|
+
export default defineConfig({
|
|
231
|
+
plugins: [intlayer()],
|
|
232
|
+
});
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
- **কম্পাইলার**: স্বয়ংক্রিয়ভাবে সক্রিয় হয় যখন `compiler.enabled` কে `true`-এ সেট করা হয় এবং একটি `compiler.output` পাথ কনফিগার করা থাকে। আপনাকে আর আলাদাভাবে `intlayerCompiler()` নিবন্ধন করতে হবে না।
|
|
236
|
+
- **প্রক্সি**: নতুন `routing.enableProxy` বিকল্পের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে সক্রিয় হয় (ডিফল্টরূপে `true`)। এটি ডেভেলপমেন্ট, প্রিভিউ, এবং প্রোডাকশন SSR-এ লোকেল ডিটেকশন / রিডাইরেক্ট / রিরাইট মিডলওয়্যার সংযুক্ত করে। আপনাকে আর আলাদাভাবে `intlayerProxy()` নিবন্ধন করতে হবে না।
|
|
237
|
+
|
|
238
|
+
### `routing.enableProxy` বিকল্প
|
|
239
|
+
|
|
240
|
+
একটি নতুন `routing.enableProxy` বিকল্প নিয়ন্ত্রণ করে লোকেল-রাউটিং প্রক্সি প্লাগ ইন করা হয়েছে কিনা। এটি ডিফল্টরূপে `true`। নিজে লোকেল রাউটিং পরিচালনা করতে চাইলে এটি অক্ষম করুন:
|
|
241
|
+
|
|
242
|
+
```ts fileName="intlayer.config.ts"
|
|
243
|
+
import type { IntlayerConfig } from "intlayer";
|
|
244
|
+
|
|
245
|
+
const config: IntlayerConfig = {
|
|
246
|
+
routing: {
|
|
247
|
+
enableProxy: false, // ডিফল্ট: true
|
|
248
|
+
},
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
export default config;
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
স্বতন্ত্র `intlayerCompiler()` এবং `intlayerProxy()` প্লাগিনগুলি উন্নত সেটআপের জন্য এক্সপোর্ট করা থাকে। এগুলি `intlayer()`-এর সাথে নিবন্ধন করা নিরাপদ — প্রতিটি প্লাগিন নিজেকে ডিডুপ্লিকেট করে এবং শুধুমাত্র একবার চলে।
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## কম্পাইলার ডিফল্টরূপে অক্ষম
|
|
259
|
+
|
|
260
|
+
Intlayer v9 থেকে শুরু করে, **কম্পাইলার ডিফল্টরূপে অক্ষম** (`compiler.enabled` এখন ডিফল্টরূপে `false`)। আপনার `.content.ts` ফাইলগুলির বিল্ড-টাইম এক্সট্রাকশনে অপ্ট ইন করতে, আপনার কনফিগারেশনে `compiler.enabled: true` সেট করুন:
|
|
261
|
+
|
|
262
|
+
```ts fileName="intlayer.config.ts"
|
|
263
|
+
import type { IntlayerConfig } from "intlayer";
|
|
264
|
+
|
|
265
|
+
const config: IntlayerConfig = {
|
|
266
|
+
compiler: {
|
|
267
|
+
enabled: true, // ডিফল্ট: false — v9 থেকে কম্পাইলার সক্রিয় করতে প্রয়োজন
|
|
268
|
+
output: ({ fileName }) => `./${fileName}.content.ts`,
|
|
269
|
+
},
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
export default config;
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
কম্পাইলার অক্ষম থাকলে, Intlayer বিল্ড-টাইম এক্সট্রাকশন ধাপ এড়িয়ে যায় এবং আপনার ইতিমধ্যে ঘোষিত ডিকশনারিগুলির উপর নির্ভর করে। এটি শুধুমাত্র তখনই সক্ষম করুন যখন আপনি চান bundler প্লাগিন (`@intlayer/swc`, `@intlayer/babel`, বা `intlayer()` Vite প্লাগিন) স্বয়ংক্রিয়ভাবে কন্টেন্ট এক্সট্র্যাক্ট করুক।
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## React Native: একক-প্যাকেজ ইম্পোর্ট
|
|
280
|
+
|
|
281
|
+
একটি React Native বা Expo অ্যাপে, আপনাকে আর `react-intlayer` এবং `react-native-intlayer` উভয়ই ম্যানেজ করতে হবে না। `react-native-intlayer` প্যাকেজ এখন **সম্পূর্ণ `react-intlayer` API** পুনরায় এক্সপোর্ট করে (হুক, ইউটিলিটি, এবং `/format`, `/html`, এবং `/markdown` সাবপাথ), এবং এর `IntlayerProvider` স্বয়ংক্রিয়ভাবে React Native পলিফিল প্রয়োগ করে।
|
|
282
|
+
|
|
283
|
+
একক `react-native-intlayer` প্যাকেজ থেকে সবকিছু ইম্পোর্ট করুন:
|
|
284
|
+
|
|
285
|
+
```tsx
|
|
286
|
+
import {
|
|
287
|
+
IntlayerProvider,
|
|
288
|
+
useIntlayer,
|
|
289
|
+
useLocale,
|
|
290
|
+
} from "react-native-intlayer";
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
```bash
|
|
294
|
+
npm install intlayer react-native-intlayer
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
> `react-intlayer` থেকে ইম্পোর্ট করা কাজ করতে থাকে, কিন্তু `react-native-intlayer` এখন React Native-এর জন্য প্রস্তাবিত একক এন্ট্রি পয়েন্ট — এর প্রোভাইডারে পলিফিল শিপ করা হয় যা ওয়েব-ভিত্তিক `react-intlayer` প্রোভাইডারে নেই।
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## CMS SDK: Intlayer কে একটি হেডলেস কন্টেন্ট ডেটাবেস হিসেবে ব্যবহার করুন
|
|
302
|
+
|
|
303
|
+
Intlayer v9 `@intlayer/api`-এ একটি পরিষ্কার, স্বয়ং-প্রমাণীকরণকারী SDK শিপ করে CMS-এর সাথে প্রোগ্রামাটিক্যালি ইন্টারঅ্যাক্ট করতে — প্রজেক্ট আনুন, ডিকশনারি আনুন, এবং আপনার নিজের সার্ভার, স্ক্রিপ্ট, বা CI থেকে সেগুলি পুশ বা আপডেট করুন। প্রমাণীকরণ (OAuth2 `client_credentials`) আপনার জন্য পরিচালিত এবং রিফ্রেশ করা হয়।
|
|
304
|
+
|
|
305
|
+
SDK **দুটি আলাদা ইম্পোর্টে** বিভক্ত যাতে আপনার বান্ডেলে শুধুমাত্র আপনার ব্যবহৃত ডোমেইনগুলি অন্তর্ভুক্ত হয়:
|
|
306
|
+
|
|
307
|
+
১। `createIntlayerCMS` — একটি হালকা **অথেনটিকেটর** যা ক্রেডেনশিয়াল এবং পরিচালিত টোকেন ধারণ করে (কোনো ডোমেইন ক্লায়েন্ট বান্ডেল করা নেই)।
|
|
308
|
+
২। `dictionaryEndpoint`, `projectEndpoint`, … — প্রতি-ডোমেইন **এন্ডপয়েন্ট বাইন্ডার**, প্রতিটি তার নিজস্ব সাবপাথ থেকে ইম্পোর্ট করা হয়।
|
|
309
|
+
|
|
310
|
+
```ts fileName="cms.ts"
|
|
311
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
312
|
+
import { dictionaryEndpoint } from "@intlayer/api/dictionary";
|
|
313
|
+
|
|
314
|
+
const cms = createIntlayerCMS();
|
|
315
|
+
|
|
316
|
+
// পড়ুন
|
|
317
|
+
const { data: dictionaries } = await dictionaryEndpoint(cms).getDictionaries();
|
|
318
|
+
|
|
319
|
+
// লিখুন — CMS কে ডেটাবেস হিসেবে ব্যবহার করুন
|
|
320
|
+
await dictionaryEndpoint(cms).pushDictionaries([myDictionary]);
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
> নিরাপত্তা: CMS ক্রেডেনশিয়াল আপনার কন্টেন্টে লেখার অ্যাক্সেস প্রদান করে। অথেনটিকেটর সর্বদা **সার্ভার সাইডে** তৈরি করুন — কখনই `clientId` / `clientSecret` ব্রাউজারে পাঠাবেন না।
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## সেলফ-হোস্টিং
|
|
328
|
+
|
|
329
|
+
Intlayer v9 একটি একক কমান্ড দিয়ে আপনার নিজস্ব Intlayer ইনস্ট্যান্স চালানোর জন্য প্রথম-শ্রেণির সমর্থন শিপ করে — কোনো Intlayer Cloud অ্যাকাউন্ট প্রয়োজন নেই।
|
|
330
|
+
|
|
331
|
+
```sh
|
|
332
|
+
curl -fsSL https://intlayer.org/install.sh | sh
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
ইন্সটলার একটি `docker-compose.yml` এবং একটি `.env` ডাউনলোড করে, প্রয়োজনীয় সিক্রেটগুলি স্বয়ংক্রিয়ভাবে তৈরি করে, এবং `docker compose up -d` চালায়। সমস্ত কিছু — ড্যাশবোর্ড, API, ডেটাবেস, অবজেক্ট স্টোরেজ, এবং ট্রানজ্যাকশনাল ইমেইল — কন্টেইনারে স্থানীয়ভাবে চলে।
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
## v8 থেকে মাইগ্রেশন নোট
|
|
340
|
+
|
|
341
|
+
যদি আপনি v8 থেকে আপগ্রেড করছেন, মনে রাখবেন যে v9-এ কোনো ব্রেকিং পরিবর্তন নেই। তবে এখানে মূল পরিবর্তনগুলি রয়েছে:
|
|
342
|
+
|
|
343
|
+
- **কম্পাইলার ডিফল্টরূপে অক্ষম**: `compiler.enabled` এখন ডিফল্টরূপে `false`। যদি আপনি আপনার `.content.ts` ফাইলগুলির বিল্ড-টাইম এক্সট্রাকশনের উপর নির্ভর করেন, তাহলে আপনার `intlayer.config.ts`-এ `compiler.enabled: true` সেট করুন।
|
|
344
|
+
- **Vite প্লাগিন**: কম্পাইলার এবং লোকেল-রাউটিং প্রক্সি এখন `intlayer()`-এ বান্ডেল করা হয়েছে। আপনি যদি আগে ম্যানুয়ালি `intlayerCompiler()` বা `intlayerProxy()` নিবন্ধন করে থাকেন, তাহলে সেগুলি সরাতে পারেন — সেগুলি স্বয়ংক্রিয়ভাবে ডিডুপ্লিকেট হয়, তাই রাখা নিরাপদ। প্রক্সি থেকে অপ্ট আউট করতে `routing.enableProxy: false` ব্যবহার করুন।
|
|
345
|
+
- **Locales ও Dialects**: যদি বাহ্যিক i18n নির্ভরতা ব্যবহার করেন, তাহলে ইম্পোর্ট স্বয়ংক্রিয়ভাবে পুনরায় লিখতে আপনার কনফিগারেশন বা bundler সেটআপে সংশ্লিষ্ট compat adapter প্লাগিন যোগ করুন।
|
|
346
|
+
- **কাস্টম সিলেক্টর**: `useIntlayer` কল করার সময়, দ্বিতীয় প্যারামিটার এখন `{ locale, item, variant }` ধারণকারী একটি বিকল্প অবজেক্টের জন্য সংরক্ষিত। আপনি যদি আগে সরাসরি একটি লোকেল স্ট্রিং পাস করে থাকেন, তাহলে এখনও করতে পারেন, কিন্তু উন্নত নির্বাচনের জন্য অপশন অবজেক্ট ব্যবহার করার পরামর্শ দেওয়া হয়।
|
|
347
|
+
- **React Native**: `react-native-intlayer` এখন সম্পূর্ণ `react-intlayer` API পুনরায় এক্সপোর্ট করে। একটি React Native অ্যাপে, `react-native-intlayer` থেকে সবকিছু ইম্পোর্ট করুন এবং সরাসরি `react-intlayer` নির্ভরতা বাদ দিন। বিদ্যমান `react-intlayer` ইম্পোর্ট কাজ করতে থাকে।
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
## দরকারী লিঙ্কগুলি
|
|
352
|
+
|
|
353
|
+
- [Compat Adapter Packages গাইড](https://github.com/aymericzip/intlayer/blob/main/docs/docs/bn/compat/index.md)
|
|
354
|
+
- [ডায়নামিক ডিকশনারি - Collections ও Variants](https://github.com/aymericzip/intlayer/blob/main/docs/docs/bn/dynamic_dictionaries/index.md)
|
|
355
|
+
- [কনফিগারেশন রেফারেন্স](https://github.com/aymericzip/intlayer/blob/main/docs/docs/bn/configuration.md)
|
|
356
|
+
- [React Native ও Expo গাইড](https://github.com/aymericzip/intlayer/blob/main/docs/docs/bn/intlayer_with_react_native+expo.md)
|
|
357
|
+
- [CMS SDK - @intlayer/api দিয়ে প্রোগ্রামাটিক অ্যাক্সেস](https://github.com/aymericzip/intlayer/blob/main/docs/docs/bn/intlayer_CMS.md)
|
|
358
|
+
- [সেলফ-হোস্টিং গাইড](https://github.com/aymericzip/intlayer/blob/main/docs/docs/bn/self_hosting.md)
|