@intlayer/docs 9.0.0-canary.7 → 9.0.0-canary.8

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 (98) hide show
  1. package/dist/cjs/generated/docs.entry.cjs +0 -20
  2. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  3. package/dist/esm/generated/docs.entry.mjs +0 -20
  4. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  5. package/dist/types/generated/docs.entry.d.ts +0 -1
  6. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  7. package/docs/ar/dynamic_dictionaries/index.md +24 -18
  8. package/docs/ar/dynamic_dictionaries/variants.md +280 -22
  9. package/docs/ar/plugins/sync-json.md +0 -1
  10. package/docs/ar/releases/v9.md +35 -12
  11. package/docs/de/dynamic_dictionaries/index.md +22 -22
  12. package/docs/de/dynamic_dictionaries/variants.md +272 -14
  13. package/docs/de/plugins/sync-json.md +0 -1
  14. package/docs/de/releases/v9.md +35 -12
  15. package/docs/en/dynamic_dictionaries/index.md +20 -14
  16. package/docs/en/dynamic_dictionaries/variants.md +266 -8
  17. package/docs/en/plugins/sync-json.md +0 -1
  18. package/docs/en/releases/v9.md +35 -12
  19. package/docs/en-GB/dynamic_dictionaries/index.md +21 -15
  20. package/docs/en-GB/dynamic_dictionaries/variants.md +268 -10
  21. package/docs/en-GB/plugins/sync-json.md +0 -1
  22. package/docs/en-GB/releases/v9.md +35 -12
  23. package/docs/es/dynamic_dictionaries/index.md +25 -19
  24. package/docs/es/dynamic_dictionaries/variants.md +275 -17
  25. package/docs/es/plugins/sync-json.md +0 -1
  26. package/docs/es/releases/v9.md +35 -12
  27. package/docs/fr/dynamic_dictionaries/index.md +26 -20
  28. package/docs/fr/dynamic_dictionaries/variants.md +273 -15
  29. package/docs/fr/plugins/sync-json.md +0 -1
  30. package/docs/fr/releases/v9.md +35 -12
  31. package/docs/hi/dynamic_dictionaries/index.md +28 -22
  32. package/docs/hi/dynamic_dictionaries/variants.md +282 -24
  33. package/docs/hi/plugins/sync-json.md +0 -1
  34. package/docs/hi/releases/v9.md +35 -12
  35. package/docs/id/dynamic_dictionaries/index.md +25 -19
  36. package/docs/id/dynamic_dictionaries/variants.md +274 -16
  37. package/docs/id/plugins/sync-json.md +0 -1
  38. package/docs/id/releases/v9.md +35 -12
  39. package/docs/it/dynamic_dictionaries/index.md +26 -20
  40. package/docs/it/dynamic_dictionaries/variants.md +273 -15
  41. package/docs/it/plugins/sync-json.md +0 -1
  42. package/docs/it/releases/v9.md +35 -12
  43. package/docs/ja/dynamic_dictionaries/index.md +27 -21
  44. package/docs/ja/dynamic_dictionaries/variants.md +276 -18
  45. package/docs/ja/plugins/sync-json.md +0 -1
  46. package/docs/ja/releases/v9.md +35 -12
  47. package/docs/ko/dynamic_dictionaries/index.md +23 -17
  48. package/docs/ko/dynamic_dictionaries/variants.md +273 -15
  49. package/docs/ko/plugins/sync-json.md +0 -1
  50. package/docs/ko/releases/v9.md +35 -12
  51. package/docs/pl/dynamic_dictionaries/index.md +26 -20
  52. package/docs/pl/dynamic_dictionaries/variants.md +275 -17
  53. package/docs/pl/plugins/sync-json.md +0 -1
  54. package/docs/pl/releases/v9.md +35 -12
  55. package/docs/pt/dynamic_dictionaries/index.md +25 -19
  56. package/docs/pt/dynamic_dictionaries/variants.md +276 -18
  57. package/docs/pt/plugins/sync-json.md +0 -1
  58. package/docs/pt/releases/v9.md +35 -12
  59. package/docs/ru/dynamic_dictionaries/index.md +25 -19
  60. package/docs/ru/dynamic_dictionaries/variants.md +277 -19
  61. package/docs/ru/plugins/sync-json.md +0 -1
  62. package/docs/ru/releases/v9.md +35 -12
  63. package/docs/tr/dynamic_dictionaries/index.md +27 -21
  64. package/docs/tr/dynamic_dictionaries/variants.md +274 -16
  65. package/docs/tr/plugins/sync-json.md +0 -1
  66. package/docs/tr/releases/v9.md +35 -12
  67. package/docs/uk/dynamic_dictionaries/index.md +25 -19
  68. package/docs/uk/dynamic_dictionaries/variants.md +277 -19
  69. package/docs/uk/plugins/sync-json.md +0 -1
  70. package/docs/uk/releases/v9.md +35 -12
  71. package/docs/vi/dynamic_dictionaries/index.md +28 -22
  72. package/docs/vi/dynamic_dictionaries/variants.md +278 -20
  73. package/docs/vi/plugins/sync-json.md +0 -1
  74. package/docs/vi/releases/v9.md +35 -12
  75. package/docs/zh/dynamic_dictionaries/index.md +24 -18
  76. package/docs/zh/dynamic_dictionaries/variants.md +274 -16
  77. package/docs/zh/plugins/sync-json.md +0 -1
  78. package/docs/zh/releases/v9.md +35 -12
  79. package/package.json +6 -6
  80. package/src/generated/docs.entry.ts +0 -20
  81. package/docs/ar/dynamic_dictionaries/dynamic_content.md +0 -271
  82. package/docs/de/dynamic_dictionaries/dynamic_content.md +0 -271
  83. package/docs/en/dynamic_dictionaries/dynamic_content.md +0 -271
  84. package/docs/en-GB/dynamic_dictionaries/dynamic_content.md +0 -271
  85. package/docs/es/dynamic_dictionaries/dynamic_content.md +0 -271
  86. package/docs/fr/dynamic_dictionaries/dynamic_content.md +0 -271
  87. package/docs/hi/dynamic_dictionaries/dynamic_content.md +0 -271
  88. package/docs/id/dynamic_dictionaries/dynamic_content.md +0 -271
  89. package/docs/it/dynamic_dictionaries/dynamic_content.md +0 -271
  90. package/docs/ja/dynamic_dictionaries/dynamic_content.md +0 -271
  91. package/docs/ko/dynamic_dictionaries/dynamic_content.md +0 -271
  92. package/docs/pl/dynamic_dictionaries/dynamic_content.md +0 -271
  93. package/docs/pt/dynamic_dictionaries/dynamic_content.md +0 -271
  94. package/docs/ru/dynamic_dictionaries/dynamic_content.md +0 -271
  95. package/docs/tr/dynamic_dictionaries/dynamic_content.md +0 -271
  96. package/docs/uk/dynamic_dictionaries/dynamic_content.md +0 -271
  97. package/docs/vi/dynamic_dictionaries/dynamic_content.md +0 -271
  98. package/docs/zh/dynamic_dictionaries/dynamic_content.md +0 -271
