@intlayer/docs 8.4.4 → 8.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dist/cjs/_virtual/_rolldown/runtime.cjs +29 -0
  2. package/dist/cjs/blog.cjs +21 -1
  3. package/dist/cjs/blog.cjs.map +1 -1
  4. package/dist/cjs/common.cjs +81 -1
  5. package/dist/cjs/common.cjs.map +1 -0
  6. package/dist/cjs/doc.cjs +21 -1
  7. package/dist/cjs/doc.cjs.map +1 -1
  8. package/dist/cjs/frequentQuestions.cjs +21 -1
  9. package/dist/cjs/frequentQuestions.cjs.map +1 -1
  10. package/dist/cjs/generated/blog.entry.cjs +572 -1
  11. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  12. package/dist/cjs/generated/docs.entry.cjs +3032 -1
  13. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  14. package/dist/cjs/generated/frequentQuestions.entry.cjs +352 -1
  15. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  16. package/dist/cjs/generated/legal.entry.cjs +72 -1
  17. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  18. package/dist/cjs/index.cjs +34 -1
  19. package/dist/cjs/legal.cjs +21 -1
  20. package/dist/cjs/legal.cjs.map +1 -1
  21. package/dist/esm/blog.mjs +14 -1
  22. package/dist/esm/blog.mjs.map +1 -1
  23. package/dist/esm/common.mjs +67 -1
  24. package/dist/esm/common.mjs.map +1 -1
  25. package/dist/esm/doc.mjs +14 -1
  26. package/dist/esm/doc.mjs.map +1 -1
  27. package/dist/esm/frequentQuestions.mjs +14 -1
  28. package/dist/esm/frequentQuestions.mjs.map +1 -1
  29. package/dist/esm/generated/blog.entry.mjs +570 -1
  30. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  31. package/dist/esm/generated/docs.entry.mjs +3030 -1
  32. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  33. package/dist/esm/generated/frequentQuestions.entry.mjs +350 -1
  34. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  35. package/dist/esm/generated/legal.entry.mjs +70 -1
  36. package/dist/esm/generated/legal.entry.mjs.map +1 -1
  37. package/dist/esm/index.mjs +6 -1
  38. package/dist/esm/legal.mjs +14 -1
  39. package/dist/esm/legal.mjs.map +1 -1
  40. package/dist/types/blog.d.ts +2 -2
  41. package/dist/types/common.d.ts +37 -2
  42. package/dist/types/common.d.ts.map +1 -0
  43. package/dist/types/doc.d.ts +2 -2
  44. package/dist/types/frequentQuestions.d.ts +2 -2
  45. package/dist/types/generated/blog.entry.d.ts +35 -2
  46. package/dist/types/generated/blog.entry.d.ts.map +1 -0
  47. package/dist/types/generated/docs.entry.d.ts +158 -2
  48. package/dist/types/generated/docs.entry.d.ts.map +1 -0
  49. package/dist/types/generated/frequentQuestions.entry.d.ts +24 -2
  50. package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -0
  51. package/dist/types/generated/legal.entry.d.ts +10 -2
  52. package/dist/types/generated/legal.entry.d.ts.map +1 -0
  53. package/dist/types/legal.d.ts +2 -2
  54. package/docs/ar/configuration.md +520 -722
  55. package/docs/ar/intlayer_with_storybook.md +521 -0
  56. package/docs/bn/configuration.md +922 -0
  57. package/docs/bn/intlayer_with_hono.md +428 -0
  58. package/docs/de/configuration.md +369 -743
  59. package/docs/de/intlayer_with_storybook.md +521 -0
  60. package/docs/en/configuration.md +181 -507
  61. package/docs/en/intlayer_with_storybook.md +521 -0
  62. package/docs/en-GB/configuration.md +456 -657
  63. package/docs/en-GB/intlayer_with_storybook.md +521 -0
  64. package/docs/es/configuration.md +379 -754
  65. package/docs/es/intlayer_with_storybook.md +521 -0
  66. package/docs/fr/configuration.md +376 -757
  67. package/docs/fr/intlayer_with_storybook.md +521 -0
  68. package/docs/hi/configuration.md +532 -728
  69. package/docs/hi/intlayer_with_storybook.md +521 -0
  70. package/docs/id/configuration.md +371 -684
  71. package/docs/id/intlayer_with_storybook.md +521 -0
  72. package/docs/it/configuration.md +397 -775
  73. package/docs/it/intlayer_with_storybook.md +521 -0
  74. package/docs/ja/configuration.md +525 -724
  75. package/docs/ja/intlayer_with_storybook.md +521 -0
  76. package/docs/ko/configuration.md +525 -724
  77. package/docs/ko/intlayer_with_storybook.md +521 -0
  78. package/docs/pl/configuration.md +430 -734
  79. package/docs/pl/intlayer_with_storybook.md +521 -0
  80. package/docs/pt/configuration.md +375 -746
  81. package/docs/pt/intlayer_with_storybook.md +521 -0
  82. package/docs/ru/configuration.md +532 -701
  83. package/docs/ru/intlayer_with_storybook.md +521 -0
  84. package/docs/tr/configuration.md +527 -719
  85. package/docs/tr/intlayer_with_storybook.md +521 -0
  86. package/docs/uk/configuration.md +425 -744
  87. package/docs/uk/intlayer_with_storybook.md +521 -0
  88. package/docs/ur/configuration.md +922 -0
  89. package/docs/ur/intlayer_with_hono.md +428 -0
  90. package/docs/vi/configuration.md +412 -753
  91. package/docs/vi/intlayer_with_storybook.md +521 -0
  92. package/docs/zh/configuration.md +521 -714
  93. package/docs/zh/intlayer_with_storybook.md +521 -0
  94. package/package.json +6 -6
  95. package/src/generated/docs.entry.ts +20 -0
  96. package/dist/cjs/common-a-l0ULP6.cjs +0 -2
  97. package/dist/cjs/common-a-l0ULP6.cjs.map +0 -1
  98. package/dist/types/blog.entry-D5IgxPXY.d.ts +0 -35
  99. package/dist/types/blog.entry-D5IgxPXY.d.ts.map +0 -1
  100. package/dist/types/common-B45TZvLQ.d.ts +0 -37
  101. package/dist/types/common-B45TZvLQ.d.ts.map +0 -1
  102. package/dist/types/docs.entry-CergjAYt.d.ts +0 -157
  103. package/dist/types/docs.entry-CergjAYt.d.ts.map +0 -1
  104. package/dist/types/frequentQuestions.entry-BHglVS-U.d.ts +0 -24
  105. package/dist/types/frequentQuestions.entry-BHglVS-U.d.ts.map +0 -1
  106. package/dist/types/legal.entry-B5Lg5eeH.d.ts +0 -10
  107. package/dist/types/legal.entry-B5Lg5eeH.d.ts.map +0 -1
