अपने प्रश्न को पूछें और दस्तावेज़ का सारांश प्राप्त करें, इस पृष्ठ और आपके चुने हुए AI प्रदाता का उपयोग करके
इस पृष्ठ की सामग्री एक AI द्वारा अनुवादित की गई है।
अंग्रेजी में मूल सामग्री के अंतिम संस्करण देखेंIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
नया Intlayer v7 - क्या नया है?
Intlayer v7 में आपका स्वागत है! यह प्रमुख रिलीज़ प्रदर्शन, टाइप सुरक्षा, और डेवलपर अनुभव में महत्वपूर्ण सुधार लाती है। नीचे मुख्य बिंदु दिए गए हैं, साथ ही माइग्रेशन नोट्स और व्यावहारिक उदाहरण।
विषय-सूची
मुख्य बिंदु
- तेज़ बिल्ड के लिए कैशिंग रणनीति
- बेहतर TypeScript टाइप जनरेशन लोकल-विशिष्ट टाइप्स के साथ
- बंडल अनुकूलन: लोकल्स को enum के बजाय स्ट्रिंग्स के रूप में
- नए रूटिंग मोड्स:
prefix-no-default,prefix-all,no-prefix,search-params - GDPR-अनुपालन लोकल स्टोरेज, डिफ़ॉल्ट के रूप में localStorage के साथ
- लचीला स्टोरेज कॉन्फ़िगरेशन: कुकीज़, localStorage, sessionStorage, या कई विकल्प
- विजुअल एडिटर पैकेज का आकार 30% छोटा
- बेहतर मिडलवेयर कॉन्फ़िगरेशन विकल्प
- बेहतर कंटेंट प्रबंधन के लिए अपडेटेड fill कमांड व्यवहार
- पूर्ण कंटेंट घोषणा फ़ाइल अपडेट के साथ बेहतर स्थिरता
- अनुवाद की सटीकता के लिए बुद्धिमान पुनः प्रयास प्रबंधन
- तेज़ अनुवाद प्रसंस्करण के लिए समानांतरता
- AI संदर्भ सीमाओं के भीतर बड़े फ़ाइलों को संभालने के लिए स्मार्ट chunking
प्रदर्शन: तेज़ बिल्ड के लिए कैशिंग
esbuild के साथ हर बिल्ड पर कंटेंट घोषणाओं को फिर से बनाने के बजाय, v7 एक कैशिंग रणनीति लागू करता है जो बिल्ड प्रक्रिया को तेज़ करता है।
कोड को क्लिपबोर्ड पर कॉपी करें
npx intlayer buildनई कैशिंग प्रणाली:
- अनावश्यक प्रोसेसिंग से बचने के लिए संकलित कंटेंट घोषणाओं को संग्रहीत करता है
- परिवर्तनों का पता लगाता है और केवल संशोधित फ़ाइलों को पुनर्निर्मित करता है
- बड़े प्रोजेक्ट्स के लिए बिल्ड समय को काफी कम करता है
TypeScript: लोकल-विशिष्ट टाइप जनरेशन
TypeScript टाइप अब प्रत्येक लोकल के लिए उत्पन्न होते हैं, जो मजबूत टाइपिंग प्रदान करते हैं और सभी लोकल्स में यूनियन टाइप्स को समाप्त करते हैं।
v6 व्यवहार:
कोड को क्लिपबोर्ड पर कॉपी करें
const content = getIntlayer("my-title-content", "en");// typeof content = { title: "My title" } | { title: "Mon titre" } | { title: "Mi título" }v7 व्यवहार:
कोड को क्लिपबोर्ड पर कॉपी करें
const content = getIntlayer("my-title-content", "en");// typeof content = { title: "My title" }लाभ:
- आपके IDE में अधिक सटीक ऑटोकंप्लीट
- बेहतर टाइप सुरक्षा बिना क्रॉस-लोकल टाइप प्रदूषण के
- टाइप जटिलता को कम करके बेहतर प्रदर्शन
बंडल अनुकूलन: लोकल्स को स्ट्रिंग्स के रूप में
Locales टाइप अब एक enum नहीं है, जिसका मतलब है कि यह अब पूरी तरह से ट्री-शेकेबल है और आपके बंडल को हजारों अप्रयुक्त लोकल रिकॉर्ड्स से भारी नहीं करेगा।
v6:
कोड को क्लिपबोर्ड पर कॉपी करें
import { Locales } from "intlayer";// सभी लोकल्स शामिल करने वाला enum -> ट्री-शेकेबल नहींconst locale: Locales = Locales.ENGLISH;v7:
कोड को क्लिपबोर्ड पर कॉपी करें
import { Locales, Locale } from "intlayer";// स्ट्रिंग टाइप -> पूरी तरह से ट्री-शेकेबलconst locale: Locale = Locales.ENGLISH;क्योंकिLocalesअब एक enum नहीं है, आपको टाइप कोLocalesसेLocaleमें बदलना होगा ताकि आप लोकल को एक टाइप के रूप में प्राप्त कर सकें।
अधिक जानकारी के लिए इम्प्लीमेंटेशन विवरण देखें।
अधिक लचीलापन के लिए नए रूटिंग मोड
v7 एक एकीकृत routing.mode कॉन्फ़िगरेशन पेश करता है जो पिछले prefixDefault और noPrefix विकल्पों को बदलता है, जिससे URL संरचना पर अधिक सूक्ष्म नियंत्रण मिलता है।
उपलब्ध रूटिंग मोड
prefix-no-default(डिफ़ॉल्ट): डिफ़ॉल्ट लोकल में कोई प्रीफिक्स नहीं होता, अन्य लोकल्स में होता है/dashboard(en) या/fr/dashboard(fr)
prefix-all: सभी लोकल्स में प्रीफिक्स होता है/en/dashboard(en) या/fr/dashboard(fr)`
no-prefix: URL में कोई लोकल प्रीफिक्स नहीं (लोकल स्टोरेज/हेडर के माध्यम से संभाला जाता है)- सभी लोकल्स के लिए
/dashboard
- सभी लोकल्स के लिए
search-params: लोकल को क्वेरी पैरामीटर के रूप में पास किया जाता है/dashboard?locale=enया/dashboard?locale=fr
बुनियादी कॉन्फ़िगरेशन
कोड को क्लिपबोर्ड पर कॉपी करें
// intlayer.config.tsexport default { internationalization: { locales: ["en", "fr", "es"], defaultLocale: "en", }, routing: { mode: "prefix-no-default", // डिफ़ॉल्ट },};GDPR अनुपालन: localStorage / कुकीज़ स्टोरेज
v7 उपयोगकर्ता की गोपनीयता को प्राथमिकता देता है और कुकीज़ के बजाय localStorage को डिफ़ॉल्ट स्टोरेज तंत्र के रूप में उपयोग करता है। यह बदलाव लोकल प्राथमिकताओं के लिए कुकी सहमति आवश्यकताओं से बचकर GDPR अनुपालन में मदद करता है।
स्टोरेज कॉन्फ़िगरेशन विकल्प
नया routing.storage फ़ील्ड पिछले middleware.cookieName और middleware.serverSetCookie विकल्पों के अतिरिक्त भी उपलब्ध है, जो लचीली स्टोरेज कॉन्फ़िगरेशन प्रदान करता है:
कोड को क्लिपबोर्ड पर कॉपी करें
// स्टोरेज अक्षम करेंstorage: false// सरल स्टोरेज प्रकारstorage: 'cookie'storage: 'localStorage'storage: 'sessionStorage'// कस्टम विशेषताओं के साथ कुकीstorage: { type: 'cookie', name: 'custom-locale', domain: '.example.com', secure: true, sameSite: 'strict'}// कस्टम कुंजी के साथ localStoragestorage: { type: 'localStorage', name: 'custom-locale'}// पुनरावृत्ति के लिए कई स्टोरेज प्रकारstorage: ['cookie', 'localStorage']GDPR-अनुपालन कॉन्फ़िगरेशन उदाहरण
उत्पादन अनुप्रयोगों के लिए जिन्हें कार्यक्षमता और GDPR अनुपालन के बीच संतुलन बनाना होता है:
कोड को क्लिपबोर्ड पर कॉपी करें
// intlayer.config.tsexport default { internationalization: { locales: ["en", "fr", "es"], defaultLocale: "en", }, routing: { mode: "prefix-no-default", storage: [ { type: "localStorage", // प्राथमिक स्टोरेज (कोई सहमति आवश्यक नहीं) name: "user-locale", }, { type: "cookie", // वैकल्पिक कुकी स्टोरेज (सहमति आवश्यक) name: "user-locale", secure: true, sameSite: "strict", httpOnly: false, }, ], },};कुकी स्टोरेज सक्षम / अक्षम करें
React / Next.js का उपयोग करते हुए उदाहरण:
ग्लोबली परिभाषित किया जा सकता है:
कोड को क्लिपबोर्ड पर कॉपी करें
<IntlayerProvider isCookieEnabled={false}> <App /></IntlayerProvider>प्रत्येक हुक के लिए स्थानीय रूप से ओवरराइड किया जा सकता है:
कोड को क्लिपबोर्ड पर कॉपी करें
const { setLocale } = useLocale({ isCookieEnabled: false });setLocale("en");नोट: कुकीज़ डिफ़ॉल्ट रूप से सक्षम हैं। नोट: अपने विशिष्ट उपयोग के लिए GDPR कुकी आवश्यकताओं की जांच करें।
विज़ुअल एडिटर: 30% छोटा पैकेज
विज़ुअल एडिटर पैकेज को पिछले संस्करण की तुलना में 30% छोटा करने के लिए अनुकूलित किया गया है, इसके कारण:
- कोड एडिटर प्रदर्शन में सुधार
- Intlayer कोर पैकेजों पर अनावश्यक निर्भरताओं को हटाना
- बेहतर ट्री-शेकिंग और मॉड्यूल बंडलिंग
इससे आपके एप्लिकेशन के लिए डाउनलोड समय तेज़ होता है और रनटाइम प्रदर्शन में सुधार होता है।
स्वचालित कोड फॉर्मेटिंग: formatCommand कॉन्फ़िगरेशन
v7 एडिटर कॉन्फ़िगरेशन में formatCommand विकल्प को पेश करता है, जो आपको Intlayer द्वारा लिखी गई कंटेंट फाइलों को स्वचालित रूप से फॉर्मेट करने की अनुमति देता है। यह आपकी कंटेंट घोषणा फाइलों में सुसंगत कोड शैली और फॉर्मेटिंग सुनिश्चित करता है।
यदि सेट नहीं किया गया है, तो Intlayer स्वचालित रूप से फॉर्मेट कमांड का पता लगाने का प्रयास करेगा। निम्नलिखित कमांड को resolve करने का प्रयास करके: prettier, biome, eslint।
कॉन्फ़िगरेशन
formatCommand विकल्प एक स्ट्रिंग टेम्पलेट स्वीकार करता है जहाँ {{file}} को वास्तविक फ़ाइल पथ से प्रतिस्थापित किया जाएगा:
कोड को क्लिपबोर्ड पर कॉपी करें
export default { content: { formatCommand: 'bun x biome format "{{file}}" --write --log-level none', },};समर्थित formatters
आप किसी भी code formatter का उपयोग कर सकते हैं जो फ़ाइल पथ को arguments के रूप में स्वीकार करता है:
Biome का उपयोग करते हुए:
कोड को क्लिपबोर्ड पर कॉपी करें
formatCommand: 'bun x biome format "{{file}}" --write --log-level none';Prettier का उपयोग करते हुए:
कोड को क्लिपबोर्ड पर कॉपी करें
formatCommand: 'npx prettier --write "{{file}}" --log-level silent';ESLint का उपयोग करते हुए:
कोड को क्लिपबोर्ड पर कॉपी करें
formatCommand: 'npx eslint --fix "{{file}}" --quiet';Bun के built-in formatter का उपयोग करते हुए:
कोड को क्लिपबोर्ड पर कॉपी करें
formatCommand: 'bun format "{{file}}"';लाभ
- सुसंगत स्वरूपण: सभी सामग्री फ़ाइलें स्वचालित रूप से आपके प्रोजेक्ट के शैली दिशानिर्देशों के अनुसार स्वरूपित होती हैं
- डेवलपर अनुभव: Intlayer के लिखने के बाद फ़ाइलों को मैन्युअल रूप से स्वरूपित करने की आवश्यकता नहीं है
- टीम सुसंगतता: सुनिश्चित करता है कि सभी टीम सदस्यों के पास सामग्री फ़ाइलों पर समान स्वरूपण लागू हो
- CI/CD एकीकरण: सामग्री फ़ाइलें स्वचालित वर्कफ़्लो में सुसंगत स्वरूपण बनाए रखती हैं
यह कैसे काम करता है
जब Intlayer एक content declaration फ़ाइल (.content.ts, .content.js, आदि) को लिखता या अपडेट करता है, तो यह स्वचालित रूप से फ़ाइल पर निर्दिष्ट format command चलाता है। {{file}} placeholder को वास्तविक फ़ाइल path से replace किया जाता है, और command को project के base directory में execute किया जाता है।
Dictionary Configuration: Better organization and structure
v7 एक नया dedicated dictionary configuration section introduce करता है जो dictionary-related settings के लिए बेहतर organization और improved content management प्रदान करता है।
नया dictionary कॉन्फ़िगरेशन संरचना
fill प्रॉपर्टी को content सेक्शन से एक नए dictionary सेक्शन में स्थानांतरित किया गया है, जो चिंताओं का स्पष्ट पृथक्करण प्रदान करता है:
v6 कॉन्फ़िगरेशन:
कोड को क्लिपबोर्ड पर कॉपी करें
export default { content: { autoFill: "./{{fileName}}.content.json", contentDir: ["src"], },};v7 कॉन्फ़िगरेशन:
कोड को क्लिपबोर्ड पर कॉपी करें
export default { content: { contentDir: ["src"], }, dictionary: { fill: "./{{fileName}}.content.json", },};नई संरचना के लाभ
- स्पष्ट संगठन: Dictionary-specific सेटिंग्स अब एक साथ समूहीकृत हैं
- Concerns का बेहतर separation: Content discovery बनाम dictionary operations स्पष्ट रूप से अलग हैं
- बेहतर maintainability: Dictionary-related configurations को समझना और संशोधित करना आसान है
- Future extensibility: Dictionary section अतिरिक्त dictionary-specific सेटिंग्स को समायोजित कर सकता है
- Comprehensive dictionary management:
title,live,priority,tags,version, औरdescriptionजैसे properties शामिल हैं जो नए dictionaries बनाने और प्रबंधित करने के लिए हैं
कॉन्फ़िगरेशन उपयोग
डिक्शनरी कॉन्फ़िगरेशन दो मुख्य उद्देश्यों को पूरा करता है:
- डिफ़ॉल्ट मान: कंटेंट डिक्लेरेशन फ़ाइलें बनाते समय डिफ़ॉल्ट मान परिभाषित करें
- फॉलबैक व्यवहार: जब विशिष्ट फ़ील्ड परिभाषित नहीं हों तो फॉलबैक मान प्रदान करें, जिससे आप डिक्शनरी ऑपरेशन व्यवहार को विश्व स्तर पर परिभाषित कर सकें
डिक्शनरी सेक्शन में डिक्शनरी प्रबंधन के लिए व्यापक गुण शामिल हैं:
fill: कंटेंट जेनरेशन के लिए ऑटो-फिल व्यवहारtitle: नई डिक्शनरीज के लिए डिफ़ॉल्ट शीर्षकlive: रीयल-टाइम अपडेट के लिए लाइव सिंक कॉन्फ़िगरेशनpriority: डिक्शनरी रेजोल्यूशन के लिए प्राथमिकता सेटिंग्सtags: कंटेंट ऑर्गनाइजेशन के लिए डिफ़ॉल्ट टैग्सversion: डिक्शनरी अपडेट के लिए संस्करण प्रबंधनdescription: नई कंटेंट के लिए डिफ़ॉल्ट विवरण
कंटेंट डिक्लेरेशन फ़ाइलों और कॉन्फ़िगरेशन मानों को कैसे लागू किया जाता है, इस बारे में अधिक जानकारी के लिए, कंटेंट फ़ाइल डॉक्यूमेंटेशन देखें।
Fill कमांड: बेहतर कंटेंट प्रबंधन के लिए अपडेटेड व्यवहार
v7 में fill कमांड के लिए बेहतर व्यवहार पेश किया गया है, जो अधिक पूर्वानुमेय और लचीला कंटेंट प्रबंधन प्रदान करता है:
नया fill व्यवहार
fill: true- सभी लोकल्स के लिए भरे गए कंटेंट के साथ वर्तमान फ़ाइल को पुनः लिखता हैfill: "path/to/file"- निर्दिष्ट फ़ाइल को भरे बिना वर्तमान फ़ाइल को संशोधित किए बिना भरता हैfill: false- ऑटो-फिल को पूरी तरह से अक्षम करता है
जटिल कंटेंट संरचनाओं के लिए उन्नत समर्थन
fill कमांड अब जटिल कंटेंट घोषणा संरचनाओं का समर्थन करता है, जिसमें शामिल हैं:
- संयोजित ऑब्जेक्ट्स: कंटेंट घोषणाएं जो अन्य ऑब्जेक्ट्स का संदर्भ देती हैं
- डिस्ट्रक्चर्ड कंटेंट: कंटेंट जो डिस्ट्रक्चरिंग पैटर्न का उपयोग करता है
- नेस्टेड संदर्भ: ऑब्जेक्ट्स जो जटिल पदानुक्रमों में एक-दूसरे को कॉल करते हैं
- डायनामिक कंटेंट संरचनाएं: कंटेंट जिसमें सशर्त या गणना की गई विशेषताएं होती हैं
लाभ
- स्पष्ट इरादा: व्यवहार अब अधिक स्पष्ट है कि क्या संशोधित किया जाता है
- बेहतर पृथक्करण: कंटेंट फ़ाइलों को भरे गए अनुवादों से अलग रखा जा सकता है
- सुधारित कार्यप्रवाह: डेवलपर्स के पास यह नियंत्रित करने का अधिक विकल्प होता है कि अनुवाद कहाँ संग्रहीत किए जाते हैं
- जटिल संरचना समर्थन: कई परस्पर जुड़े ऑब्जेक्ट्स के साथ परिष्कृत कंटेंट आर्किटेक्चर को संभालें
उदाहरण उपयोग
कोड को क्लिपबोर्ड पर कॉपी करें
// सभी लोकल्स के साथ वर्तमान फ़ाइल को पुनः लिखेंconst content = { key: "example", fill: true, // इस फ़ाइल को पुनः लिखता है content: { title: "Hello World", },};// वर्तमान फ़ाइल को संशोधित किए बिना अलग फ़ाइल भरेंconst content = { key: "example", fill: "./translations.json", // translations.json बनाता/अपडेट करता है content: { title: "Hello World", },};// ऑटो-फिल अक्षम करेंconst content = { key: "example", fill: false, // कोई ऑटो-फिल नहीं content: { title: "Hello World", },};// संयोजित ऑब्जेक्ट्स के साथ जटिल कंटेंट संरचनाconst sharedContent = { buttons: { save: "सहेजें", cancel: "रद्द करें", },};const content = { key: "complex-example", fill: true, content: { // अन्य ऑब्जेक्ट्स के संदर्भ sharedContent, // डीस्ट्रक्चर्ड कंटेंट ...sharedContent, // नेस्टेड संदर्भ sections: [ { ...sharedContent.buttons, header: "सेक्शन 1", }, ], },};बेहतर स्थिरता और अनुवाद प्रबंधन
v7 कई सुधार प्रस्तुत करता है जो कंटेंट अनुवाद को अधिक विश्वसनीय और कुशल बनाते हैं:
पूर्ण कंटेंट घोषणा फ़ाइल अपडेट्स
सिस्टम अब आंशिक अपडेट के बजाय .content.{ts,js,cjs,mjs} फ़ाइलों को अपडेट करता है, जिससे सुनिश्चित होता है कि:
- डेटा अखंडता: पूरी फ़ाइल को पुनः लिखने से आंशिक अपडेट से बचा जाता है जो कंटेंट को भ्रष्ट कर सकते हैं
- संगति: सभी लोकल्स को एक साथ अपडेट किया जाता है, जिससे सिंक्रनाइज़ेशन बना रहता है
- विश्वसनीयता: अधूरी या त्रुटिपूर्ण कंटेंट फ़ाइलों के जोखिम को कम करता है
बुद्धिमान पुनः प्रयास प्रबंधन
नए पुनः प्रयास तंत्र गलत प्रारूपों में कंटेंट भेजने से रोकते हैं, और यदि एक अनुरोध विफल हो जाता है तो पूरे भरने की प्रक्रिया को टूटने से बचाते हैं।
तेज़ प्रोसेसिंग के लिए समानांतरता
अनुवाद संचालन अब कतार में चलते हैं ताकि उन्हें समानांतर में चलाया जा सके। इससे प्रक्रिया काफी तेज़ हो जाती है।
बड़े फ़ाइलों के लिए स्मार्ट चंकिंग
उन्नत चंकिंग रणनीतियाँ बड़ी कंटेंट फ़ाइलों को AI संदर्भ विंडो से अधिक हुए बिना संभालती हैं:
उदाहरण कार्यप्रवाह
कोड को क्लिपबोर्ड पर कॉपी करें
// बड़ी कंटेंट फ़ाइल स्वचालित रूप से चंक की जाती हैconst content = { key: "large-documentation", fill: true, content: { // AI प्रोसेसिंग के लिए बड़ी सामग्री को स्वचालित रूप से चंक किया गया introduction: "..." // 5000+ अक्षर sections: [ // कई बड़े सेक्शन ] }};सिस्टम स्वचालित रूप से:
- सामग्री के आकार और संरचना का विश्लेषण करता है
- सामग्री को उपयुक्त रूप से चंक करता है
- चंक्स को समानांतर में प्रोसेस करता है
- आवश्यक होने पर मान्यकरण करता है और पुनः प्रयास करता है
- पूरी फ़ाइल को पुनर्निर्मित करता है
v6 से माइग्रेशन नोट्स
हटाई गई कॉन्फ़िगरेशन
middleware.cookieName: इसेrouting.storageसे बदला गया हैmiddleware.serverSetCookie: इसेrouting.storageसे बदला गया हैmiddleware.prefixDefault: इसेrouting.modeसे बदला गया हैmiddleware.noPrefix: इसेrouting.modeसे बदला गया है
नई कॉन्फ़िगरेशन
editor.formatCommand: कंटेंट फाइलों के स्वचालित कोड फॉर्मेटिंग के लिए नया विकल्प
माइग्रेशन मैपिंग
कॉन्फ़िगरेशन मैपिंग
सभी डेटा सामग्री को स्पष्ट रूप से देखने के लिए तालिका को मोडल में खोलें
| v6 कॉन्फ़िगरेशन | v7 कॉन्फ़िगरेशन |
|---|---|
autoFill: xxx | fill: xxx |
prefixDefault: false | mode: 'prefix-no-default' |
prefixDefault: true | mode: 'prefix-all' |
noPrefix: true | mode: 'no-prefix' |
cookieName: 'my-locale' | storage: { type: 'cookie', name: 'my-locale' } |
serverSetCookie: 'never' | storage: false या स्टोरेज एरे से कुकी हटाएं |
उदाहरण माइग्रेशन
पहले (v6):
कोड को क्लिपबोर्ड पर कॉपी करें
export default { middleware: { headerName: "x-intlayer-locale", cookieName: "intlayer-locale", prefixDefault: false, basePath: "", serverSetCookie: "always", noPrefix: false, },};बाद में (v7):
कोड को क्लिपबोर्ड पर कॉपी करें
export default { routing: { mode: "prefix-no-default", storage: "localStorage", // या 'cookie' यदि आपको कुकी स्टोरेज की आवश्यकता है headerName: "x-intlayer-locale", basePath: "", },};शब्दकोश सामग्री मैपिंग
सभी डेटा सामग्री को स्पष्ट रूप से देखने के लिए तालिका को मोडल में खोलें
| v6 शब्दकोश सामग्री | v7 शब्दकोश सामग्री |
|---|---|
autoFill: xxx | fill: xxx |
उदाहरण माइग्रेशन
पहले (v6):
कोड को क्लिपबोर्ड पर कॉपी करें
const content = { key: "example", autoFill: true, // इस फ़ाइल को पुनः लिखता है content: { title: "हैलो वर्ल्ड", },};बाद में (v7):
कोड को क्लिपबोर्ड पर कॉपी करें
const content = { key: "example", fill: true, // इस फ़ाइल को पुनः लिखता है content: { title: "हैलो वर्ल्ड", },};v5 से v6 तक माइग्रेशन नोट्स
अधिक जानकारी के लिए v5 से v6 तक माइग्रेशन नोट्स देखें।