@@ -1,13 +1,15 @@
1
1
  ---
2
2
  createdAt: 2026-06-12
3
- updatedAt: 2026-06-12
4
- title: वेरिएंट
5
- description: कोड परिवर्तनों के बिना रनटाइम पर उनके बीच स्विच करने के लिए नामित सामग्री विकल्पों (A/B परीक्षण, मौसमी बैनर, फीचर-फ़्लैग्ड प्रतिलिपि) को घोषित करने के लिए Intlayer सामग्री फ़ाइलों में variant मेटाडेटा फ़ील्ड का उपयोग करें।
3
+ updatedAt: 2026-06-26
4
+ title: वैरिएंट
5
+ description: नामित या संरचित सामग्री विकल्प A/B परीक्षण, मौसमी बैनर, फ़ीचर-फ़्लैग टेक्स्ट, CMS रिकॉर्ड, उपयोगकर्ता-विशिष्ट सामग्री घोषित करने और कोड बदले बिना रनटाइम पर उनके बीच स्विच करने के लिए Intlayer सामग्री फ़ाइलों में variant मेटाडेटा फ़ील्ड का उपयोग करें।
6
6
  keywords:
7
- - वेरिएंट
7
+ - वैरिएंट
8
8
  - A/B परीक्षण
9
- - फीचर फ़्लैग
9
+ - फ़ीचर फ़्लैग
10
10
  - डायनेमिक सामग्री
11
+ - डायनेमिक रिकॉर्ड
12
+ - CMS
11
13
  - Intlayer
12
14
  - अंतर्राष्ट्रीयकरण
13
15
  slugs:
@@ -17,17 +19,27 @@ slugs:
17
19
  history:
18
20
  - version: 9.0.0
19
21
  date: 2026-06-12
20
- changes: "वेरिएंट डिक्शनरी सुविधा का विमोचन"
22
+ changes: "वैरिएंट सुविधा का रिलीज़"
23
+ - version: 9.1.0
24
+ date: 2026-06-26
25
+ changes: "अब `variant` एक स्ट्रिंग या ऑब्जेक्ट स्वीकार करता है — पूर्व `meta` / डायनेमिक रिकॉर्ड ऑब्जेक्ट वैरिएंट के रूप में घोषित किए जाते हैं"
21
26
  author: aymericzip
22
27
  ---
23
28
 
24
- # वेरिएंट (Variants)
29
+ # वैरिएंट
25
30
 
26
- एक **वेरिएंट** (variant) सामग्री फ़ाइलों का एक सेट है जो एक ही डिक्शनरी कुंजी (`key`) साझा करते हैं लेकिन प्रत्येक में एक अलग `variant` नाम होता है। Intlayer `useIntlayer` को दिए गए चयनकर्ता के आधार पर उपयुक्त फ़ाइल प्रस्तुत करता है।
31
+ एक **वैरिएंट** सामग्री फ़ाइलों का एक समूह है जो समान डिक्शनरी `key` साझा करती हैं लेकिन प्रत्येक का एक अलग `variant` मान होता है। Intlayer `useIntlayer` को पास किए गए सेलेक्टर के आधार पर उपयुक्त फ़ाइल परोसता है।
27
32
 
28
- ## वेरिएंट घोषित करना
33
+ `variant` मान **दो रूप** ले सकता है:
29
34
 