@@ -0,0 +1,521 @@
1
+ ---
2
+ createdAt: 2026-03-20
3
+ updatedAt: 2026-03-20
4
+ title: Storybook के साथ Intlayer कैसे सेटअप करें
5
+ description: सीखें कि Intlayer और Storybook का उपयोग करके अपने डिज़ाइन सिस्टम को बहुभाषी कैसे बनाया जाए — सामग्री घोषणाओं को संकलित करें, एक स्थानीय स्विचर जोड़ें और किसी भी भाषा में अपने घटकों का पूर्वावलोकन करें।
6
+ keywords:
7
+ - अंतर्राष्ट्रीयकरण
8
+ - प्रलेखन
9
+ - Intlayer
10
+ - Storybook
11
+ - React
12
+ - i18n
13
+ - TypeScript
14
+ - Vite
15
+ - Webpack
16
+ slugs:
17
+ - doc
18
+ - storybook
19
+ history:
20
+ - version: 8.4.5
21
+ date: 2026-03-20
22
+ changes: Init doc
23
+ ---
24
+
25
+ # Storybook के साथ Intlayer
26
+
27
+ ## विषय सूची
28
+
29
+ <TOC/>
30
+
31
+ ## Intlayer क्या है?
32
+
33
+ **Intlayer** एक अभिनव, ओपन-सोर्स अंतर्राष्ट्रीयकरण (i18n) लाइब्रेरी है जिसे आधुनिक वेब अनुप्रयोगों में बहुभाषी समर्थन को सरल बनाने के लिए डिज़ाइन किया गया है। यह **घटक स्तर** (component level) पर काम करता है — प्रत्येक घटक की अपनी सामग्री घोषणाएँ होती हैं — जो अनुवादों को उसी कोड के साथ रखती हैं जो उनका उपयोग करता है।
34
+
35
+ Intlayer के साथ आप:
36
+
37
+ - **घोषणात्मक रूप से अनुवाद प्रबंधित करें** प्रति-घटक सामग्री फ़ाइलों के साथ।
38
+ - **पूर्ण TypeScript समर्थन प्राप्त करें** स्वतः उत्पन्न प्रकारों और IDE ऑटो-पूर्णता के माध्यम से।
39
+ - **रनटाइम पर स्थानीय भाषा बदलें** बिना पेज रीलोड किए।
40
+ - **स्वचालित रूप से अनुवाद करें** अंतर्निहित AI प्रदाता एकीकरण के साथ।
41
+
42
+ ---
43
+
44
+ ## Storybook के साथ Intlayer का उपयोग क्यों करें?
45
+
46
+ Storybook UI घटकों को अलग से विकसित करने और प्रलेखित करने के लिए उद्योग-मानक उपकरण है। इसे Intlayer के साथ जोड़ने से आपको ये सुविधाएं मिलती हैं:
47
+
48
+ - **प्रत्येक स्थानीय भाषा का पूर्वावलोकन करें** सीधे Storybook कैनवास के अंदर टूलबार स्विचर का उपयोग करके।
49
+ - **छूटे हुए अनुवादों को पकड़ें** उत्पादन (production) तक पहुँचने से पहले।
50
+ - **बहुभाषी घटकों को प्रलेखित करें** हार्ड-कोडेड स्ट्रिंग्स के बजाय वास्तविक, टाइप-सेफ सामग्री के साथ।
51
+
52
+ ---
53
+
54
+ ## चरण-दर-चरण सेटअप
55
+
56
+ <Tabs>
57
+ <Tab value="Vite Setup">
58
+
59
+ ### चरण 1: निर्भरताएँ स्थापित करें
60
+
61
+ ```bash packageManager="npm"
62
+ npm install intlayer react-intlayer
63
+ npm install vite-intlayer --save-dev
64
+ ```
65
+
66
+ ```bash packageManager="pnpm"
67
+ pnpm add intlayer react-intlayer
68
+ pnpm add vite-intlayer --save-dev
69
+ ```
70
+
71
+ ```bash packageManager="yarn"
72
+ yarn add intlayer react-intlayer
73
+ yarn add vite-intlayer --save-dev
74
+ ```
75
+
76
+ ```bash packageManager="bun"
77
+ bun add intlayer react-intlayer
78
+ bun add vite-intlayer --dev
79
+ ```
80
+
81
+ | पैकेज | भूमिका |
82
+ | ---------------- | -------------------------------------------------------------- |
83
+ | `intlayer` | कोर — कॉन्फ़िगरेशन, सामग्री संकलन, CLI |
84
+ | `react-intlayer` | React बाइंडिंग्स — `IntlayerProvider`, `useIntlayer` हुक |
85
+ | `vite-intlayer` | Vite प्लगइन — सामग्री घोषणा फ़ाइलों को देखता और संकलित करता है |
86
+
87
+ ---
88
+
89
+ ### चरण 2: Intlayer कॉन्फ़िगरेशन बनाएँ
90
+
91
+ अपने प्रोजेक्ट के रूट में (या अपने डिज़ाइन-सिस्टम पैकेज के अंदर) `intlayer.config.ts` बनाएँ:
92
+
93
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
94
+ import { Locales, type IntlayerConfig } from "intlayer";
95
+
96
+ const config: IntlayerConfig = {
97
+ internationalization: {
98
+ locales: [
99
+ Locales.ENGLISH,
100
+ Locales.FRENCH,
101
+ Locales.SPANISH,
102
+ // आवश्यकतानुसार और स्थानीय भाषाएँ जोड़ें
103
+ ],
104
+ defaultLocale: Locales.ENGLISH,
105
+ },
106
+ content: {
107
+ contentDir: ["./src"], // जहाँ आपकी *.content.ts फ़ाइलें रहती हैं
108
+ },
109
+ };
110
+
111
+ export default config;
112
+ ```
113
+
114
+ > विकल्पों की पूरी सूची के लिए [कॉन्फ़िगरेशन संदर्भ](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/configuration.md) देखें।
115
+
116
+ ---
117
+
118
+ ### चरण 3: Storybook में Vite प्लगइन जोड़ें
119
+
120
+ Storybook का `viteFinal` हुक आपको आंतरिक Vite कॉन्फ़िगरेशन को विस्तारित करने की अनुमति देता है। वहां `intlayer()` प्लगइन आयात करें और जोड़ें:
121
+
122
+ ```typescript fileName=".storybook/main.ts" codeFormat="typescript"
123
+ import type { StorybookConfig } from "@storybook/react-vite";
124
+ import { defineConfig, mergeConfig } from "vite";
125
+ import { intlayer } from "vite-intlayer";
126
+
127
+ const config: StorybookConfig = {
128
+ stories: ["../src/**/*.stories.@(js|jsx|ts|tsx)"],
129
+ addons: [
130
+ "@storybook/addon-essentials",
131
+ // …अन्य ऐडऑन
132
+ ],
133
+ framework: {
134
+ name: "@storybook/react-vite",
135
+ options: {},
136
+ },
137
+
138
+ async viteFinal(baseConfig, { configType }) {
139
+ const env = {
140
+ command: configType === "DEVELOPMENT" ? "serve" : "build",
141
+ mode: configType === "DEVELOPMENT" ? "development" : "production",
142
+ } as const;
143
+
144
+ const viteConfig = defineConfig(() => ({
145
+ plugins: [intlayer()],
146
+ }));
147
+
148
+ return mergeConfig(baseConfig, viteConfig(env));
149
+ },
150
+ };
151
+
152
+ export default config;
153
+ ```
154
+
155
+ `intlayer()` प्लगइन आपकी `*.content.ts` फ़ाइलों को देखता है और Storybook विकास के दौरान जब भी वे बदलते हैं, शब्दकोशों को स्वचालित रूप से फिर से बनाता है।
156
+
157
+ ---
158
+
159
+ ### चरण 4: `IntlayerProvider` डेकोरेटर और एक स्थानीय टूलबार जोड़ें
160
+
161
+ Storybook की `preview` फ़ाइल प्रत्येक कहानी (story) को `IntlayerProvider` के साथ लपेटने और टूलबार में एक स्थानीय स्विचर को उजागर करने के लिए सही जगह है:
162
+
163
+ ```tsx fileName=".storybook/preview.tsx" codeFormat="typescript"
164
+ import type { Preview, StoryContext } from "@storybook/react";
165
+ import { IntlayerProvider } from "react-intlayer";
166
+
167
+ const preview: Preview = {
168
+ // प्रत्येक कहानी को IntlayerProvider के अंदर लपेटें
169
+ decorators: [
170
+ (Story, context: StoryContext) => {
171
+ const locale = context.globals.locale ?? "en";
172
+ return (
173
+ <IntlayerProvider locale={locale}>
174
+ <Story />
175
+ </IntlayerProvider>
176
+ );
177
+ },
178
+ ],
179
+
180
+ // Storybook टूलबार में एक स्थानीय स्विचर उजागर करें
181
+ globalTypes: {
182
+ locale: {
183
+ description: "सक्रिय स्थानीय भाषा",
184
+ defaultValue: "en",
185
+ toolbar: {
186
+ title: "स्थानीय भाषा",
187
+ icon: "globe",
188
+ items: [
189
+ { value: "en", title: "English" },
190
+ { value: "fr", title: "Français" },
191
+ { value: "es", title: "Español" },
192
+ ],
193
+ dynamicTitle: true,
194
+ },
195
+ },
196
+ },
197
+
198
+ parameters: {
199
+ controls: {
200
+ matchers: {
201
+ color: /(background|color)$/i,
202
+ date: /Date$/i,
203
+ },
204
+ },
205
+ },
206
+ };
207
+
208
+ export default preview;
209
+ ```
210
+
211
+ > `locale` मान आपके `intlayer.config.ts` में घोषित स्थानीय भाषाओं के साथ मेल खाने चाहिए।
212
+
213
+ </Tab>
214
+ <Tab value="Webpack Setup">
215
+
216
+ ### चरण 1: निर्भरताएँ स्थापित करें
217
+
218
+ ```bash packageManager="npm"
219
+ npm install intlayer react-intlayer
220
+ npm install @intlayer/webpack --save-dev
221
+ ```
222
+
223
+ ```bash packageManager="pnpm"
224
+ pnpm add intlayer react-intlayer
225
+ pnpm add @intlayer/webpack --save-dev
226
+ ```
227
+
228
+ ```bash packageManager="yarn"
229
+ yarn add intlayer react-intlayer
230
+ yarn add @intlayer/webpack --save-dev
231
+ ```
232
+
233
+ ```bash packageManager="bun"
234
+ bun add intlayer react-intlayer
235
+ bun add @intlayer/webpack --dev
236
+ ```
237
+
238
+ ---
239
+
240
+ ### चरण 2: Intlayer कॉन्फ़िगरेशन बनाएँ
241
+
242
+ अपने प्रोजेक्ट के रूट में `intlayer.config.ts` बनाएँ:
243
+
244
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
245
+ import { Locales, type IntlayerConfig } from "intlayer";
246
+
247
+ const config: IntlayerConfig = {
248
+ internationalization: {
249
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
250
+ defaultLocale: Locales.ENGLISH,
251
+ },
252
+ content: {
253
+ contentDir: ["./src"],
254
+ },
255
+ };
256
+
257
+ export default config;
258
+ ```
259
+
260
+ ---
261
+
262
+ ### चरण 3: Storybook के Webpack को कॉन्फ़िगर करें
263
+
264
+ Webpack-आधारित Storybook सेटअप (जैसे `@storybook/react-webpack5`) के लिए, Intlayer उपनाम और लोडर जोड़ने के लिए `webpackFinal` के माध्यम से webpack कॉन्फ़िगरेशन का विस्तार करें:
265
+
266
+ ```typescript fileName=".storybook/main.ts" codeFormat="typescript"
267
+ import type { StorybookConfig } from "@storybook/react-webpack5";
268
+ import { IntlayerWebpackPlugin } from "@intlayer/webpack";
269
+
270
+ const config: StorybookConfig = {
271
+ stories: ["../src/**/*.stories.@(js|jsx|ts|tsx)"],
272
+ addons: ["@storybook/addon-essentials"],
273
+ framework: {
274
+ name: "@storybook/react-webpack5",
275
+ options: {},
276
+ },
277
+
278
+ webpackFinal: async (baseConfig) => {
279
+ baseConfig.plugins = [
280
+ ...(baseConfig.plugins ?? []),
281
+ new IntlayerWebpackPlugin(),
282
+ ];
283
+ return baseConfig;
284
+ },
285
+ };
286
+
287
+ export default config;
288
+ ```
289
+
290
+ ---
291
+
292
+ ### चरण 4: `IntlayerProvider` डेकोरेटर और एक स्थानीय टूलबार जोड़ें
293
+
294
+ Vite सेटअप के समान — `.storybook/preview.tsx` में डेकोरेटर और वैश्विक स्थानीय प्रकार जोड़ें:
295
+
296
+ ```tsx fileName=".storybook/preview.tsx" codeFormat="typescript"
297
+ import type { Preview, StoryContext } from "@storybook/react";
298
+ import { IntlayerProvider } from "react-intlayer";
299
+
300
+ const preview: Preview = {
301
+ decorators: [
302
+ (Story, context: StoryContext) => {
303
+ const locale = context.globals.locale ?? "en";
304
+ return (
305
+ <IntlayerProvider locale={locale}>
306
+ <Story />
307
+ </IntlayerProvider>
308
+ );
309
+ },
310
+ ],
311
+
312
+ globalTypes: {
313
+ locale: {
314
+ description: "सक्रिय स्थानीय भाषा",
315
+ defaultValue: "en",
316
+ toolbar: {
317
+ title: "स्थानीय भाषा",
318
+ icon: "globe",
319
+ items: [
320
+ { value: "en", title: "English" },
321
+ { value: "fr", title: "Français" },
322
+ { value: "es", title: "Español" },
323
+ ],
324
+ dynamicTitle: true,
325
+ },
326
+ },
327
+ },
328
+ };
329
+
330
+ export default preview;
331
+ ```
332
+
333
+ </Tab>
334
+ </Tabs>
335
+
336
+ ---
337
+
338
+ ## सामग्री घोषित करना
339
+
340
+ प्रत्येक घटक के बगल में एक `*.content.ts` फ़ाइल बनाएँ। Intlayer संकलन के दौरान इसे स्वचालित रूप से चुन लेता है।
341
+
342
+ ```typescript fileName="src/components/CopyButton/CopyButton.content.ts" codeFormat="typescript"
343
+ import { type Dictionary, t } from "intlayer";
344
+
345
+ const copyButtonContent = {
346
+ key: "copy-button",
347
+ content: {
348
+ label: t({
349
+ en: "Copy content",
350
+ fr: "Copier le contenu",
351
+ es: "Copiar contenido",
352
+ }),
353
+ },
354
+ } satisfies Dictionary;
355
+
356
+ export default copyButtonContent;
357
+ ```
358
+
359
+ ```javascript fileName="src/components/CopyButton/CopyButton.content.mjs" codeFormat="esm"
360
+ import { t } from "intlayer";
361
+
362
+ /** @type {import('intlayer').Dictionary} */
363
+ const copyButtonContent = {
364
+ key: "copy-button",
365
+ content: {
366
+ label: t({
367
+ en: "Copy content",
368
+ fr: "Copier le contenu",
369
+ es: "Copiar contenido",
370
+ }),
371
+ },
372
+ };
373
+
374
+ export default copyButtonContent;
375
+ ```
376
+
377
+ ```javascript fileName="src/components/CopyButton/CopyButton.content.cjs" codeFormat="commonjs"
378
+ const { t } = require("intlayer");
379
+
380
+ /** @type {import('intlayer').Dictionary} */
381
+ const copyButtonContent = {
382
+ key: "copy-button",
383
+ content: {
384
+ label: t({
385
+ en: "Copy content",
386
+ fr: "Copier le contenu",
387
+ es: "Copiar contenido",
388
+ }),
389
+ },
390
+ };
391
+
392
+ module.exports = copyButtonContent;
393
+ ```
394
+
395
+ > अधिक सामग्री घोषणा प्रारूपों और सुविधाओं के लिए [सामग्री घोषणा प्रलेखन](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/dictionary/content_file.md) देखें।
396
+
397
+ ---
398
+
399
+ ## घटक में `useIntlayer` का उपयोग करना
400
+
401
+ ```tsx fileName="src/components/CopyButton/index.tsx" codeFormat="typescript"
402
+ "use client";
403
+
404
+ import { type FC } from "react";
405
+ import { useIntlayer } from "react-intlayer";
406
+
407
+ type CopyButtonProps = {
408
+ content: string;
409
+ };
410
+
411
+ export const CopyButton: FC<CopyButtonProps> = ({ content }) => {
412
+ const { label } = useIntlayer("copy-button");
413
+
414
+ return (
415
+ <button
416
+ onClick={() => navigator.clipboard.writeText(content)}
417
+ aria-label={label.value}
418
+ title={label.value}
419
+ >
420
+ कॉपी करें
421
+ </button>
422
+ );
423
+ };
424
+ ```
425
+
426
+ `useIntlayer` निकटतम `IntlayerProvider` द्वारा प्रदान की गई वर्तमान स्थानीय भाषा के लिए संकलित शब्दकोश लौटाता है। Storybook टूलबार में स्थानीय भाषा बदलने से कहानी स्वचालित रूप से अद्यतन अनुवादों के साथ फिर से रेंडर हो जाती है।
427
+
428
+ ---
429
+
430
+ ## अंतर्राष्ट्रीयकृत घटकों के लिए कहानियाँ (Stories) लिखना
431
+
432
+ `IntlayerProvider` डेकोरेटर के साथ, आपकी कहानियाँ पहले की तरह ही काम करती हैं। स्थानीय टूलबार पूरे कैनवास के लिए सक्रिय स्थानीय भाषा को नियंत्रित करता है:
433
+
434
+ ```tsx fileName="src/components/CopyButton/CopyButton.stories.tsx" codeFormat="typescript"
435
+ import type { Meta, StoryObj } from "@storybook/react";
436
+ import { CopyButton } from ".";
437
+
438
+ const meta: Meta<typeof CopyButton> = {
439
+ title: "Components/CopyButton",
440
+ component: CopyButton,
441
+ tags: ["autodocs"],
442
+ argTypes: {
443
+ content: { control: "text" },
444
+ },
445
+ };
446
+
447
+ export default meta;
448
+ type Story = StoryObj<typeof CopyButton>;
449
+
450
+ /** डिफ़ॉल्ट कहानी — अनुवादों का पूर्वावलोकन करने के लिए टूलबार में स्थानीय भाषा बदलें। */
451
+ export const Default: Story = {
452
+ args: {
453
+ content: "npm install intlayer react-intlayer",
454
+ },
455
+ };
456
+
457
+ /** एक कोड ब्लॉक के अंदर बटन को रेंडर करता है, जो वास्तविक दुनिया में एक सामान्य उपयोग का मामला है। */
458
+ export const InsideCodeBlock: Story = {
459
+ render: (args) => (
460
+ <div style={{ position: "relative", display: "inline-block" }}>
461
+ <pre style={{ background: "#1e1e1e", color: "#fff", padding: "1rem" }}>
462
+ <code>{args.content}</code>
463
+ </pre>
464
+ <CopyButton
465
+ content={args.content}
466
+ style={{ position: "absolute", top: 8, right: 8 }}
467
+ />
468
+ </div>
469
+ ),
470
+ args: {
471
+ content: "npx intlayer init",
472
+ },
473
+ };
474
+ ```
475
+
476
+ > प्रत्येक कहानी टूलबार से `locale` ग्लोबल को इनहेरिट करती है, इसलिए आप किसी भी कहानी कोड को बदले बिना प्रत्येक स्थानीय भाषा को सत्यापित कर सकते हैं।
477
+
478
+ ---
479
+
480
+ ## कहानियों में अनुवाद का परीक्षण करना
481
+
482
+ यह सुनिश्चित करने के लिए Storybook के `play` फ़ंक्शंस का उपयोग करें कि किसी दिए गए स्थानीय भाषा के लिए सही अनुवादित पाठ रेंडर किया गया है:
483
+
484
+ ```tsx fileName="src/components/CopyButton/CopyButton.stories.tsx" codeFormat="typescript"
485
+ import type { Meta, StoryObj } from "@storybook/react";
486
+ import { expect, within } from "@storybook/test";
487
+ import { CopyButton } from ".";
488
+
489
+ const meta: Meta<typeof CopyButton> = {
490
+ title: "Components/CopyButton",
491
+ component: CopyButton,
492
+ tags: ["autodocs"],
493
+ };
494
+
495
+ export default meta;
496
+ type Story = StoryObj<typeof CopyButton>;
497
+
498
+ export const AccessibleLabel: Story = {
499
+ args: { content: "Hello World" },
500
+ play: async ({ canvasElement }) => {
501
+ const canvas = within(canvasElement);
502
+ const button = canvas.getByRole("button");
503
+
504
+ // सत्यापित करें कि बटन का एक गैर-रिक्त सुलभ नाम है
505
+ await expect(button).toHaveAccessibleName();
506
+ // सत्यापित करें कि बटन अक्षम नहीं है
507
+ await expect(button).not.toBeDisabled();
508
+ // कीबोर्ड पहुंच सत्यापित करें
509
+ await expect(button).toHaveAttribute("tabindex", "0");
510
+ },
511
+ };
512
+ ```
513
+
514
+ ---
515
+
516
+ ## अतिरिक्त संसाधन
517
+
518
+ - [Intlayer कॉन्फ़िगरेशन संदर्भ](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/configuration.md)
519
+ - [सामग्री घोषणा प्रलेखन](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/dictionary/content_file.md)
520
+ - [Intlayer CLI प्रलेखन](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/cli/index.md)
521
+ - [Storybook प्रलेखन](https://storybook.js.org/docs)