30
- प्रत्येक फ़ाइल एक नामित विकल्प का प्रतिनिधित्व करती है। `variant` फ़ील्ड को छोड़ने (या इसे `"default"` पर सेट करने) से यह डिफ़ॉल्ट (fallback) वेरिएंट के रूप में चिह्नित हो जाता है।
35
+ - **एक स्ट्रिंग** — एकल नामित विकल्प (A/B परीक्षण, मौसमी बैनर, फ़ीचर फ़्लैग)
36
+ - **एक ऑब्जेक्ट** — फ़ील्ड के सेट द्वारा संबोधित एक संरचित विभेदक (CMS रिकॉर्ड, उपयोगकर्ता-विशिष्ट सामग्री, अपारदर्शी ID द्वारा कुंजीबद्ध कोई भी सामग्री)। पूरा ऑब्जेक्ट ही पहचान है: प्रविष्टि हल करने के लिए सेलेक्टर को एक **समान** ऑब्जेक्ट देना होगा।
37
+
38
+ > ऑब्जेक्ट रूप पुराने `meta` फ़ील्ड की जगह लेता है। जहाँ भी आप पहले `meta: { id, … }` लिखते थे, वहाँ `variant: { id, … }` लिखें और इसे `{ variant: { id, … } }` के साथ चुनें।
39
+
40
+ ## नामित (स्ट्रिंग) वैरिएंट
41
+
42
+ प्रत्येक फ़ाइल एक नामित विकल्प का प्रतिनिधित्व करती है। `variant` को छोड़ना (या `"default"` पर सेट करना) इसे फ़ॉलबैक के रूप में चिह्नित करता है।
31
43
 
32
44
  ```ts fileName="hero-banner.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
33
45
  import { t, type Dictionary } from "intlayer";
@@ -65,9 +77,9 @@ const dictionary = {
65
77
  export default dictionary;
66
78
  ```
67
79
 
68
- ## वेरिएंट का उपयोग करना
80
+ ### नामित वैरिएंट का उपयोग
69
81
 
70
- ### डिफ़ॉल्ट वेरिएंट
82
+ #### डिफ़ॉल्ट वैरिएंट
71
83
 
72
84
  <Tabs group="framework">
73
85
  <Tab label="React" value="react">
@@ -76,7 +88,7 @@ export default dictionary;
76
88
 
77
89
  export const Hero = () => {
78
90
  const { headline, cta } = useIntlayer("hero-banner");
79
- // → डिफ़ॉल्ट वेरिएंट
91
+ // → डिफ़ॉल्ट वैरिएंट
80
92
 
81
93
  return (
82
94
  <section>
@@ -94,7 +106,7 @@ export default dictionary;
94
106
 
95
107
  export const Hero = () => {
96
108
  const { headline, cta } = useIntlayer("hero-banner");
97
- // → डिफ़ॉल्ट वेरिएंट
109
+ // → डिफ़ॉल्ट वैरिएंट
98
110
 
99
111
  return (
100
112
  <section>
@@ -142,7 +154,7 @@ export default dictionary;
142
154
 
143
155
  export const Hero = () => {
144
156
  const { headline, cta } = useIntlayer("hero-banner");
145
- // → डिफ़ॉल्ट वेरिएंट
157
+ // → डिफ़ॉल्ट वैरिएंट
146
158
 
147
159
  return (
148
160
  <section>
@@ -160,7 +172,7 @@ export default dictionary;
160
172
 
161
173
  export const Hero = () => {
162
174
  const content = useIntlayer("hero-banner");
163
- // → डिफ़ॉल्ट वेरिएंट
175
+ // → डिफ़ॉल्ट वैरिएंट
164
176
 
165
177
  return (
166
178
  <section>
@@ -209,7 +221,7 @@ export default dictionary;
209
221
  </Tab>
210
222
  </Tabs>
211
223
 
212
- ### नामित वेरिएंट
224
+ #### नामित वैरिएंट
213
225
 
214
226
  ```tsx
215
227
  const { headline, cta } = useIntlayer("hero-banner", {
@@ -217,18 +229,264 @@ const { headline, cta } = useIntlayer("hero-banner", {
217
229
  });
218
230
  ```
219
231
 
220
- ### स्पष्ट भाषा विकल्प के साथ नामित वेरिएंट
232
+ #### स्पष्ट locale के साथ नामित वैरिएंट
221
233
 
222
234
  ```tsx
223
235
  const content = useIntlayer("hero-banner", {
224
236
  variant: "black_friday",
225
- locale: "hi",
237
+ locale: "fr",
226
238
  });
227
239
  ```
228
240
 
229
- ## विशिष्ट उपयोग के मामले
241
+ ## ऑब्जेक्ट (संरचित) वैरिएंट
242
+
243
+ एक ऑब्जेक्ट वैरिएंट `variant` फ़ील्ड में घोषित मनमाने key-value युग्मों के सेट द्वारा सामग्री को संबोधित करता है — जिससे CMS रिकॉर्ड, उपयोगकर्ता-विशिष्ट सामग्री, या ऐसी कोई भी सामग्री मॉडल करना संभव हो जाता है जिसकी कुंजी एक अपारदर्शी ID है। पहचान **पूरा ऑब्जेक्ट** है: प्रविष्टि हल होने के लिए सेलेक्टर को एक समान ऑब्जेक्ट देना होगा।
244
+
245
+ ```ts fileName="product.abc.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
246
+ import { t, type Dictionary } from "intlayer";
247
+
248
+ const dictionary = {
249
+ key: "product",
250
+ variant: { id: "prod_abc", userId: "user_123" },
251
+ content: {
252
+ name: t({ en: "Widget Pro", fr: "Widget Pro" }),
253
+ description: t({ en: "The best widget.", fr: "Le meilleur widget." }),
254
+ },
255
+ } satisfies Dictionary;
256
+
257
+ export default dictionary;
258
+ ```
259
+
260
+ ```ts fileName="product.abcd.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
261
+ import { t, type Dictionary } from "intlayer";
262
+
263
+ const dictionary = {
264
+ key: "product",
265
+ variant: { id: "prod_abcd", userId: "user_123" },
266
+ content: {
267
+ name: t({ en: "Widget Lite", fr: "Widget Lite" }),
268
+ description: t({ en: "A lighter option.", fr: "Une option plus légère." }),
269
+ },
270
+ } satisfies Dictionary;
271
+
272
+ export default dictionary;
273
+ ```
274
+
275
+ ### ऑब्जेक्ट वैरिएंट का उपयोग
276
+
277
+ मिलान करने वाला ऑब्जेक्ट `variant` में पास करें। डिक्शनरी में घोषित प्रत्येक फ़ील्ड प्रदान किया जाना चाहिए और समान होना चाहिए; अन्यथा परिणाम `null` होता है। फ़ील्ड का क्रम मायने नहीं रखता।
278
+
279
+ <Tabs group="framework">
280
+ <Tab label="React" value="react">
281
+ ```tsx fileName="Product.tsx" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
282
+ import { useIntlayer } from "react-intlayer";
283
+
284
+ export const Product = ({
285
+ productId,
286
+ userId,
287
+ }: {
288
+ productId: string;
289
+ userId: string;
290
+ }) => {
291
+ const content = useIntlayer("product", {
292
+ variant: { id: productId, userId },
293
+ });
294
+
295
+ if (!content) return null;
296
+
297
+ return <p>{content.description}</p>;
298
+ };
299
+ ```
300
+
301
+ </Tab>
302
+ <Tab label="Next.js" value="nextjs">
303
+ ```tsx fileName="Product.tsx" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
304
+ import { useIntlayer } from "next-intlayer";
305
+
306
+ export const Product = ({
307
+ productId,
308
+ userId,
309
+ }: {
310
+ productId: string;
311
+ userId: string;
312
+ }) => {
313
+ const content = useIntlayer("product", {
314
+ variant: { id: productId, userId },
315
+ });
316
+
317
+ if (!content) return null;
318
+
319
+ return <p>{content.description}</p>;
320
+ };
321
+ ```
322
+
323
+ </Tab>
324
+ <Tab label="Vue" value="vue">
325
+ ```vue fileName="Product.vue" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
326
+ <script setup>
327
+ import { useIntlayer } from "vue-intlayer";
328
+
329
+ const props = defineProps({
330
+ productId: String,
331
+ userId: String,
332
+ });
333
+
334
+ const content = useIntlayer("product", {
335
+ variant: { id: props.productId, userId: props.userId },
336
+ });
337
+ </script>
338
+
339
+ <template>
340
+ <p v-if="content">{{ content.description }}</p>
341
+ </template>
342
+ ```
343
+
344
+ </Tab>
345
+ <Tab label="Svelte" value="svelte">
346
+ ```svelte fileName="Product.svelte" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
347
+ <script lang="ts">
348
+ import { useIntlayer } from "svelte-intlayer";
349
+
350
+ export let productId: string;
351
+ export let userId: string;
352
+
353
+ const content = useIntlayer("product", {
354
+ variant: { id: productId, userId },
355
+ });
356
+ </script>
357
+
358
+ {#if $content}
359
+ <p>{$content.description}</p>
360
+ {/if}
361
+ ```
362
+
363
+ </Tab>
364
+ <Tab label="Preact" value="preact">
365
+ ```tsx fileName="Product.tsx" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
366
+ import { useIntlayer } from "preact-intlayer";
367
+
368
+ export const Product = ({
369
+ productId,
370
+ userId,
371
+ }: {
372
+ productId: string;
373
+ userId: string;
374
+ }) => {
375
+ const content = useIntlayer("product", {
376
+ variant: { id: productId, userId },
377
+ });
378
+
379
+ if (!content) return null;
380
+
381
+ return <p>{content.description}</p>;
382
+ };
383
+ ```
384
+
385
+ </Tab>
386
+ <Tab label="Solid" value="solid">
387
+ ```tsx fileName="Product.tsx" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
388
+ import { useIntlayer } from "solid-intlayer";
389
+
390
+ export const Product = (props: {
391
+ productId: string;
392
+ userId: string;
393
+ }) => {
394
+ const content = useIntlayer("product", {
395
+ variant: { id: props.productId, userId: props.userId },
396
+ });
397
+
398
+ return (
399
+ <>
400
+ {content() && <p>{content().description}</p>}
401
+ </>
402
+ );
403
+ };
404
+ ```
405
+
406
+ </Tab>
407
+ <Tab label="Angular" value="angular">
408
+ ```typescript fileName="product.component.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
409
+ import { Component, Input, OnInit } from "@angular/core";
410
+ import { useIntlayer } from "angular-intlayer";
411
+
412
+ @Component({
413
+ selector: "app-product",
414
+ template: `
415
+ @if (content()) {
416
+ <p>{{ content().description }}</p>
417
+ }
418
+ `,
419
+ })
420
+ export class ProductComponent implements OnInit {
421
+ @Input() productId!: string;
422
+ @Input() userId!: string;
423
+
424
+ content: any;
425
+
426
+ ngOnInit() {
427
+ this.content = useIntlayer("product", {
428
+ variant: { id: this.productId, userId: this.userId },
429
+ });
430
+ }
431
+ }
432
+ ```
433
+
434
+ </Tab>
435
+ <Tab label="Vanilla JS" value="vanilla">
436
+ ```javascript fileName="product.js"
437
+ import { useIntlayer } from "vanilla-intlayer";
438
+
439
+ const content = useIntlayer("product", {
440
+ variant: { id: "prod_abcd", userId: "user_123" },
441
+ });
442
+
443
+ if (content) {
444
+ document.body.innerHTML = `<p>${content.description}</p>`;
445
+ }
446
+ ```
447
+
448
+ </Tab>
449
+ </Tabs>
450
+
451
+ #### स्पष्ट locale के साथ
452
+
453
+ ```tsx
454
+ const content = useIntlayer("product", {
455
+ variant: { id: "prod_abc", userId: "user_123" },
456
+ locale: "fr",
457
+ });
458
+ ```
459
+
460
+ #### अनुपस्थित फ़ील्ड — कोई मिलान नहीं
461
+
462
+ ```ts
463
+ // null लौटाता है: `userId` अनुपस्थित है, इसलिए ऑब्जेक्ट घोषित वैरिएंट से मेल नहीं खाता
464
+ const content = useIntlayer("product", { variant: { id: "prod_abc" } });
465
+ ```
466
+
467
+ ## लोडिंग मोड
468
+
469
+ ऑब्जेक्ट वैरिएंट अक्सर आलसी रूप से लोड किए जाते हैं। इसे नियंत्रित करने के लिए डिक्शनरी पर `importMode` सेट करें:
470
+
471
+ ```ts contentDeclarationFormat={["typescript", "esm", "commonjs"]}
472
+ const dictionary = {
473
+ key: "product",
474
+ importMode: "fetch", // or "dynamic"
475
+ variant: { id: "prod_abc", userId: "user_123" },
476
+ content: { … },
477
+ } satisfies Dictionary;
478
+
479
+ export default dictionary;
480
+ ```
481
+
482
+ `static`, `dynamic` और `fetch` मोड के विवरण के लिए [बंडल ऑप्टिमाइज़ेशन](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/bundle_optimization.md) देखें।
483
+
484
+ ## विशिष्ट उपयोग-मामले
230
485
 
231
- - एक परीक्षण कुंजी द्वारा संचालित A/B प्रतिलिपि परीक्षण
232
- - मौसमी या प्रचार बैनर
233
- - फीचर-फ़्लैग्ड मैसेजिंग
234
- - स्थानीय बाजार के विशिष्ट अभियान
486
+ - प्रयोग key द्वारा संचालित A/B टेक्स्ट परीक्षण
487
+ - मौसमी या प्रचारात्मक बैनर
488
+ - फ़ीचर-फ़्लैग संदेश
489
+ - locale-विशिष्ट मार्केटिंग अभियान
490
+ - CMS में प्रबंधित प्रति-उत्पाद मार्केटिंग टेक्स्ट
491
+ - उपयोगकर्ता-विशिष्ट या खाता-विशिष्ट सामग्री
492
+ - रनटाइम पर अपारदर्शी ID द्वारा कुंजीबद्ध कोई भी सामग्री
@@ -108,7 +108,6 @@ const config: IntlayerConfig = {
108
108
  * Will load, and write the output and translations back to the JSON files in the locales directory
109
109
  */
110
110
  syncJSON({
111
- format: "i18next",
112
111
  source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
113
112
  priority: 0,
114
113
  format: "i18next",
@@ -1,15 +1,14 @@
1
1
  ---
2
2
  createdAt: 2026-06-14
3
- updatedAt: 2026-06-25
3
+ updatedAt: 2026-06-26
4
4
  title: नया Intlayer v9 - क्या नया है?
5
- description: जानें कि Intlayer v9 में क्या नया है। लोकप्रिय i18n लाइब्रेरीज़ के लिए ड्रॉप-इन कम्पैटिबिलिटी पैकेजेस और Collections, Variants, और Dynamic Records के लिए सपोर्ट का परिचय।
5
+ description: जानें कि Intlayer v9 में क्या नया है। लोकप्रिय i18n लाइब्रेरीज़ के लिए ड्रॉप-इन कम्पैटिबिलिटी पैकेजेस और Collections और Variants के लिए सपोर्ट का परिचय।
6
6
  keywords:
7
7
  - Intlayer
8
8
  - Compatibility
9
9
  - Migration
10
10
  - Collections
11
11
  - Variants
12
- - Dynamic Records
13
12
  - i18next
14
13
  - next-intl
15
14
  - vue-i18n
@@ -22,7 +21,7 @@ author: aymericzip
22
21
 
23
22
  # नया Intlayer v9 - क्या नया है?
24
23
 
25
- Intlayer v9 में आपका स्वागत है! यह मेजर रिलीज़ प्रमुख i18n लाइब्रेरीज़ (`react-i18next`, `next-intl`, `vue-i18n`, आदि) के लिए **Compat Adapter Packages** के साथ Intlayer पर माइग्रेशन की राह को आसान बनाने में एक बड़ा मील का पत्थर है, और यह रिच कंटेंट स्ट्रक्चर्स: **Collections**, **Variants**, और **Dynamic Records** के लिए सपोर्ट जोड़ता है।
24
+ Intlayer v9 में आपका स्वागत है! यह मेजर रिलीज़ प्रमुख i18n लाइब्रेरीज़ (`react-i18next`, `next-intl`, `vue-i18n`, आदि) के लिए **Compat Adapter Packages** के साथ Intlayer पर माइग्रेशन की राह को आसान बनाने में एक बड़ा मील का पत्थर है, और यह रिच कंटेंट स्ट्रक्चर्स: **Collections** और **Variants** के लिए सपोर्ट जोड़ता है।
26
25
 
27
26
  ## विषय-सूची
28
27
 
@@ -41,8 +40,10 @@ Intlayer v9 में आपका स्वागत है! यह मेज
41
40
  - `@intlayer/i18next`
42
41
  - `@intlayer/react-i18next`
43
42
  - `@intlayer/next-intl`
43
+ - `@intlayer/react-intl`
44
44
  - `@intlayer/next-i18next`
45
45
  - `@intlayer/vue-i18n`
46
+ - `@intlayer/lingui`
46
47
 
47
48
  उदाहरण के लिए, बस इसे बदलें:
48
49
 
@@ -100,7 +101,7 @@ export default defineConfig({
100
101
 
101
102
  ---
102
103
 
103
- ## Feature Spec: Collections, Variants & Dynamic Records
104
+ ## Feature Spec: Collections & Variants
104
105
 
105
106
  Intlayer v9 स्टैटिक की-वैल्यू ऑब्जेक्ट्स से आगे बढ़कर डिक्शनरीज़ को डायनेमिक लेआउट स्ट्रक्चर्स घोषित करने की अनुमति देता है जो एंड-टू-एंड पूरी तरह से टाइप्ड (typed) होते हैं।
106
107
 
@@ -144,6 +145,8 @@ const faq = useIntlayer("faq", { item: 1 }); // -> { question: string, answer: s
144
145
 
145
146
  A/B टेस्ट्स, सीज़नल हेडर्स, फ़ीचर फ़्लैग्स, या कस्टम लैंडिंग पेजेस डिलीवर करें:
146
147
 
148
+ #### स्ट्रिंग वेरिएंट (उदा. A/B टेस्टिंग)
149
+
147
150
  ```ts fileName="hero.content.ts"
148
151
  import { t, type Dictionary } from "intlayer";
149
152
 
@@ -167,16 +170,14 @@ export default {
167
170
  const banner = useIntlayer("hero-banner", { variant: "black_friday" });
168
171
  ```
169
172
 
170
- ### 3. Dynamic Records
171
-
172
- ऐसे डिक्शनरीज़ को परिभाषित करें जिनकी एंट्रीज़ रनटाइम पर क्वेरी IDs के माध्यम से डायनेमिक रूप से लोड होती हैं:
173
+ #### ऑब्जेक्ट वेरिएंट (उदा. डायनेमिक रिकॉर्ड्स)
173
174
 
174
175
  ```ts fileName="product.content.ts"
175
176
  import { t, type Dictionary } from "intlayer";
176
177
 
177
178
  export default {
178
179
  key: "product-copy",
179
- meta: {
180
+ variant: {
180
181
  id: "prod_123",
181
182
  category: "books",
182
183
  },
@@ -229,7 +230,7 @@ export default defineConfig({
229
230
  });
230
231
  ```
231
232
 
232
- - **Compiler**: जब `compiler.enabled` सेट होता है और `compiler.output` path कॉन्फ़िगर की जाती है तो स्वचालित रूप से सक्रिय हो जाता है। आपको अब `intlayerCompiler()` को अलग से रजिस्टर करने की आवश्यकता नहीं है।
233
+ - **Compiler**: जब `compiler.enabled` को `true` पर सेट किया जाता है और `compiler.output` path कॉन्फ़िगर की जाती है तो स्वचालित रूप से सक्रिय हो जाता है। आपको अब `intlayerCompiler()` को अलग से रजिस्टर करने की आवश्यकता नहीं है।
233
234
  - **Proxy**: नए `routing.enableProxy` option (`true` डिफ़ॉल्ट रूप से) के आधार पर स्वचालित रूप से सक्रिय हो जाता है। यह development, preview, और production SSR में locale detection / redirect / rewrite middleware को wire करता है। आपको अब `intlayerProxy()` को अलग से रजिस्टर करने की आवश्यकता नहीं है।
234
235
 
235
236
  ### `routing.enableProxy` विकल्प
@@ -252,6 +253,27 @@ export default config;
252
253
 
253
254
  ---
254
255
 
256
+ ## कंपाइलर डिफ़ॉल्ट रूप से अक्षम
257
+
258
+ Intlayer v9 से, **कंपाइलर डिफ़ॉल्ट रूप से अक्षम है** (`compiler.enabled` अब डिफ़ॉल्ट रूप से `false` है)। अपनी `.content.ts` फ़ाइलों के बिल्ड-टाइम एक्सट्रैक्शन को सक्षम करने के लिए, अपने कॉन्फ़िगरेशन में `compiler.enabled: true` सेट करें:
259
+
260
+ ```ts fileName="intlayer.config.ts"
261
+ import type { IntlayerConfig } from "intlayer";
262
+
263
+ const config: IntlayerConfig = {
264
+ compiler: {
265
+ enabled: true, // डिफ़ॉल्ट: false — v9 से कंपाइलर को सक्षम करने के लिए आवश्यक
266
+ output: ({ fileName }) => `./${fileName}.content.ts`,
267
+ },
268
+ };
269
+
270
+ export default config;
271
+ ```
272
+
273
+ जब कंपाइलर अक्षम होता है, तो Intlayer बिल्ड-टाइम एक्सट्रैक्शन चरण को छोड़ देता है और आपके पहले से घोषित डिक्शनरीज़ पर निर्भर करता है। इसे केवल तभी सक्षम करें जब आप चाहते हैं कि बंडलर प्लगइन (`@intlayer/swc`, `@intlayer/babel`, या `intlayer()` Vite प्लगइन) सामग्री को स्वचालित रूप से एक्सट्रैक्ट करे।
274
+
275
+ ---
276
+
255
277
  ## React Native: सिंगल-पैकेज इम्पोर्ट
256
278
 
257
279
  React Native या Expo ऐप में, अब आपको `react-intlayer` और `react-native-intlayer` दोनों के बीच तालमेल बिठाने की ज़रूरत नहीं है। `react-native-intlayer` पैकेज अब **पूर्ण `react-intlayer` API को फिर से निर्यात करता है** (हुक्स, यूटिलिटीज, और `/format`, `/html`, और `/markdown` सबपाथ), और इसका `IntlayerProvider` स्वचालित रूप से React Native पॉलीफ़िल्स लागू करता है।
@@ -278,13 +300,14 @@ npm install intlayer react-native-intlayer
278
300
 
279
301
  यदि आप v8 से अपग्रेड कर रहे हैं, तो ध्यान दें कि v9 में कोई ब्रेकिंग बदलाव (breaking changes) शामिल नहीं हैं। लेकिन यहाँ मुख्य बदलाव दिए गए हैं:
280
302
 
303
+ - **कंपाइलर डिफ़ॉल्ट रूप से अक्षम**: `compiler.enabled` अब डिफ़ॉल्ट रूप से `false` है। यदि आप अपनी `.content.ts` फ़ाइलों के बिल्ड-टाइम एक्सट्रैक्शन पर निर्भर हैं, तो अपने `intlayer.config.ts` में `compiler.enabled: true` सेट करें।
281
304
  - **Locales & Dialects**: यदि बाहरी i18n डिपेंडेंसीज़ का उपयोग कर रहे हैं, तो इंपोर्ट्स को स्वचालित रूप से रीराइट करने के लिए अपने कॉन्फ़िगरेशन या बंडलर सेटअप में उनके संबंधित compat एडाप्टर प्लगइन्स जोड़ें।
282
- - **Custom Selectors**: `useIntlayer` को कॉल करते समय, दूसरा पैरामीटर अब एक ऑप्शन ऑब्जेक्ट के लिए आरक्षित है जिसमें `{ locale, item, variant, id }` शामिल हैं। यदि आपने पहले सीधे लोकेल स्ट्रिंग पास की थी, तो आप अभी भी ऐसा कर सकते हैं, लेकिन उन्नत चयनों (advanced selections) के लिए ऑप्शंस ऑब्जेक्ट का उपयोग करने की अनुशंसा की जाती है।
305
+ - **Custom Selectors**: `useIntlayer` को कॉल करते समय, दूसरा पैरामीटर अब एक ऑप्शन ऑब्जेक्ट के लिए आरक्षित है जिसमें `{ locale, item, variant }` शामिल हैं। यदि आपने पहले सीधे लोकेल स्ट्रिंग पास की थी, तो आप अभी भी ऐसा कर सकते हैं, लेकिन उन्नत चयनों (advanced selections) के लिए ऑप्शंस ऑब्जेक्ट का उपयोग करने की अनुशंसा की जाती है।
283
306
 
284
307
  ---
285
308
 
286
309
  ## उपयोगी लिंक्स
287
310
 
288
311
  - [Compat Adapter Packages Guide](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/compat/index.md)
289
- - [Dynamic Dictionaries - Collections, Variants & Dynamic Records](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/dynamic_dictionaries/index.md)
312
+ - [Dynamic Dictionaries - Collections & Variants](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/dynamic_dictionaries/index.md)
290
313
  - [Configuration Reference](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/configuration.md)
@@ -1,13 +1,12 @@
1
1
  ---
2
2
  createdAt: 2026-06-12
3
- updatedAt: 2026-06-12
4
- title: Kamus Dinamis
5
- description: Gambaran umum tentang tiga fitur kamus dinamis Intlayer — koleksi, varian, dan catatan dinamis — untuk membangun konten i18n yang fleksibel dan didorong oleh runtime.
3
+ updatedAt: 2026-06-26
4
+ title: Kamus dinamis
5
+ description: Ikhtisar fitur kamus dinamis Intlayer — koleksi dan varian — untuk membangun konten i18n yang fleksibel dan digerakkan saat runtime.
6
6
  keywords:
7
- - Kamus Dinamis
7
+ - Kamus dinamis
8
8
  - Koleksi
9
9
  - Varian
10
- - Catatan Dinamis
11
10
  - Intlayer
12
11
  - Internasionalisasi
13
12
  slugs:
@@ -18,31 +17,38 @@ history:
18
17
  - version: 9.0.0
19
18
  date: 2026-06-12
20
19
  changes: "Rilis fitur kamus dinamis"
20
+ - version: 9.1.0
21
+ date: 2026-06-26
22
+ changes: "Menggabungkan record dinamis ke dalam varian — `variant` kini menerima string atau objek"
21
23
  author: aymericzip
22
24
  ---
23
25
 
24
- # Kamus Dinamis
26
+ # Kamus dinamis
25
27
 
26
- Intlayer mendukung tiga mekanisme untuk mengekspresikan konten yang melampaui satu kamus statis per kunci. Masing-masing dideklarasikan melalui **bidang metadata tingkat atas** dalam file konten; tidak ada fungsi pembungkus (wrapper) yang diperlukan.
28
+ Intlayer mendukung dua mekanisme untuk mengekspresikan konten yang melampaui satu kamus statis per kunci. Masing-masing dideklarasikan melalui **field metadata tingkat atas** di file konten; tidak diperlukan fungsi pembungkus.
27
29
 
28
- | Fitur | Bidang metadata | Selektor dalam `useIntlayer` |
29
- | ------------------------------------------------------------------------------------------------------------------------ | ----------------- | ---------------------------- |
30
- | [Koleksi](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dynamic_dictionaries/collections.md) | `item: N` | `{ item: N }` |
31
- | [Varian](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dynamic_dictionaries/variants.md) | `variant: "name"` | `{ variant: "name" }` |
32
- | [Catatan Dinamis](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dynamic_dictionaries/dynamic_content.md) | `meta: { id, … }` | `{ id, … }` |
30
+ | Fitur | Field metadata | Selektor di `useIntlayer` |
31
+ | ------------------------------------------------------------------------------------------------------------ | ----------------------------------------- | ------------------------------------------------- |
32
+ | [Koleksi](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dynamic_dictionaries/collections.md) | `item: N` | `{ item: N }` |
33
+ | [Varian](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dynamic_dictionaries/variants.md) | `variant: "name"` _atau_ `variant: { … }` | `{ variant: "name" }` _atau_ `{ variant: { … } }` |
33
34
 
34
- Ketiganya disusun dengan argumen lokalitas dan mendukung pemuatan selektif / malas (lazy loading) melalui `importMode`.
35
+ Keduanya dapat dikombinasikan dengan argumen locale dan mendukung pemuatan selektif / malas melalui `importMode`.
35
36
 
36
37
  ## Kapan menggunakan yang mana
37
38
 
38
- - **Koleksi** — daftar item terurut yang dikelola dalam file terpisah (entri FAQ, postingan blog, produk).
39
- - **Varian** — alternatif konten bernama untuk pengujian A/B, spanduk musiman, atau bendera fitur (feature flags).
40
- - **Catatan dinamis** konten yang diambil saat runtime menggunakan ID buram (catatan CMS, salinan khusus pengguna).
39
+ - **Koleksi** — daftar item terurut yang dikelola dalam file terpisah (entri FAQ, posting blog, produk).
40
+ - **Varian** — alternatif konten bernama atau terstruktur:
41
+ - varian **string** untuk pengujian A/B, banner musiman, atau feature flag;
42
+ - varian **objek** untuk record CMS, konten khusus pengguna, atau konten apa pun yang dialamatkan oleh sekumpulan field ("record dinamis" sebelumnya).
41
43
 
42
- ## Resolusi Konflik Selektor
44
+ > Versi sebelumnya menyediakan field `meta` terpisah untuk konten berkunci record. Field ini telah digabungkan ke `variant`: berikan **objek** ke `variant` alih-alih menggunakan `meta`.
43
45
 
44
- Ketika ada beberapa selektor pada satu kamus, urutan resolusinya adalah:
46
+ ## Disambiguasi selektor
47
+
48
+ Sebuah kunci dapat mendeklarasikan kedua dimensi sekaligus (mis. koleksi yang setiap itemnya memiliki varian). Keduanya diselesaikan dengan urutan:
45
49
 
46
50
  ```
47
- variant → meta → item
51
+ variant → item
48
52
  ```
53
+
54
+ Jadi `{ variant: "promo" }` pada kunci variant × item mengembalikan semua item promo sebagai array, dan menambahkan `{ item: 2 }` mempersempitnya menjadi satu entri.